From 7e147e56794b06b4eb695c17d9ca79c51b4d89d1 Mon Sep 17 00:00:00 2001 From: Chris Bradley Date: Sun, 24 Sep 2017 14:56:19 +1300 Subject: [PATCH 01/13] Change Computational to Computation to avoid symbol length problems. Rename computational environment module to ComputationalRoutines. Change computational_environment.f90 to computational_routines.f90. Fix up comptuational routines module for new style. --- bindings/c/tests/laplace.c | 12 +- cmake/Sources.cmake | 2 +- src/Darcy_equations_routines.f90 | 8 +- src/Navier_Stokes_equations_routines.f90 | 122 +-- src/analytic_analysis_routines.f90 | 44 +- src/base_routines.f90 | 52 +- src/boundary_condition_routines.f90 | 30 +- src/cmiss.f90 | 16 +- src/computation_routines.f90 | 818 +++++++++++++++++ src/computational_environment.f90 | 820 ------------------ src/data_projection_routines.f90 | 114 +-- src/distributed_matrix_vector.f90 | 105 +-- src/domain_mappings.f90 | 24 +- src/equations_set_routines.f90 | 14 +- src/field_IO_routines.f90 | 342 ++++---- src/field_routines.f90 | 32 +- src/fieldml_input_routines.f90 | 8 +- src/fieldml_output_routines.f90 | 8 +- src/finite_elasticity_routines.f90 | 28 +- src/generated_mesh_routines.f90 | 28 +- src/mesh_routines.f90 | 160 ++-- src/opencmiss_iron.f90 | 223 ++--- src/reaction_diffusion_IO_routines.f90 | 264 +++--- src/reaction_diffusion_equation_routines.f90 | 22 +- src/solver_mapping_routines.f90 | 32 +- src/solver_routines.f90 | 16 +- src/types.f90 | 10 +- tests/CellML/CellMLModelIntegration.f90 | 24 +- tests/CellML/Monodomain.f90 | 20 +- tests/ClassicalField/AnalyticHelmholtz.f90 | 2 +- tests/ClassicalField/AnalyticLaplace.f90 | 2 +- .../AnalyticNonlinearPoisson.f90 | 10 +- tests/ClassicalField/Laplace.f90 | 14 +- tests/FieldML_IO/cube.f90 | 10 +- tests/FieldML_IO/fieldml_io.f90 | 8 +- tests/FiniteElasticity/Cantilever.f90 | 12 +- tests/FiniteElasticity/SimpleShear.f90 | 14 +- tests/LinearElasticity/CantileverBeam.f90 | 10 +- tests/LinearElasticity/Extension.f90 | 10 +- 39 files changed, 1745 insertions(+), 1745 deletions(-) create mode 100755 src/computation_routines.f90 delete mode 100755 src/computational_environment.f90 diff --git a/bindings/c/tests/laplace.c b/bindings/c/tests/laplace.c index e2759f9a..f7166def 100755 --- a/bindings/c/tests/laplace.c +++ b/bindings/c/tests/laplace.c @@ -103,7 +103,7 @@ int main() cmfe_SolverType Solver=(cmfe_SolverType)NULL; cmfe_SolverEquationsType SolverEquations=(cmfe_SolverEquationsType)NULL; - int NumberOfComputationalNodes,ComputationalNodeNumber; + int NumberOfComputationNodes,ComputationNodeNumber; int EquationsSetIndex; int FirstNodeNumber,LastNodeNumber; int FirstNodeDomain,LastNodeDomain; @@ -127,8 +127,8 @@ int main() CHECK_ERROR("Initialising OpenCMISS-Iron"); Err = cmfe_ErrorHandlingModeSet(CMFE_ERRORS_TRAP_ERROR); - Err = cmfe_ComputationalNumberOfNodesGet(&NumberOfComputationalNodes); - Err = cmfe_ComputationalNodeNumberGet(&ComputationalNodeNumber); + Err = cmfe_ComputationNumberOfNodesGet(&NumberOfComputationNodes); + Err = cmfe_ComputationNodeNumberGet(&ComputationNodeNumber); /* Start the creation of a new RC coordinate system */ Err = cmfe_CoordinateSystem_Initialise(&CoordinateSystem); @@ -200,7 +200,7 @@ int main() Err = cmfe_Decomposition_CreateStart(DECOMPOSITION_USER_NUMBER,Mesh,Decomposition); /* Set the decomposition to be a general decomposition with the specified number of domains */ Err = cmfe_Decomposition_TypeSet(Decomposition,CMFE_DECOMPOSITION_CALCULATED_TYPE); - Err = cmfe_Decomposition_NumberOfDomainsSet(Decomposition,NumberOfComputationalNodes); + Err = cmfe_Decomposition_NumberOfDomainsSet(Decomposition,NumberOfComputationNodes); /* Finish the decomposition */ Err = cmfe_Decomposition_CreateFinish(Decomposition); @@ -313,12 +313,12 @@ int main() } Err = cmfe_Decomposition_NodeDomainGet(Decomposition,FirstNodeNumber,1,&FirstNodeDomain); Err = cmfe_Decomposition_NodeDomainGet(Decomposition,LastNodeNumber,1,&LastNodeDomain); - if(FirstNodeDomain==ComputationalNodeNumber) + if(FirstNodeDomain==ComputationNodeNumber) { Err = cmfe_BoundaryConditions_SetNode(BoundaryConditions,DependentField,CMFE_FIELD_U_VARIABLE_TYPE,1,1,FirstNodeNumber,1, \ CMFE_BOUNDARY_CONDITION_FIXED,0.0); } - if(LastNodeDomain==ComputationalNodeNumber) + if(LastNodeDomain==ComputationNodeNumber) { Err = cmfe_BoundaryConditions_SetNode(BoundaryConditions,DependentField,CMFE_FIELD_U_VARIABLE_TYPE,1,1,LastNodeNumber,1, \ CMFE_BOUNDARY_CONDITION_FIXED,1.0); diff --git a/cmake/Sources.cmake b/cmake/Sources.cmake index 9bbfed0b..ac10c9c2 100644 --- a/cmake/Sources.cmake +++ b/cmake/Sources.cmake @@ -36,7 +36,7 @@ set(IRON_Fortran_SRC cmiss_petsc_types.f90 cmiss_petsc.f90 cmiss.f90 - computational_environment.f90 + computation_routines.f90 constants.f90 control_loop_routines.f90 control_loop_access_routines.f90 diff --git a/src/Darcy_equations_routines.f90 b/src/Darcy_equations_routines.f90 index 88f78b70..d3e70fc0 100755 --- a/src/Darcy_equations_routines.f90 +++ b/src/Darcy_equations_routines.f90 @@ -51,7 +51,7 @@ MODULE DARCY_EQUATIONS_ROUTINES USE Constants USE CONTROL_LOOP_ROUTINES USE ControlLoopAccessRoutines - USE ComputationEnvironment + USE ComputationRoutines USE COORDINATE_ROUTINES USE DISTRIBUTED_MATRIX_VECTOR USE DOMAIN_MAPPINGS @@ -7253,7 +7253,7 @@ SUBROUTINE DARCY_EQUATION_MONITOR_CONVERGENCE(CONTROL_LOOP,SOLVER,err,error,*) INTEGER(INTG) :: FIELD_VAR_TYPE INTEGER(INTG) :: dof_number,NUMBER_OF_DOFS,equations_set_idx - INTEGER(INTG) :: COMPUTATIONAL_NODE_NUMBER + INTEGER(INTG) :: COMPUTATION_NODE_NUMBER INTEGER(INTG) :: FILEUNIT_N, FILEUNIT_N1 ENTERS("DARCY_EQUATION_MONITOR_CONVERGENCE",err,error,*999) @@ -7266,8 +7266,8 @@ SUBROUTINE DARCY_EQUATION_MONITOR_CONVERGENCE(CONTROL_LOOP,SOLVER,err,error,*) NULLIFY(vectorMapping) NULLIFY(FIELD_VARIABLE) - COMPUTATIONAL_NODE_NUMBER=ComputationalEnvironment_NodeNumberGet(err,error) - WRITE(FILENAME,'("Darcy_",I3.3,".conv")') COMPUTATIONAL_NODE_NUMBER + COMPUTATION_NODE_NUMBER=ComputationEnvironment_NodeNumberGet(err,error) + WRITE(FILENAME,'("Darcy_",I3.3,".conv")') COMPUTATION_NODE_NUMBER FILEPATH = "./output/"//FILENAME OPEN(UNIT=23, FILE=CHAR(FILEPATH),STATUS='unknown',ACCESS='append') diff --git a/src/Navier_Stokes_equations_routines.f90 b/src/Navier_Stokes_equations_routines.f90 index b8931e8d..2522dadc 100644 --- a/src/Navier_Stokes_equations_routines.f90 +++ b/src/Navier_Stokes_equations_routines.f90 @@ -26,7 +26,7 @@ !> Auckland, the University of Oxford and King's College, London. !> All Rights Reserved. !> -!> Contributor(s): David Ladd, Soroush Safaei, Chris Bradley +!> Contributor(s): Sebastian Krittian, David Ladd, Soroush Safaei, Chris Bradley !> !> Alternatively, the contents of this file may be used under the terms of !> either the GNU General Public License Version 2 or later (the "GPL"), or @@ -53,7 +53,7 @@ MODULE NAVIER_STOKES_EQUATIONS_ROUTINES USE CmissMPI USE CmissPetsc USE CmissPetscTypes - USE ComputationEnvironment + USE ComputationRoutines USE Constants USE CONTROL_LOOP_ROUTINES USE COORDINATE_ROUTINES @@ -7007,7 +7007,7 @@ SUBROUTINE NavierStokes_PreSolveUpdateBoundaryConditions(SOLVER,err,error,*) INTEGER(INTG) :: componentNumberVelocity,numberOfDimensions,numberOfNodes,numberOfGlobalNodes INTEGER(INTG) :: dependentVariableType,independentVariableType,dependentDof,independentDof,userNodeNumber,localNodeNumber INTEGER(INTG) :: EquationsSetIndex,SolidNodeNumber,FluidNodeNumber,equationsSetIdx - INTEGER(INTG) :: currentTimeLoopIteration,outputIterationNumber,numberOfFittedNodes,computationalNode + INTEGER(INTG) :: currentTimeLoopIteration,outputIterationNumber,numberOfFittedNodes,computationNode INTEGER(INTG), ALLOCATABLE :: InletNodes(:) REAL(DP) :: CURRENT_TIME,TIME_INCREMENT,DISPLACEMENT_VALUE,VALUE,XI_COORDINATES(3),timeData,QP,QPP,componentValues(3) REAL(DP) :: T_COORDINATES(20,3),MU_PARAM,RHO_PARAM,X(3),FluidGFValue,SolidDFValue,NewLaplaceBoundaryValue,Lref,Tref,Mref @@ -7100,7 +7100,7 @@ SUBROUTINE NavierStokes_PreSolveUpdateBoundaryConditions(SOLVER,err,error,*) IF(ASSOCIATED(independentField)) THEN componentNumberVelocity = 1 numberOfDimensions = dependentFieldVariable%NUMBER_OF_COMPONENTS - 1 - ! Get the nodes on this computational domain + ! Get the nodes on this computation domain IF(independentFieldVariable%COMPONENTS(componentNumberVelocity)%INTERPOLATION_TYPE== & & FIELD_NODE_BASED_INTERPOLATION) THEN domain=>independentFieldVariable%COMPONENTS(componentNumberVelocity)%DOMAIN @@ -7123,7 +7123,7 @@ SUBROUTINE NavierStokes_PreSolveUpdateBoundaryConditions(SOLVER,err,error,*) CALL FlagError("Only node based interpolation is implemented.",err,error,*999) END IF - ! Construct the filename based on the computational node and time step + ! Construct the filename based on the computation node and time step inputFile = './../interpolatedData/fitData' //TRIM(NUMBER_TO_VSTRING(currentTimeLoopIteration, & & "*",ERR,ERROR)) // '.dat' @@ -7142,7 +7142,7 @@ SUBROUTINE NavierStokes_PreSolveUpdateBoundaryConditions(SOLVER,err,error,*) CALL DOMAIN_TOPOLOGY_NODE_CHECK_EXISTS(domain%Topology,userNodeNumber,nodeExists, & & localNodeNumber,ghostNode,err,error,*999) IF(nodeExists .AND. .NOT. ghostNode) THEN - ! Node found on this computational node + ! Node found on this computation node READ(10,*) (componentValues(componentIdx), componentIdx=1,numberOfDimensions) DO componentIdx=1,numberOfDimensions dependentDof = dependentFieldVariable%COMPONENTS(componentIdx)%PARAM_TO_DOF_MAP% & @@ -7161,7 +7161,7 @@ SUBROUTINE NavierStokes_PreSolveUpdateBoundaryConditions(SOLVER,err,error,*) END IF END DO !componentIdx ELSE - ! Dummy read if this node not on this computational node + ! Dummy read if this node not on this computation node READ(10,*) END IF END DO @@ -7739,7 +7739,7 @@ SUBROUTINE NavierStokes_PreSolveUpdateBoundaryConditions(SOLVER,err,error,*) IF(ASSOCIATED(independentField)) THEN componentNumberVelocity = 1 numberOfDimensions = dependentFieldVariable%NUMBER_OF_COMPONENTS - 1 - ! Get the nodes on this computational domain + ! Get the nodes on this computation domain IF(independentFieldVariable%COMPONENTS(componentNumberVelocity)%INTERPOLATION_TYPE== & & FIELD_NODE_BASED_INTERPOLATION) THEN domain=>independentFieldVariable%COMPONENTS(componentNumberVelocity)%DOMAIN @@ -7762,15 +7762,15 @@ SUBROUTINE NavierStokes_PreSolveUpdateBoundaryConditions(SOLVER,err,error,*) CALL FlagError("Only node based interpolation is implemented.",ERR,ERROR,*999) END IF - ! Construct the filename based on the computational node and time step + ! Construct the filename based on the computation node and time step inputFile = './../interpolatedData/fitData' //TRIM(NUMBER_TO_VSTRING(currentTimeLoopIteration, & & "*",ERR,ERROR)) // '.dat' INQUIRE(FILE=inputFile, EXIST=importDataFromFile) IF(importDataFromFile) THEN !Read fitted data from input file (if exists) - computationalNode = ComputationalEnvironment_NodeNumberGet(ERR,ERROR) - IF(computationalNode==0) THEN + computationNode = ComputationEnvironment_NodeNumberGet(ERR,ERROR) + IF(computationNode==0) THEN CALL WRITE_STRING(GENERAL_OUTPUT_TYPE,"Updating independent field and boundary nodes from " & & //inputFile,ERR,ERROR,*999) END IF @@ -7784,7 +7784,7 @@ SUBROUTINE NavierStokes_PreSolveUpdateBoundaryConditions(SOLVER,err,error,*) CALL DOMAIN_TOPOLOGY_NODE_CHECK_EXISTS(domain%Topology,userNodeNumber,nodeExists, & & localNodeNumber,ghostNode,err,error,*999) IF(nodeExists .AND. .NOT. ghostNode) THEN - ! Node found on this computational node + ! Node found on this computation node READ(10,*) (componentValues(componentIdx), componentIdx=1,numberOfDimensions) DO componentIdx=1,numberOfDimensions dependentDof = dependentFieldVariable%COMPONENTS(componentIdx)%PARAM_TO_DOF_MAP% & @@ -7803,7 +7803,7 @@ SUBROUTINE NavierStokes_PreSolveUpdateBoundaryConditions(SOLVER,err,error,*) END IF END DO !componentIdx ELSE - ! Dummy read if this node not on this computational node + ! Dummy read if this node not on this computation node READ(10,*) END IF END DO @@ -12560,8 +12560,8 @@ SUBROUTINE NavierStokes_CalculateBoundaryFlux(equationsSet,coupledEquationsSet,i INTEGER(INTG) :: faceNodeDerivativeIdx, meshComponentNumber INTEGER(INTG) :: normalComponentIdx INTEGER(INTG) :: boundaryID,numberOfBoundaries,boundaryType,coupledNodeNumber,numberOfGlobalBoundaries - INTEGER(INTG) :: MPI_IERROR,numberOfComputationalNodes - INTEGER(INTG) :: i,j,computationalNode + INTEGER(INTG) :: MPI_IERROR,numberOfComputationNodes + INTEGER(INTG) :: i,j,computationNode REAL(DP) :: gaussWeight, normalProjection,elementNormal(3) REAL(DP) :: normalDifference,normalTolerance REAL(DP) :: courant,maxCourant,toleranceCourant @@ -12875,28 +12875,28 @@ SUBROUTINE NavierStokes_CalculateBoundaryFlux(equationsSet,coupledEquationsSet,i ! G a t h e r v a l u e s o v e r t h r e a d s ! ------------------------------------------------------ - ! Need to add boundary flux for any boundaries split accross computational nodes + ! Need to add boundary flux for any boundaries split accross computation nodes numberOfGlobalBoundaries = 0 globalBoundaryFlux = 0.0_DP globalBoundaryArea = 0.0_DP globalBoundaryPressure = 0.0_DP globalBoundaryNormalStress = 0.0_DP - numberOfComputationalNodes=computationalEnvironment%numberOfComputationalNodes - IF(numberOfComputationalNodes>1) THEN !use mpi + numberOfComputationNodes=computationEnvironment%numberOfComputationNodes + IF(numberOfComputationNodes>1) THEN !use mpi CALL MPI_ALLREDUCE(localBoundaryFlux,globalBoundaryFlux,10,MPI_DOUBLE_PRECISION,MPI_SUM, & - & computationalEnvironment%mpiCommunicator,MPI_IERROR) + & computationEnvironment%mpiCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ALLREDUCE",MPI_IERROR,err,error,*999) CALL MPI_ALLREDUCE(localBoundaryArea,globalBoundaryArea,10,MPI_DOUBLE_PRECISION,MPI_SUM, & - & computationalEnvironment%mpiCommunicator,MPI_IERROR) + & computationEnvironment%mpiCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ALLREDUCE",MPI_IERROR,ERR,ERROR,*999) CALL MPI_ALLREDUCE(localBoundaryNormalStress,globalBoundaryNormalStress,10,MPI_DOUBLE_PRECISION,MPI_SUM, & - & computationalEnvironment%mpiCommunicator,MPI_IERROR) + & computationEnvironment%mpiCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ALLREDUCE",MPI_IERROR,ERR,ERROR,*999) CALL MPI_ALLREDUCE(localBoundaryPressure,globalBoundaryPressure,10,MPI_DOUBLE_PRECISION,MPI_SUM, & - & computationalEnvironment%mpiCommunicator,MPI_IERROR) + & computationEnvironment%mpiCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ALLREDUCE",MPI_IERROR,ERR,ERROR,*999) CALL MPI_ALLREDUCE(numberOfBoundaries,numberOfGlobalBoundaries,1,MPI_INTEGER,MPI_MAX, & - & computationalEnvironment%mpiCommunicator,MPI_IERROR) + & computationEnvironment%mpiCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ALLREDUCE",MPI_IERROR,ERR,ERROR,*999) ELSE numberOfGlobalBoundaries = numberOfBoundaries @@ -12914,8 +12914,8 @@ SUBROUTINE NavierStokes_CalculateBoundaryFlux(equationsSet,coupledEquationsSet,i END DO DO boundaryID=2,numberOfGlobalBoundaries IF(globalBoundaryArea(boundaryID) > ZERO_TOLERANCE) THEN - computationalNode = ComputationalEnvironment_NodeNumberGet(ERR,ERROR) - IF(computationalNode==0) THEN + computationNode = ComputationEnvironment_NodeNumberGet(ERR,ERROR) + IF(computationNode==0) THEN CALL WriteStringTwoValue(DIAGNOSTIC_OUTPUT_TYPE,"3D boundary ",boundaryID," flow: ", & & globalBoundaryFlux(boundaryID),err,error,*999) CALL WriteStringTwoValue(DIAGNOSTIC_OUTPUT_TYPE,"3D boundary ",boundaryID," area: ", & @@ -13179,11 +13179,11 @@ SUBROUTINE NavierStokes_CalculateBoundaryFlux(equationsSet,coupledEquationsSet,i END DO !elementIdx !allocate array for mpi communication - IF(numberOfComputationalNodes>1) THEN !use mpi - ALLOCATE(globalConverged(numberOfComputationalNodes),STAT=ERR) + IF(numberOfComputationNodes>1) THEN !use mpi + ALLOCATE(globalConverged(numberOfComputationNodes),STAT=ERR) IF(ERR/=0) CALL FlagError("Could not allocate global convergence check array.",ERR,ERROR,*999) CALL MPI_ALLGATHER(convergedFlag,1,MPI_LOGICAL,globalConverged,1,MPI_LOGICAL, & - & computationalEnvironment%mpiCommunicator,MPI_IERROR) + & computationEnvironment%mpiCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ALLGATHER",MPI_IERROR,ERR,ERROR,*999) IF(ALL(globalConverged)) THEN convergedFlag = .TRUE. @@ -13253,7 +13253,7 @@ SUBROUTINE NavierStokes_Couple1D0D(controlLoop,solver,err,error,*) TYPE(VARYING_STRING) :: localError INTEGER(INTG) :: nodeNumber,nodeIdx,derivativeIdx,versionIdx,componentIdx,numberOfLocalNodes1D INTEGER(INTG) :: solver1dNavierStokesNumber,solverNumber,MPI_IERROR,timestep,iteration - INTEGER(INTG) :: boundaryNumber,numberOfBoundaries,numberOfComputationalNodes + INTEGER(INTG) :: boundaryNumber,numberOfBoundaries,numberOfComputationNodes INTEGER(INTG) :: dependentDof,boundaryConditionType REAL(DP) :: A0_PARAM,E_PARAM,H_PARAM,beta,pCellML,normalWave(2) REAL(DP) :: qPrevious,pPrevious,aPrevious,q1d,a1d,qError,aError,couplingTolerance @@ -13475,13 +13475,13 @@ SUBROUTINE NavierStokes_Couple1D0D(controlLoop,solver,err,error,*) localConverged = .FALSE. END IF ! Need to check that boundaries have converged globally (on all domains) if this is a parallel problem - numberOfComputationalNodes=computationalEnvironment%numberOfComputationalNodes - IF(numberOfComputationalNodes>1) THEN !use mpi + numberOfComputationNodes=computationEnvironment%numberOfComputationNodes + IF(numberOfComputationNodes>1) THEN !use mpi !allocate array for mpi communication - ALLOCATE(globalConverged(numberOfComputationalNodes),STAT=ERR) + ALLOCATE(globalConverged(numberOfComputationNodes),STAT=ERR) IF(ERR/=0) CALL FlagError("Could not allocate global convergence check array.",ERR,ERROR,*999) CALL MPI_ALLGATHER(localConverged,1,MPI_LOGICAL,globalConverged,1,MPI_LOGICAL, & - & computationalEnvironment%mpiCommunicator,MPI_IERROR) + & computationEnvironment%mpiCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ALLGATHER",MPI_IERROR,err,error,*999) IF(ALL(globalConverged)) THEN !CALL WRITE_STRING_VALUE(DIAGNOSTIC_OUTPUT_TYPE,"1D/0D coupling converged; # iterations: ", & @@ -13544,8 +13544,8 @@ SUBROUTINE NavierStokes_Couple3D1D(controlLoop,err,error,*) TYPE(VARYING_STRING) :: localError INTEGER(INTG) :: nodeNumber,nodeIdx,derivativeIdx,versionIdx,componentIdx,numberOfLocalNodes1D INTEGER(INTG) :: solver1dNavierStokesNumber,MPI_IERROR,timestep,iteration - INTEGER(INTG) :: boundaryNumber,boundaryType1D,numberOfBoundaries,numberOfComputationalNodes - INTEGER(INTG) :: solver3dNavierStokesNumber,userNodeNumber,localDof,globalDof,computationalNode + INTEGER(INTG) :: boundaryNumber,boundaryType1D,numberOfBoundaries,numberOfComputationNodes + INTEGER(INTG) :: solver3dNavierStokesNumber,userNodeNumber,localDof,globalDof,computationNode REAL(DP) :: normalWave(2) REAL(DP) :: flow1D,stress1D,flow1DPrevious,stress1DPrevious,flow3D,stress3D,flowError,stressError REAL(DP) :: maxStressError,maxFlowError,flowTolerance,stressTolerance,absoluteCouplingTolerance @@ -13764,22 +13764,22 @@ SUBROUTINE NavierStokes_Couple3D1D(controlLoop,err,error,*) localConverged = .TRUE. END IF ! Need to check that boundaries have converged globally (on all domains) if this is a MPI problem - numberOfComputationalNodes=computationalEnvironment%numberOfComputationalNodes - IF(numberOfComputationalNodes>1) THEN !use mpi + numberOfComputationNodes=computationEnvironment%numberOfComputationNodes + IF(numberOfComputationNodes>1) THEN !use mpi !allocate array for mpi communication IF(ERR/=0) CALL FlagError("Could not allocate global convergence check array.",ERR,ERROR,*999) - CALL MPI_ALLREDUCE(localConverged,globalConverged,1,MPI_LOGICAL,MPI_LAND,computationalEnvironment%mpiCommunicator,MPI_IERROR) + CALL MPI_ALLREDUCE(localConverged,globalConverged,1,MPI_LOGICAL,MPI_LAND,computationEnvironment%mpiCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ALLREDUCE",MPI_IERROR,ERR,ERROR,*999) IF(globalConverged) THEN CALL WRITE_STRING_VALUE(DIAGNOSTIC_OUTPUT_TYPE,"3D/1D coupling converged; # iterations: ", & & iteration,err,error,*999) iterativeLoop%CONTINUE_LOOP=.FALSE. ELSE - computationalNode = ComputationalEnvironment_NodeNumberGet(ERR,ERROR) - CALL WriteStringTwoValue(DIAGNOSTIC_OUTPUT_TYPE,"Rank ",computationalNode," 3D/1D max flow error: ", & + computationNode = ComputationEnvironment_NodeNumberGet(ERR,ERROR) + CALL WriteStringTwoValue(DIAGNOSTIC_OUTPUT_TYPE,"Rank ",computationNode," 3D/1D max flow error: ", & & maxFlowError,err,error,*999) - CALL WriteStringTwoValue(DIAGNOSTIC_OUTPUT_TYPE,"Rank ",computationalNode," 3D/1D max stress error: ", & + CALL WriteStringTwoValue(DIAGNOSTIC_OUTPUT_TYPE,"Rank ",computationNode," 3D/1D max stress error: ", & & maxStressError,err,error,*999) END IF ELSE @@ -13844,7 +13844,7 @@ SUBROUTINE NavierStokes_CoupleCharacteristics(controlLoop,solver,err,error,*) TYPE(VARYING_STRING) :: localError INTEGER(INTG) :: nodeNumber,nodeIdx,derivativeIdx,versionIdx,componentIdx,i INTEGER(INTG) :: solver1dNavierStokesNumber,solverNumber - INTEGER(INTG) :: branchNumber,numberOfBranches,numberOfComputationalNodes,numberOfVersions + INTEGER(INTG) :: branchNumber,numberOfBranches,numberOfComputationNodes,numberOfVersions INTEGER(INTG) :: MPI_IERROR,timestep,iteration,outputIteration REAL(DP) :: couplingTolerance,l2ErrorW(30),wPrevious(2,7),wNavierStokes(2,7),wCharacteristic(2,7),wError(2,7) REAL(DP) :: l2ErrorQ(100),qCharacteristic(7),qNavierStokes(7),wNext(2,7) @@ -14055,13 +14055,13 @@ SUBROUTINE NavierStokes_CoupleCharacteristics(controlLoop,solver,err,error,*) localConverged = .FALSE. END IF ! Need to check that boundaries have converged globally (on all domains) if this is a parallel problem - numberOfComputationalNodes=computationalEnvironment%numberOfComputationalNodes - IF(numberOfComputationalNodes>1) THEN !use mpi + numberOfComputationNodes=computationEnvironment%numberOfComputationNodes + IF(numberOfComputationNodes>1) THEN !use mpi !allocate array for mpi communication - ALLOCATE(globalConverged(numberOfComputationalNodes),STAT=ERR) + ALLOCATE(globalConverged(numberOfComputationNodes),STAT=ERR) IF(ERR/=0) CALL FlagError("Could not allocate global convergence check array.",ERR,ERROR,*999) CALL MPI_ALLGATHER(localConverged,1,MPI_LOGICAL,globalConverged,1,MPI_LOGICAL, & - & computationalEnvironment%mpiCommunicator,MPI_IERROR) + & computationEnvironment%mpiCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ALLGATHER",MPI_IERROR,err,error,*999) IF(ALL(globalConverged)) THEN !CALL WRITE_STRING_VALUE(DIAGNOSTIC_OUTPUT_TYPE,"Navier-Stokes/Characteristic converged; # iterations: ", & @@ -14169,7 +14169,7 @@ SUBROUTINE NavierStokes_ShearRateCalculate(equationsSet,err,error,*) DO elementIdx=startElement,stopElement localElementNumber=elementsMapping%DOMAIN_LIST(elementIdx) userElementNumber = elementsMapping%LOCAL_TO_GLOBAL_MAP(localElementNumber) - !Check computational node for elementIdx + !Check computation node for elementIdx elementExists=.FALSE. ghostElement=.TRUE. CALL DECOMPOSITION_TOPOLOGY_ELEMENT_CHECK_EXISTS(decomposition%TOPOLOGY, & @@ -15020,8 +15020,8 @@ SUBROUTINE NavierStokes_CalculateBoundaryFlux3D0D(equationsSet,err,error,*) INTEGER(INTG) :: faceNodeIdx, elementNodeIdx INTEGER(INTG) :: faceNodeDerivativeIdx, meshComponentNumber INTEGER(INTG) :: boundaryID,numberOfBoundaries,boundaryType,coupledNodeNumber,numberOfGlobalBoundaries - INTEGER(INTG) :: MPI_IERROR,numberOfComputationalNodes - INTEGER(INTG) :: computationalNode,xiDirection(3),orientation + INTEGER(INTG) :: MPI_IERROR,numberOfComputationNodes + INTEGER(INTG) :: computationNode,xiDirection(3),orientation REAL(DP) :: gaussWeight, elementNormal(3) REAL(DP) :: normalDifference,normalTolerance REAL(DP) :: courant,maxCourant,toleranceCourant,boundaryValueTemp @@ -15248,24 +15248,24 @@ SUBROUTINE NavierStokes_CalculateBoundaryFlux3D0D(equationsSet,err,error,*) ! G a t h e r v a l u e s o v e r t h r e a d s ! ------------------------------------------------------ - ! Need to add boundary flux for any boundaries split accross computational nodes + ! Need to add boundary flux for any boundaries split accross computation nodes numberOfGlobalBoundaries = 0 globalBoundaryFlux = 0.0_DP globalBoundaryArea = 0.0_DP globalBoundaryPressure = 0.0_DP - numberOfComputationalNodes=computationalEnvironment%numberOfComputationalNodes - IF(numberOfComputationalNodes>1) THEN !use mpi + numberOfComputationNodes=computationEnvironment%numberOfComputationNodes + IF(numberOfComputationNodes>1) THEN !use mpi CALL MPI_ALLREDUCE(localBoundaryFlux,globalBoundaryFlux,10,MPI_DOUBLE_PRECISION,MPI_SUM, & - & computationalEnvironment%mpiCommunicator,MPI_IERROR) + & computationEnvironment%mpiCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ALLREDUCE",MPI_IERROR,ERR,ERROR,*999) CALL MPI_ALLREDUCE(localBoundaryArea,globalBoundaryArea,10,MPI_DOUBLE_PRECISION,MPI_SUM, & - & computationalEnvironment%mpiCommunicator,MPI_IERROR) + & computationEnvironment%mpiCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ALLREDUCE",MPI_IERROR,ERR,ERROR,*999) CALL MPI_ALLREDUCE(localBoundaryPressure,globalBoundaryPressure,10,MPI_DOUBLE_PRECISION,MPI_SUM, & - & computationalEnvironment%mpiCommunicator,MPI_IERROR) + & computationEnvironment%mpiCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ALLREDUCE",MPI_IERROR,ERR,ERROR,*999) CALL MPI_ALLREDUCE(numberOfBoundaries,numberOfGlobalBoundaries,1,MPI_INTEGER,MPI_MAX, & - & computationalEnvironment%mpiCommunicator,MPI_IERROR) + & computationEnvironment%mpiCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ALLREDUCE",MPI_IERROR,ERR,ERROR,*999) ELSE numberOfGlobalBoundaries = numberOfBoundaries @@ -15281,8 +15281,8 @@ SUBROUTINE NavierStokes_CalculateBoundaryFlux3D0D(equationsSet,err,error,*) END DO DO boundaryID=2,numberOfGlobalBoundaries IF(globalBoundaryArea(boundaryID) > ZERO_TOLERANCE) THEN - computationalNode = ComputationalEnvironment_NodeNumberGet(ERR,ERROR) - IF(computationalNode==0) THEN + computationNode = ComputationEnvironment_NodeNumberGet(ERR,ERROR) + IF(computationNode==0) THEN CALL WriteStringTwoValue(DIAGNOSTIC_OUTPUT_TYPE,"3D boundary ",boundaryID," flow: ", & & globalBoundaryFlux(boundaryID),err,error,*999) CALL WriteStringTwoValue(DIAGNOSTIC_OUTPUT_TYPE,"3D boundary ",boundaryID," mean pressure: ", & @@ -15409,11 +15409,11 @@ SUBROUTINE NavierStokes_CalculateBoundaryFlux3D0D(equationsSet,err,error,*) END DO !elementIdx !allocate array for mpi communication - IF(numberOfComputationalNodes>1) THEN !use mpi - ALLOCATE(globalConverged(numberOfComputationalNodes),STAT=ERR) + IF(numberOfComputationNodes>1) THEN !use mpi + ALLOCATE(globalConverged(numberOfComputationNodes),STAT=ERR) IF(ERR/=0) CALL FlagError("Could not allocate global convergence check array.",ERR,ERROR,*999) CALL MPI_ALLGATHER(convergedFlag,1,MPI_LOGICAL,globalConverged,1,MPI_LOGICAL, & - & computationalEnvironment%mpiCommunicator,MPI_IERROR) + & computationEnvironment%mpiCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ALLGATHER",MPI_IERROR,ERR,ERROR,*999) IF(ALL(globalConverged)) THEN convergedFlag = .TRUE. diff --git a/src/analytic_analysis_routines.f90 b/src/analytic_analysis_routines.f90 index e480155b..873d0950 100755 --- a/src/analytic_analysis_routines.f90 +++ b/src/analytic_analysis_routines.f90 @@ -46,7 +46,7 @@ MODULE ANALYTIC_ANALYSIS_ROUTINES USE BASIS_ROUTINES USE CmissMPI - USE ComputationEnvironment + USE ComputationRoutines USE CONSTANTS USE FIELD_ROUTINES USE FieldAccessRoutines @@ -147,9 +147,9 @@ SUBROUTINE AnalyticAnalysis_Output(FIELD,FILENAME,ERR,ERROR,*) IF(FIELD%DEPENDENT_TYPE==FIELD_DEPENDENT_TYPE) THEN IF(LEN_TRIM(FILENAME)>=1) THEN !!TODO \todo have more general ascii file mechanism - IF(computationalEnvironment%numberOfComputationalNodes>1) THEN - WRITE(FILE_NAME,'(A,".opanal.",I0)') FILENAME(1:LEN_TRIM(FILENAME)),computationalEnvironment% & - & myComputationalNodeNumber + IF(computationEnvironment%numberOfComputationNodes>1) THEN + WRITE(FILE_NAME,'(A,".opanal.",I0)') FILENAME(1:LEN_TRIM(FILENAME)),computationEnvironment% & + & myComputationNodeNumber ELSE FILE_NAME=FILENAME(1:LEN_TRIM(FILENAME))//".opanal" ENDIF @@ -270,7 +270,7 @@ SUBROUTINE AnalyticAnalysis_Output(FIELD,FILENAME,ERR,ERROR,*) !Output RMS errors CALL WRITE_STRING(OUTPUT_ID,"",ERR,ERROR,*999) IF(NUMBER(1)>0) THEN - IF(computationalEnvironment%numberOfComputationalNodes>1) THEN + IF(computationEnvironment%numberOfComputationNodes>1) THEN !Local elements only CALL WRITE_STRING(OUTPUT_ID,"Local RMS errors:",ERR,ERROR,*999) LOCAL_STRING= & @@ -294,16 +294,16 @@ SUBROUTINE AnalyticAnalysis_Output(FIELD,FILENAME,ERR,ERROR,*) !Global RMS values !Collect the values across the ranks CALL MPI_ALLREDUCE(MPI_IN_PLACE,NUMBER,1,MPI_INTEGER,MPI_SUM, & - & computationalEnvironment%mpiCommunicator,MPI_IERROR) + & computationEnvironment%mpiCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ALLREDUCE",MPI_IERROR,ERR,ERROR,*999) CALL MPI_ALLREDUCE(MPI_IN_PLACE,RMS_ERROR_PER,1,MPI_DOUBLE_PRECISION,MPI_SUM, & - & computationalEnvironment%mpiCommunicator,MPI_IERROR) + & computationEnvironment%mpiCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ALLREDUCE",MPI_IERROR,ERR,ERROR,*999) CALL MPI_ALLREDUCE(MPI_IN_PLACE,RMS_ERROR_ABS,1,MPI_DOUBLE_PRECISION,MPI_SUM, & - & computationalEnvironment%mpiCommunicator,MPI_IERROR) + & computationEnvironment%mpiCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ALLREDUCE",MPI_IERROR,ERR,ERROR,*999) CALL MPI_ALLREDUCE(MPI_IN_PLACE,RMS_ERROR_REL,1,MPI_DOUBLE_PRECISION,MPI_SUM, & - & computationalEnvironment%mpiCommunicator,MPI_IERROR) + & computationEnvironment%mpiCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ALLREDUCE",MPI_IERROR,ERR,ERROR,*999) CALL WRITE_STRING(OUTPUT_ID,"Global RMS errors:",ERR,ERROR,*999) LOCAL_STRING= & @@ -400,7 +400,7 @@ SUBROUTINE AnalyticAnalysis_Output(FIELD,FILENAME,ERR,ERROR,*) ENDDO !node_idx !Output RMS errors CALL WRITE_STRING(OUTPUT_ID,"",ERR,ERROR,*999) - IF(computationalEnvironment%numberOfComputationalNodes>1) THEN + IF(computationEnvironment%numberOfComputationNodes>1) THEN IF(ANY(NUMBER>0)) THEN !Local nodes only CALL WRITE_STRING(OUTPUT_ID,"Local RMS errors:",ERR,ERROR,*999) @@ -438,16 +438,16 @@ SUBROUTINE AnalyticAnalysis_Output(FIELD,FILENAME,ERR,ERROR,*) !Global RMS values !Collect the values across the ranks CALL MPI_ALLREDUCE(MPI_IN_PLACE,NUMBER,8,MPI_INTEGER,MPI_SUM, & - & computationalEnvironment%mpiCommunicator,MPI_IERROR) + & computationEnvironment%mpiCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ALLREDUCE",MPI_IERROR,ERR,ERROR,*999) CALL MPI_ALLREDUCE(MPI_IN_PLACE,RMS_ERROR_PER,8,MPI_DOUBLE_PRECISION,MPI_SUM, & - & computationalEnvironment%mpiCommunicator,MPI_IERROR) + & computationEnvironment%mpiCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ALLREDUCE",MPI_IERROR,ERR,ERROR,*999) CALL MPI_ALLREDUCE(MPI_IN_PLACE,RMS_ERROR_ABS,8,MPI_DOUBLE_PRECISION,MPI_SUM, & - & computationalEnvironment%mpiCommunicator,MPI_IERROR) + & computationEnvironment%mpiCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ALLREDUCE",MPI_IERROR,ERR,ERROR,*999) CALL MPI_ALLREDUCE(MPI_IN_PLACE,RMS_ERROR_REL,8,MPI_DOUBLE_PRECISION,MPI_SUM, & - & computationalEnvironment%mpiCommunicator,MPI_IERROR) + & computationEnvironment%mpiCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ALLREDUCE",MPI_IERROR,ERR,ERROR,*999) CALL WRITE_STRING(OUTPUT_ID,"Global RMS errors:",ERR,ERROR,*999) LOCAL_STRING= & @@ -517,7 +517,7 @@ SUBROUTINE AnalyticAnalysis_Output(FIELD,FILENAME,ERR,ERROR,*) ALLOCATE(GHOST_INTEGRAL_ERRORS(6,FIELD_VARIABLE%NUMBER_OF_COMPONENTS),STAT=ERR) IF(ERR/=0) CALL FlagError("Could not allocate ghost integral errors.",ERR,ERROR,*999) CALL ANALYTIC_ANALYSIS_INTEGRAL_ERRORS(FIELD_VARIABLE,INTEGRAL_ERRORS,GHOST_INTEGRAL_ERRORS,ERR,ERROR,*999) - IF(computationalEnvironment%numberOfComputationalNodes>1) THEN + IF(computationEnvironment%numberOfComputationNodes>1) THEN CALL WRITE_STRING(OUTPUT_ID,"Local Integral errors:",ERR,ERROR,*999) LOCAL_STRING="Component# Numerical Analytic % error Absolute err Relative err" CALL WRITE_STRING(OUTPUT_ID,LOCAL_STRING,ERR,ERROR,*999) @@ -590,7 +590,7 @@ SUBROUTINE AnalyticAnalysis_Output(FIELD,FILENAME,ERR,ERROR,*) ENDDO !component_idx !Collect the values across the ranks CALL MPI_ALLREDUCE(MPI_IN_PLACE,INTEGRAL_ERRORS,6*FIELD_VARIABLE%NUMBER_OF_COMPONENTS,MPI_DOUBLE_PRECISION, & - & MPI_SUM,computationalEnvironment%mpiCommunicator,MPI_IERROR) + & MPI_SUM,computationEnvironment%mpiCommunicator,MPI_IERROR) CALL WRITE_STRING(OUTPUT_ID,"Global Integral errors:",ERR,ERROR,*999) LOCAL_STRING="Component# Numerical Analytic % error Absolute err Relative err" CALL WRITE_STRING(OUTPUT_ID,LOCAL_STRING,ERR,ERROR,*999) @@ -1709,7 +1709,7 @@ SUBROUTINE AnalyticAnalysis_RMSErrorGetNode(FIELD,VARIABLE_TYPE,COMPONENT_NUMBER ENDDO !deriv_idx ENDDO !node_idx - IF(computationalEnvironment%numberOfComputationalNodes>1) THEN + IF(computationEnvironment%numberOfComputationNodes>1) THEN IF(ANY(NUMBER>0)) THEN DO deriv_idx=1,8 IF(NUMBER(deriv_idx)>0) THEN @@ -1724,9 +1724,9 @@ SUBROUTINE AnalyticAnalysis_RMSErrorGetNode(FIELD,VARIABLE_TYPE,COMPONENT_NUMBER ENDDO !deriv_idx !Global RMS values !Collect the values across the ranks - CALL MPI_ALLREDUCE(MPI_IN_PLACE,NUMBER,8,MPI_INTEGER,MPI_SUM,computationalEnvironment%mpiCommunicator,MPI_IERROR) + CALL MPI_ALLREDUCE(MPI_IN_PLACE,NUMBER,8,MPI_INTEGER,MPI_SUM,computationEnvironment%mpiCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ALLREDUCE",MPI_IERROR,ERR,ERROR,*999) - CALL MPI_ALLREDUCE(MPI_IN_PLACE,RMS_ERROR,8,MPI_DOUBLE_PRECISION,MPI_SUM,computationalEnvironment%mpiCommunicator, & + CALL MPI_ALLREDUCE(MPI_IN_PLACE,RMS_ERROR,8,MPI_DOUBLE_PRECISION,MPI_SUM,computationEnvironment%mpiCommunicator, & & MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ALLREDUCE",MPI_IERROR,ERR,ERROR,*999) DO deriv_idx=1,8 @@ -1838,7 +1838,7 @@ SUBROUTINE AnalyticAnalysis_RMSErrorGetElement(FIELD,VARIABLE_TYPE,COMPONENT_NUM GHOST_RMS_ERROR=GHOST_RMS_ERROR+ERROR_VALUE*ERROR_VALUE ENDDO !element_idx IF(NUMBER>0) THEN - IF(computationalEnvironment%numberOfComputationalNodes>1) THEN + IF(computationEnvironment%numberOfComputationNodes>1) THEN !Local elements only LOCAL_RMS=SQRT(RMS_ERROR/NUMBER) !Local and ghost elements @@ -1846,10 +1846,10 @@ SUBROUTINE AnalyticAnalysis_RMSErrorGetElement(FIELD,VARIABLE_TYPE,COMPONENT_NUM !Global RMS values !Collect the values across the ranks CALL MPI_ALLREDUCE(MPI_IN_PLACE,NUMBER,1,MPI_INTEGER,MPI_SUM, & - & computationalEnvironment%mpiCommunicator,MPI_IERROR) + & computationEnvironment%mpiCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ALLREDUCE",MPI_IERROR,ERR,ERROR,*999) CALL MPI_ALLREDUCE(MPI_IN_PLACE,RMS_ERROR,1,MPI_DOUBLE_PRECISION,MPI_SUM, & - & computationalEnvironment%mpiCommunicator,MPI_IERROR) + & computationEnvironment%mpiCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ALLREDUCE",MPI_IERROR,ERR,ERROR,*999) GLOBAL_RMS=SQRT(RMS_ERROR/NUMBER) ENDIF diff --git a/src/base_routines.f90 b/src/base_routines.f90 index e6d26ade..1613c481 100755 --- a/src/base_routines.f90 +++ b/src/base_routines.f90 @@ -146,8 +146,8 @@ MODULE BaseRoutines !Module variables - INTEGER(INTG), SAVE :: myComputationalNodeNumber !Set the computational node numbers. Note: this is done as a subroutine as ComputationalEnvironment depends on BaseRoutines. - SUBROUTINE ComputationalNodeNumbersSet(myNodeNumber,numberOfNodes,err,error,*) + !>Set the computation node numbers. Note: this is done as a subroutine as ComputationEnvironment depends on BaseRoutines. + SUBROUTINE ComputationNodeNumbersSet(myNodeNumber,numberOfNodes,err,error,*) !Argument variables INTEGER(INTG), INTENT(IN) :: myNodeNumber !0) THEN IF(myNodeNumber>=0.AND.myNodeNumber<=numberOfNodes-1) THEN - myComputationalNodeNumber=myNodeNumber - numberOfComputationalNodes=numberOfNodes + myComputationNodeNumber=myNodeNumber + numberOfComputationNodes=numberOfNodes ELSE CALL FlagError("Invalid node number.",err,error,*999) ENDIF @@ -562,12 +562,12 @@ SUBROUTINE ComputationalNodeNumbersSet(myNodeNumber,numberOfNodes,err,error,*) CALL FlagError("Invalid number of nodes.",err,error,*999) ENDIF - EXITS("ComputationalNodeNumbersSet") + EXITS("ComputationNodeNumbersSet") RETURN -999 ERRORSEXITS("ComputationalNodeNumbersSet",err,error) +999 ERRORSEXITS("ComputationNodeNumbersSet",err,error) RETURN 1 - END SUBROUTINE ComputationalNodeNumbersSet + END SUBROUTINE ComputationNodeNumbersSet ! !================================================================================================================================ @@ -708,8 +708,8 @@ SUBROUTINE FlagWarningC(string,err,error,*) TYPE(VARYING_STRING), INTENT(OUT) :: error !1) THEN - WRITE(outputString,'(">>WARNING (",I0,"): ",A)') myComputationalNodeNumber,string + IF(numberOfComputationNodes>1) THEN + WRITE(outputString,'(">>WARNING (",I0,"): ",A)') myComputationNodeNumber,string ELSE WRITE(outputString,'(">>WARNING: ",A)') string ENDIF @@ -734,8 +734,8 @@ SUBROUTINE FlagWarningVS(string,err,error,*) TYPE(VARYING_STRING), INTENT(OUT) :: error !1) THEN - WRITE(outputString,'(">>WARNING (",I0,"): ",A)') myComputationalNodeNumber,CHAR(string) + IF(numberOfComputationNodes>1) THEN + WRITE(outputString,'(">>WARNING (",I0,"): ",A)') myComputationNodeNumber,CHAR(string) ELSE WRITE(outputString,'(">>WARNING: ",A)') CHAR(string) ENDIF @@ -783,8 +783,8 @@ SUBROUTINE BaseRoutinesInitialise(err,error,*) err=0 error="" - myComputationalNodeNumber=0 - numberOfComputationalNodes=1 + myComputationNodeNumber=0 + numberOfComputationNodes=1 diagnostics=.FALSE. diagnostics1=.FALSE. diagnostics2=.FALSE. @@ -928,8 +928,8 @@ SUBROUTINE DiagnosticsSetOn(diagType,levelList,diagFilename,routineList,err,erro IF(LEN_TRIM(diagFilename)>=1) THEN IF(diagFileOpen) CLOSE(UNIT=DIAGNOSTICS_FILE_UNIT) - IF(numberOfComputationalNodes>1) THEN - WRITE(filename,'(A,".diag.",I0)') diagFilename(1:LEN_TRIM(diagFilename)),myComputationalNodeNumber + IF(numberOfComputationNodes>1) THEN + WRITE(filename,'(A,".diag.",I0)') diagFilename(1:LEN_TRIM(diagFilename)),myComputationNodeNumber ELSE filename=diagFilename(1:LEN_TRIM(diagFilename))//".diag" ENDIF @@ -1063,8 +1063,8 @@ SUBROUTINE OutputSetOn(echoFilename,err,error,*) IF(echoOutput) THEN CALL FlagError("Write output is already on.",err,error,*999) ELSE - IF(numberOfComputationalNodes>1) THEN - WRITE(filename,'(A,".out.",I0)') echoFilename(1:LEN_TRIM(echoFilename)),myComputationalNodeNumber + IF(numberOfComputationNodes>1) THEN + WRITE(filename,'(A,".out.",I0)') echoFilename(1:LEN_TRIM(echoFilename)),myComputationNodeNumber ELSE filename=echoFilename(1:LEN_TRIM(echoFilename))//".out" ENDIF @@ -1233,8 +1233,8 @@ SUBROUTINE TimingSetOn(timingType,timingSummaryFlag,timingFilename,routineList,e NULLIFY(routine) IF(LEN_TRIM(timingFilename)>=1) THEN IF(timingFileOpen) CLOSE(UNIT=TIMING_FILE_UNIT) - IF(numberOfComputationalNodes>1) THEN - WRITE(filename,'(A,".timing.",I0)') timingFilename(1:LEN_TRIM(timingFilename)),myComputationalNodeNumber + IF(numberOfComputationNodes>1) THEN + WRITE(filename,'(A,".timing.",I0)') timingFilename(1:LEN_TRIM(timingFilename)),myComputationNodeNumber ELSE filename=timingFilename(1:LEN_TRIM(timingFilename))//".timing" ENDIF @@ -1389,8 +1389,8 @@ SUBROUTINE WriteError(err,error,*) TYPE(VARYING_STRING) :: localError,localError2 indent=2 - IF(numberOfComputationalNodes>1) THEN - WRITE(startString,'(A,A,I0,A,X,I0,A)') indentString(1:indent),"ERROR (",myComputationalNodeNumber,"):", & + IF(numberOfComputationNodes>1) THEN + WRITE(startString,'(A,A,I0,A,X,I0,A)') indentString(1:indent),"ERROR (",myComputationNodeNumber,"):", & & ERR,":" startStringLength=LEN_TRIM(startString) ELSE diff --git a/src/boundary_condition_routines.f90 b/src/boundary_condition_routines.f90 index a606886c..51c5f06e 100755 --- a/src/boundary_condition_routines.f90 +++ b/src/boundary_condition_routines.f90 @@ -47,7 +47,7 @@ MODULE BOUNDARY_CONDITIONS_ROUTINES USE BaseRoutines USE BASIS_ROUTINES USE CmissMPI - USE ComputationEnvironment + USE ComputationRoutines USE CONSTANTS USE COORDINATE_ROUTINES USE DISTRIBUTED_MATRIX_VECTOR @@ -222,8 +222,8 @@ SUBROUTINE BOUNDARY_CONDITIONS_CREATE_FINISH(BOUNDARY_CONDITIONS,ERR,ERROR,*) CALL FlagError("Boundary conditions have already been finished.",ERR,ERROR,*999) ELSE IF(ALLOCATED(BOUNDARY_CONDITIONS%BOUNDARY_CONDITIONS_VARIABLES)) THEN - IF(computationalEnvironment%numberOfComputationalNodes>0) THEN - !Transfer all the boundary conditions to all the computational nodes. + IF(computationEnvironment%numberOfComputationNodes>0) THEN + !Transfer all the boundary conditions to all the computation nodes. !\todo Look at this. DO variable_idx=1,BOUNDARY_CONDITIONS%NUMBER_OF_BOUNDARY_CONDITIONS_VARIABLES BOUNDARY_CONDITION_VARIABLE=>BOUNDARY_CONDITIONS%BOUNDARY_CONDITIONS_VARIABLES(variable_idx)%PTR @@ -236,10 +236,10 @@ SUBROUTINE BOUNDARY_CONDITIONS_CREATE_FINISH(BOUNDARY_CONDITIONS,ERR,ERROR,*) !\todo This operation is a little expensive as we are doing an unnecessary sum across all the ranks in order to combin !\todo the data from each rank into all ranks. We will see how this goes for now. CALL MPI_ALLREDUCE(MPI_IN_PLACE,BOUNDARY_CONDITION_VARIABLE%DOF_TYPES, & - & SEND_COUNT,MPI_INTEGER,MPI_SUM,computationalEnvironment%mpiCommunicator,MPI_IERROR) + & SEND_COUNT,MPI_INTEGER,MPI_SUM,computationEnvironment%mpiCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ALLREDUCE",MPI_IERROR,ERR,ERROR,*999) CALL MPI_ALLREDUCE(MPI_IN_PLACE,BOUNDARY_CONDITION_VARIABLE%CONDITION_TYPES, & - & SEND_COUNT,MPI_INTEGER,MPI_SUM,computationalEnvironment%mpiCommunicator,MPI_IERROR) + & SEND_COUNT,MPI_INTEGER,MPI_SUM,computationEnvironment%mpiCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ALLREDUCE",MPI_IERROR,ERR,ERROR,*999) ELSE LOCAL_ERROR="Field variable domain mapping is not associated for variable type "// & @@ -249,18 +249,18 @@ SUBROUTINE BOUNDARY_CONDITIONS_CREATE_FINISH(BOUNDARY_CONDITIONS,ERR,ERROR,*) ! Update the total number of boundary condition types by summing across all nodes CALL MPI_ALLREDUCE(MPI_IN_PLACE,BOUNDARY_CONDITION_VARIABLE%DOF_COUNTS, & - & MAX_BOUNDARY_CONDITION_NUMBER,MPI_INTEGER,MPI_SUM,computationalEnvironment%mpiCommunicator,MPI_IERROR) + & MAX_BOUNDARY_CONDITION_NUMBER,MPI_INTEGER,MPI_SUM,computationEnvironment%mpiCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ALLREDUCE",MPI_IERROR,ERR,ERROR,*999) CALL MPI_ALLREDUCE(MPI_IN_PLACE,BOUNDARY_CONDITION_VARIABLE%NUMBER_OF_DIRICHLET_CONDITIONS, & - & 1,MPI_INTEGER,MPI_SUM,computationalEnvironment%mpiCommunicator,MPI_IERROR) + & 1,MPI_INTEGER,MPI_SUM,computationEnvironment%mpiCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ALLREDUCE",MPI_IERROR,ERR,ERROR,*999) ! Check that the boundary conditions set are appropriate for equations sets CALL BoundaryConditions_CheckEquations(BOUNDARY_CONDITION_VARIABLE,ERR,ERROR,*999) - !Make sure the required parameter sets are created on all computational nodes and begin updating them + !Make sure the required parameter sets are created on all computation nodes and begin updating them CALL MPI_ALLREDUCE(MPI_IN_PLACE,BOUNDARY_CONDITION_VARIABLE%parameterSetRequired, & - & FIELD_NUMBER_OF_SET_TYPES,MPI_LOGICAL,MPI_LOR,computationalEnvironment%mpiCommunicator,MPI_IERROR) + & FIELD_NUMBER_OF_SET_TYPES,MPI_LOGICAL,MPI_LOR,computationEnvironment%mpiCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ALLREDUCE",MPI_IERROR,ERR,ERROR,*999) DO parameterSetIdx=1,FIELD_NUMBER_OF_SET_TYPES IF(BOUNDARY_CONDITION_VARIABLE%parameterSetRequired(parameterSetIdx)) THEN @@ -2125,7 +2125,7 @@ SUBROUTINE BoundaryConditions_NeumannMatricesInitialise(boundaryConditionsVariab TYPE(DOMAIN_LINE_TYPE), POINTER :: line TYPE(DOMAIN_FACE_TYPE), POINTER :: face TYPE(LIST_TYPE), POINTER :: columnIndicesList, rowColumnIndicesList - INTEGER(INTG) :: myComputationalNodeNumber + INTEGER(INTG) :: myComputationNodeNumber INTEGER(INTG) :: numberOfPointDofs, numberNonZeros, numberRowEntries, neumannConditionNumber, localNeumannConditionIdx INTEGER(INTG) :: neumannIdx, globalDof, localDof, localDofNyy, domainIdx, numberOfDomains, domainNumber, componentNumber INTEGER(INTG) :: nodeIdx, derivIdx, nodeNumber, versionNumber, derivativeNumber, columnNodeNumber, lineIdx, faceIdx, columnDof @@ -2420,11 +2420,11 @@ SUBROUTINE BoundaryConditions_NeumannMatricesInitialise(boundaryConditionsVariab !Set up vector of Neumann point values CALL DISTRIBUTED_VECTOR_CREATE_START(pointDofMapping,boundaryConditionsNeumann%pointValues,err,error,*999) CALL DISTRIBUTED_VECTOR_CREATE_FINISH(boundaryConditionsNeumann%pointValues,err,error,*999) - myComputationalNodeNumber=ComputationalEnvironment_NodeNumberGet(err,error) + myComputationNodeNumber=ComputationEnvironment_NodeNumberGet(err,error) !Set point values vector from boundary conditions field parameter set DO neumannIdx=1,numberOfPointDofs globalDof=boundaryConditionsNeumann%setDofs(neumannIdx) - IF(rhsVariable%DOMAIN_MAPPING%GLOBAL_TO_LOCAL_MAP(globalDof)%DOMAIN_NUMBER(1)==myComputationalNodeNumber) THEN + IF(rhsVariable%DOMAIN_MAPPING%GLOBAL_TO_LOCAL_MAP(globalDof)%DOMAIN_NUMBER(1)==myComputationNodeNumber) THEN localDof=rhsVariable%DOMAIN_MAPPING%GLOBAL_TO_LOCAL_MAP(globalDof)%LOCAL_NUMBER(1) ! Set point DOF vector value localNeumannConditionIdx=boundaryConditionsNeumann%pointDofMapping%GLOBAL_TO_LOCAL_MAP(neumannIdx)%LOCAL_NUMBER(1) @@ -2546,7 +2546,7 @@ SUBROUTINE BoundaryConditions_NeumannIntegrate(rhsBoundaryConditions,err,error,* TYPE(VARYING_STRING), INTENT(OUT) :: error ! Auckland, the University of Oxford and King's College, London. !> All Rights Reserved. !> -!> Contributor(s): +!> Contributor(s): Chris Bradley !> !> Alternatively, the contents of this file may be used under the terms of !> either the GNU General Public License Version 2 or later (the "GPL"), or @@ -54,7 +54,7 @@ MODULE Cmiss USE BaseRoutines USE BASIS_ROUTINES - USE ComputationEnvironment + USE ComputationRoutines USE Constants USE COORDINATE_ROUTINES USE GENERATED_MESH_ROUTINES @@ -217,8 +217,8 @@ SUBROUTINE cmfe_Finalise_(err,error,*) CALL BASES_FINALISE(err,error,*999) !Reset the signal handler CALL cmfe_ResetFatalHandler() - !Finalise computational enviroment - CALL ComputationalEnvironment_Finalise(err,error,*999) + !Finalise computation enviroment + CALL Computation_EnvironmentFinalise(err,error,*999) !Finalise the base routines CALL BaseRoutinesFinalise(err,error,*999) @@ -233,7 +233,7 @@ END SUBROUTINE cmfe_Finalise_ !!TODO Underscore to avoid name clash. Can be removed upon prefix rename. - !>Initialises CMISS. \see OPENOpenCMISS::Iron::CMISSInitialise + !>Initialises CMISS. \see OpenCMISS::Iron::cmfe_Initialise SUBROUTINE cmfe_Initialise_(worldRegion,err,error,*) !Argument variables @@ -247,8 +247,8 @@ SUBROUTINE cmfe_Initialise_(worldRegion,err,error,*) cmfe_ErrorHandlingMode = CMFE_OUTPUT_ERROR !Default for now, maybe make CMFE_RETURN_ERROR_CODE the default !Initialise the base routines CALL BaseRoutinesInitialise(err,error,*999) - !Intialise the computational environment - CALL ComputationalEnvironment_Initialise(err,error,*999) + !Intialise the computation environment + CALL Computation_EnvironmentInitialise(err,error,*999) !Setup signal handling CALL cmfe_InitFatalHandler() CALL cmfe_SetFatalHandler() @@ -265,7 +265,7 @@ SUBROUTINE cmfe_Initialise_(worldRegion,err,error,*) CALL PROBLEMS_INITIALISE(err,error,*999) !Write out the CMISS version - IF(computationalEnvironment%myComputationalNodeNumber==0) THEN + IF(computationEnvironment%myComputationNodeNumber==0) THEN versionString="OpenCMISS(Iron) version "//TRIM(NumberToVString(CMFE_MAJOR_VERSION,"*",err,error)) versionString=versionString//"." versionString=versionString//TRIM(NumberToVString(CMFE_MINOR_VERSION,"*",err,error)) diff --git a/src/computation_routines.f90 b/src/computation_routines.f90 new file mode 100755 index 00000000..9ccfa987 --- /dev/null +++ b/src/computation_routines.f90 @@ -0,0 +1,818 @@ +!> \file +!> \author Chris Bradley +!> \brief This module contains all computation routines. +!> +!> \section LICENSE +!> +!> Version: MPL 1.1/GPL 2.0/LGPL 2.1 +!> +!> The contents of this file are subject to the Mozilla Public License +!> Version 1.1 (the "License"); you may not use this file except in +!> compliance with the License. You may obtain a copy of the License at +!> http://www.mozilla.org/MPL/ +!> +!> Software distributed under the License is distributed on an "AS IS" +!> basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +!> License for the specific language governing rights and limitations +!> under the License. +!> +!> The Original Code is OpenCMISS +!> +!> The Initial Developer of the Original Code is University of Auckland, +!> Auckland, New Zealand, the University of Oxford, Oxford, United +!> Kingdom and King's College, London, United Kingdom. Portions created +!> by the University of Auckland, the University of Oxford and King's +!> College, London are Copyright (C) 2007-2010 by the University of +!> Auckland, the University of Oxford and King's College, London. +!> All Rights Reserved. +!> +!> Contributor(s): +!> +!> Alternatively, the contents of this file may be used under the terms of +!> either the GNU General Public License Version 2 or later (the "GPL"), or +!> the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), +!> in which case the provisions of the GPL or the LGPL are applicable instead +!> of those above. If you wish to allow use of your version of this file only +!> under the terms of either the GPL or the LGPL, and not to allow others to +!> use your version of this file under the terms of the MPL, indicate your +!> decision by deleting the provisions above and replace them with the notice +!> and other provisions required by the GPL or the LGPL. If you do not delete +!> the provisions above, a recipient may use your version of this file under +!> the terms of any one of the MPL, the GPL or the LGPL. +!> + +!> This module contains all computation routines. + +MODULE ComputationRoutines + + USE BaseRoutines + USE CmissMPI + USE CmissPetsc + USE Constants + USE Kinds +#ifndef NOMPIMOD + USE MPI +#endif + USE INPUT_OUTPUT + USE ISO_VARYING_STRING + USE Strings + +#include "macros.h" + + IMPLICIT NONE + +#ifdef NOMPIMOD +#include "mpif.h" +#endif + + PRIVATE + + !Module parameters + + !Module types + + !>pointer type to ComputationWorkGroupType + TYPE :: ComputationWorkGroupPtrType + TYPE(ComputationWorkGroupType), POINTER :: ptr + END TYPE ComputationWorkGroupPtrType + + !>Contains information on logical working groups + TYPE :: ComputationWorkGroupType + INTEGER(INTG) :: numberOfComputationNodes !Contains information on a cache heirarchy + TYPE ComputationCacheType + INTEGER(INTG) :: numberOfLevels !Contains information on a computation node containing a number of processors + TYPE ComputationNodeType + INTEGER(INTG) :: numberOfProcessors !Contains information on the MPI type to transfer information about a computation node + TYPE MPIComputationNodeType + INTEGER(INTG) :: mpiType !Contains information on the computation environment the program is running in. + TYPE ComputationEnvironmentType + LOGICAL :: cmissMPIInitialised !Add the work sub-group to the parent group based on the computation requirements (called by user) + SUBROUTINE Computation_WorkGroupSubGroupAdd(parentWorkGroup,numberOfComputationNodes,subWorkGroup,err,error,*) + + !Argument Variables + TYPE(ComputationWorkGroupType),POINTER, INTENT(INOUT) :: parentWorkGroup + TYPE(ComputationWorkGroupType),POINTER, INTENT(INOUT) :: subWorkGroup + INTEGER(INTG),INTENT(IN) :: numberOfComputationNodes + INTEGER(INTG), INTENT(OUT) :: err !parentWorkGroup%subWorkGroups(I)%ptr + ENDDO + !subWorkGroups(1:parentWorkGroup%numberOfSubWorkGroups)=>parentWorkGroup%subWorkGroups(:) + + IF(ALLOCATED(parentWorkGroup%subWorkGroups)) THEN + DEALLOCATE(parentWorkGroup%subWorkGroups) + ENDIF + subWorkGroups(1+parentWorkGroup%numberOfSubWorkGroups)%ptr=>newWorkGroup%ptr + ALLOCATE(parentWorkGroup%subWorkGroups(SIZE(subWorkGroups,1))) + DO I=1,SIZE(subWorkGroups,1) + parentWorkGroup%subWorkGroups(I)%ptr => subWorkGroups(I)%ptr + ENDDO + !parentWorkGroup%subWorkGroups(:) => subWorkGroups(:) + + DEALLOCATE(subWorkGroups) + parentWorkGroup%numberOfSubWorkGroups = 1+parentWorkGroup%numberOfSubWorkGroups + newWorkGroup%ptr%PARENT => parentWorkGroup + tmpParentWorkGroup => parentWorkGroup + DO WHILE(ASSOCIATED(tmpParentWorkGroup)) !Update the computation number of its ancestors + tmpParentWorkGroup%numberOfComputationNodes = tmpParentWorkGroup%numberOfComputationNodes & + & + newWorkGroup%ptr%numberOfComputationNodes + tmpParentWorkGroup => tmpParentWorkGroup%PARENT + ENDDO + ELSE !Top level group + CALL FlagError('parentWorkGroup is not associated, call COMPUTATION_WORK_GROUP_CREATE_START first',& + & err,error,*999) + ENDIF + subWorkGroup => newWorkGroup%ptr + + EXITS("Computation_WorkGroupSubGroupAdd") + RETURN +999 ERRORSEXITS("Computation_WorkGroupSubGroupAdd",err,error) + RETURN 1 + + END SUBROUTINE Computation_WorkGroupSubGroupAdd + + ! + !================================================================================================================================ + ! + + !>Create the highest level work group (Default: GROUP_WORLD) + SUBROUTINE Computation_WorkGroupCreateStart(worldWorkGroup,numberOfComputationNodes,err,error,*) + + !Argument Variables + TYPE(ComputationWorkGroupType),POINTER, INTENT(INOUT) :: worldWorkGroup + INTEGER(INTG),INTENT(IN) :: numberOfComputationNodes + INTEGER(INTG), INTENT(OUT) :: err !newWorkGroup%ptr + ENDIF + + EXITS("Computation_WorkGroupCreateStart") + RETURN +999 ERRORSEXITS("Computation_WorkGroupCreateStart",err,error) + RETURN 1 + + END SUBROUTINE Computation_WorkGroupCreateStart + + ! + !================================================================================================================================ + ! + + !>Generate computation environment for current level work group tree and all it's subgroups recursively + RECURSIVE SUBROUTINE Computation_WorkGroupGenerateCompEnviron(workGroup,availableRankList,err,error,*) + + !Argument Variables + TYPE(ComputationWorkGroupType),POINTER, INTENT(INOUT) :: workGroup + INTEGER(INTG), ALLOCATABLE, INTENT(INOUT) :: availableRankList(:) + INTEGER(INTG), INTENT(OUT) :: err !Generate the hierarchy computation environment based on work group tree + SUBROUTINE Computation_WorkGroupCreateFinish(worldWorkGroup,err,error,*) + + !Argument Variables + TYPE(ComputationWorkGroupType),POINTER,INTENT(INOUT) :: worldWorkGroup + INTEGER(INTG),INTENT(OUT) :: err ! computationEnvironment + worldWorkGroup%computationEnvironmentFinished = .TRUE. + + !generate the communicators for subgroups if any + ALLOCATE(availableRankList(worldWorkGroup%computationEnvironment%numberOfComputationNodes)) + DO rankIdx=0,SIZE(availableRankList,1)-1 + availableRankList(rankIdx+1) = rankIdx + ENDDO !rankIdx + DO subGroupIdx=1,worldWorkGroup%numberOfSubWorkGroups,1 + CALL Computation_WorkGroupGenerateCompEnviron(worldWorkGroup%subWorkGroups(subGroupIdx)%ptr,availableRankList, & + & err,error,*999) + ENDDO !subGroupIdx + + EXITS("Computation_WorkGroupCreateFinish") + RETURN +999 ERRORSEXITS("Computation_WorkGroupCreateFinish",err,error) + RETURN 1 + + END SUBROUTINE Computation_WorkGroupCreateFinish + + ! + !================================================================================================================================ + ! + + !>Finalises the computation node data structures and deallocates all memory. + SUBROUTINE ComputationEnvironment_ComputationNodeFinalise(computationNode,err,error,*) + + !Argument Variables + TYPE(ComputationNodeType),INTENT(INOUT) :: computationNode !Initialises the computation node data structures. + SUBROUTINE ComputationEnvironment_ComputationNodeInitialise(computationNode,rank,err,error,*) + + !Argument Variables + TYPE(ComputationNodeType), INTENT(OUT) :: computationNode !Finalises the data structure containing the MPI type information for the ComputationNodeType. + SUBROUTINE ComputationEnvironment_ComputationNodeTypeFinalise(err,error,*) + + !Argument Variables + INTEGER(INTG), INTENT(OUT) :: err !Initialises the data structure containing the MPI type information for the ComputationNodeType. + SUBROUTINE ComputationEnvironment_ComputationNodeTypeInitialise(computationNode,err,error,*) + + !Argument Variables + TYPE(ComputationNodeType), INTENT(IN) :: computationNode !Finalises the computation environment data structures and deallocates all memory. + SUBROUTINE Computation_EnvironmentFinalise(err,error,*) + + !Argument Variables + INTEGER(INTG), INTENT(OUT) :: err !Initialises the computation environment data structures. + SUBROUTINE Computation_EnvironmentInitialise(err,error,*) + + !Argument Variables + INTEGER(INTG), INTENT(OUT) :: err !Sets the world communicator to the given on. Note: This routine should be called straight after the main OpenCMISS initialise + !>routine. If it is called after objects have started to be setup then good luck! + SUBROUTINE ComputationEnvironment_WorldCommunicatorSet(worldCommunicator,err,error,*) + + !Argument Variables + INTEGER(INTG), INTENT(IN) :: worldCommunicator !Gets the current world communicator. + SUBROUTINE ComputationEnvironment_WorldCommunicatorGet(worldCommunicator,err,error,*) + + !Argument Variables + INTEGER(INTG), INTENT(OUT) :: worldCommunicator !Returns the number/rank of the computation nodes. + FUNCTION ComputationEnvironment_NodeNumberGet(err,error) + + !Argument Variables + INTEGER(INTG), INTENT(OUT) :: err !Returns the number of computation nodes. + FUNCTION ComputationEnvironment_NumberOfNodesGet(err,error) + + !Argument Variables + INTEGER(INTG), INTENT(OUT) :: err ! \file -!> \author Chris Bradley -!> \brief This module contains all computational environment variables. -!> -!> \section LICENSE -!> -!> Version: MPL 1.1/GPL 2.0/LGPL 2.1 -!> -!> The contents of this file are subject to the Mozilla Public License -!> Version 1.1 (the "License"); you may not use this file except in -!> compliance with the License. You may obtain a copy of the License at -!> http://www.mozilla.org/MPL/ -!> -!> Software distributed under the License is distributed on an "AS IS" -!> basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -!> License for the specific language governing rights and limitations -!> under the License. -!> -!> The Original Code is OpenCMISS -!> -!> The Initial Developer of the Original Code is University of Auckland, -!> Auckland, New Zealand, the University of Oxford, Oxford, United -!> Kingdom and King's College, London, United Kingdom. Portions created -!> by the University of Auckland, the University of Oxford and King's -!> College, London are Copyright (C) 2007-2010 by the University of -!> Auckland, the University of Oxford and King's College, London. -!> All Rights Reserved. -!> -!> Contributor(s): -!> -!> Alternatively, the contents of this file may be used under the terms of -!> either the GNU General Public License Version 2 or later (the "GPL"), or -!> the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), -!> in which case the provisions of the GPL or the LGPL are applicable instead -!> of those above. If you wish to allow use of your version of this file only -!> under the terms of either the GPL or the LGPL, and not to allow others to -!> use your version of this file under the terms of the MPL, indicate your -!> decision by deleting the provisions above and replace them with the notice -!> and other provisions required by the GPL or the LGPL. If you do not delete -!> the provisions above, a recipient may use your version of this file under -!> the terms of any one of the MPL, the GPL or the LGPL. -!> - -!> This module contains all computational environment variables. - -MODULE ComputationEnvironment - - USE BaseRoutines - USE CmissMPI - USE CmissPetsc - USE Constants - USE Kinds -#ifndef NOMPIMOD - USE MPI -#endif - USE INPUT_OUTPUT - USE ISO_VARYING_STRING - USE Strings - -#include "macros.h" - - IMPLICIT NONE - -#ifdef NOMPIMOD -#include "mpif.h" -#endif - - PRIVATE - - !Module parameters - - !Module types - - !>pointer type to ComputationalWorkGroupType - TYPE :: ComputationalWorkGroupPtrType - TYPE(ComputationalWorkGroupType), POINTER :: ptr - END TYPE ComputationalWorkGroupPtrType - - !>Contains information on logical working groups (added by Robert on 01/04/2010) - TYPE :: ComputationalWorkGroupType - INTEGER(INTG) :: numberOfComputationalNodes !Contains information on a cache heirarchy - TYPE ComputationalCacheType - INTEGER(INTG) :: NUMBER_LEVELS !Contains information on a computational node containing a number of processors - TYPE ComputationalNodeType - INTEGER(INTG) :: NUMBER_PROCESSORS !Contains information on the MPI type to transfer information about a computational node - TYPE MPIComputationalNodeType - INTEGER(INTG) :: MPI_TYPE !Contains information on the computational environment the program is running in. - TYPE ComputationalEnvironmentType - LOGICAL :: cmissMPIInitialised !Add the work sub-group to the parent group based on the computational requirements (called by user) - SUBROUTINE COMPUTATIONAL_WORK_GROUP_SUBGROUP_ADD(PARENT_WORK_GROUP, numberOfComputationalNodes, & - & ADDED_WORK_GROUP,err,error,*) - - !Argument Variables - TYPE(ComputationalWorkGroupType),POINTER, INTENT(INOUT) :: PARENT_WORK_GROUP - TYPE(ComputationalWorkGroupType),POINTER, INTENT(INOUT) :: ADDED_WORK_GROUP - INTEGER(INTG),INTENT(IN) :: numberOfComputationalNodes - INTEGER(INTG), INTENT(OUT) :: err !PARENT_WORK_GROUP%SUB_WORK_GROUPS(I)%ptr - ENDDO - !SUB_WORK_GROUPS(1:PARENT_WORK_GROUP%numberOfSubWorkGroups)=>PARENT_WORK_GROUP%SUB_WORK_GROUPS(:) - - IF(ALLOCATED(PARENT_WORK_GROUP%SUB_WORK_GROUPS)) THEN - DEALLOCATE(PARENT_WORK_GROUP%SUB_WORK_GROUPS) - ENDIF - SUB_WORK_GROUPS(1+PARENT_WORK_GROUP%numberOfSubWorkGroups)%ptr=>NEW_WORK_GROUP%ptr - ALLOCATE(PARENT_WORK_GROUP%SUB_WORK_GROUPS(SIZE(SUB_WORK_GROUPS,1))) - DO I=1,SIZE(SUB_WORK_GROUPS,1) - PARENT_WORK_GROUP%SUB_WORK_GROUPS(I)%ptr => SUB_WORK_GROUPS(I)%ptr - ENDDO - !PARENT_WORK_GROUP%SUB_WORK_GROUPS(:) => SUB_WORK_GROUPS(:) - - DEALLOCATE(SUB_WORK_GROUPS) - PARENT_WORK_GROUP%numberOfSubWorkGroups = 1+PARENT_WORK_GROUP%numberOfSubWorkGroups - NEW_WORK_GROUP%ptr%PARENT => PARENT_WORK_GROUP - TMP_PARENT_WORK_GROUP => PARENT_WORK_GROUP - DO WHILE(ASSOCIATED(TMP_PARENT_WORK_GROUP)) !Update the computational number of its ancestors - TMP_PARENT_WORK_GROUP%numberOfComputationalNodes = TMP_PARENT_WORK_GROUP%numberOfComputationalNodes & - & + NEW_WORK_GROUP%ptr%numberOfComputationalNodes - TMP_PARENT_WORK_GROUP => TMP_PARENT_WORK_GROUP%PARENT - ENDDO - ELSE !Top level group - CALL FlagError('PARENT_WORK_GROUP is not associated, call COMPUTATIONAL_WORK_GROUP_CREATE_START first',& - & err,error,*999) - ENDIF - ADDED_WORK_GROUP => NEW_WORK_GROUP%ptr - - EXITS("COMPUTATIONAL_WORK_GROUP_SUBGROUP_ADD") - RETURN -999 ERRORSEXITS("COMPUTATIONAL_WORK_GROUP_SUBGROUP_ADD",err,error) - RETURN 1 - END SUBROUTINE COMPUTATIONAL_WORK_GROUP_SUBGROUP_ADD - - ! - !================================================================================================================================ - ! - - !>Create the highest level work group (Default: GROUP_WORLD) - SUBROUTINE COMPUTATIONAL_WORK_GROUP_CREATE_START(WORLD_WORK_GROUP,numberOfComputationalNodes,err,error,*) - - !Argument Variables - TYPE(ComputationalWorkGroupType),POINTER, INTENT(INOUT) :: WORLD_WORK_GROUP - INTEGER(INTG),INTENT(IN) :: numberOfComputationalNodes - INTEGER(INTG), INTENT(OUT) :: err !NEW_WORK_GROUP%ptr - ENDIF - - EXITS("COMPUTATIONAL_WORK_GROUP_CREATE_START") - RETURN -999 ERRORSEXITS("COMPUTATIONAL_WORK_GROUP_CREATE_START",err,error) - RETURN 1 - END SUBROUTINE COMPUTATIONAL_WORK_GROUP_CREATE_START - - ! - !================================================================================================================================ - ! - - !>Generate computational environment for current level work group tree and all it's subgroups recursively - RECURSIVE SUBROUTINE Computational_WorkGroupGenerateCompEnviron(WORK_GROUP,AVAILABLE_RANK_LIST,err,error,*) - - !Argument Variables - TYPE(ComputationalWorkGroupType),POINTER, INTENT(INOUT) :: WORK_GROUP - INTEGER(INTG), ALLOCATABLE, INTENT(INOUT) :: AVAILABLE_RANK_LIST(:) - INTEGER(INTG), INTENT(OUT) :: err !Generate the hierarchy computational environment based on work group tree - SUBROUTINE COMPUTATIONAL_WORK_GROUP_CREATE_FINISH(WORLD_WORK_GROUP,err,error,*) - - !Argument Variables - TYPE(ComputationalWorkGroupType),POINTER,INTENT(INOUT) :: WORLD_WORK_GROUP - INTEGER(INTG),INTENT(OUT) :: err ! computationalEnvironment - WORLD_WORK_GROUP%computationalEnvironmentFinished = .TRUE. - - !generate the communicators for subgroups if any - ALLOCATE(AVAILABLE_RANK_LIST(WORLD_WORK_GROUP%computationalEnvironment%numberOfComputationalNodes)) - DO I=0,SIZE(AVAILABLE_RANK_LIST,1)-1 - AVAILABLE_RANK_LIST(I+1) = I - END DO - DO I=1,WORLD_WORK_GROUP%numberOfSubWorkGroups,1 - CALL Computational_WorkGroupGenerateCompEnviron(WORLD_WORK_GROUP%SUB_WORK_GROUPS(I)%ptr,AVAILABLE_RANK_LIST,err,error,*999) - END DO - - EXITS("COMPUTATIONAL_WORK_GROUP_CREATE_FINISH") - RETURN -999 ERRORSEXITS("COMPUTATIONAL_WORK_GROUP_CREATE_FINISH",err,error) - RETURN 1 - END SUBROUTINE COMPUTATIONAL_WORK_GROUP_CREATE_FINISH - - ! - !================================================================================================================================ - ! - - !>Finalises the computational node data structures and deallocates all memory. - SUBROUTINE COMPUTATIONAL_NODE_FINALISE(COMPUTATIONAL_NODE,err,error,*) - - !Argument Variables - TYPE(ComputationalNodeType),INTENT(INOUT) :: COMPUTATIONAL_NODE !Initialises the computational node data structures. - SUBROUTINE COMPUTATIONAL_NODE_INITIALISE(COMPUTATIONAL_NODE,RANK,err,error,*) - - !Argument Variables - TYPE(ComputationalNodeType), INTENT(OUT) :: COMPUTATIONAL_NODE !Finalises the data structure containing the MPI type information for the ComputationalNodeType. - SUBROUTINE COMPUTATIONAL_NODE_MPI_TYPE_FINALISE(err,error,*) - - !Argument Variables - INTEGER(INTG), INTENT(OUT) :: err !Initialises the data structure containing the MPI type information for the ComputationalNodeType. - SUBROUTINE COMPUTATIONAL_NODE_MPI_TYPE_INITIALISE(COMPUTATIONAL_NODE,err,error,*) - - !Argument Variables - TYPE(ComputationalNodeType), INTENT(IN) :: COMPUTATIONAL_NODE !Finalises the computational environment data structures and deallocates all memory. - SUBROUTINE COMPUTATIONAL_ENVIRONMENT_FINALISE(err,error,*) - - !Argument Variables - INTEGER(INTG), INTENT(OUT) :: err !Initialises the computational environment data structures. - SUBROUTINE COMPUTATIONAL_ENVIRONMENT_INITIALISE(err,error,*) - - !Argument Variables - INTEGER(INTG), INTENT(OUT) :: err !Sets the world communicator to the given on. Note: This routine should be called straight after the main OpenCMISS initialise - !>routine. If it is called after objects have started to be setup then good luck! - SUBROUTINE ComputationalEnvironment_WorldCommunicatorSet(worldCommunicator,err,error,*) - - !Argument Variables - INTEGER(INTG), INTENT(IN) :: worldCommunicator !Gets the current world communicator. - SUBROUTINE ComputationalEnvironment_WorldCommunicatorGet(worldCommunicator,err,error,*) - - !Argument Variables - INTEGER(INTG), INTENT(OUT) :: worldCommunicator !Returns the number/rank of the computational nodes. - FUNCTION COMPUTATIONAL_NODE_NUMBER_GET(err,error) - - !Argument Variables - INTEGER(INTG), INTENT(OUT) :: err !Returns the number of computational nodes. - FUNCTION COMPUTATIONAL_NODES_NUMBER_GET(err,error) - - !Argument Variables - INTEGER(INTG), INTENT(OUT) :: err ! Auckland, the University of Oxford and King's College, London. !> All Rights Reserved. !> -!> Contributor(s): Chris Bradley, Kumar Mithraratne, Xiani (Nancy) Yan, Prasad Babarenda Gamage +!> Contributor(s): Tim Wu, Chris Bradley, Kumar Mithraratne, Xiani (Nancy) Yan, Prasad Babarenda Gamage !> !> Alternatively, the contents of this file may be used under the terms of !> either the GNU General Public License Version 2 or later (the "GPL"), or @@ -48,7 +48,7 @@ MODULE DataProjectionRoutines USE BASIS_ROUTINES USE BasisAccessRoutines USE CmissMPI - USE ComputationEnvironment + USE ComputationRoutines USE Constants USE CoordinateSystemAccessRoutines USE DataPointAccessRoutines @@ -1354,7 +1354,7 @@ SUBROUTINE DataProjection_DataPointsProjectionEvaluate(dataProjection,projection TYPE(DOMAIN_MAPPING_TYPE), POINTER :: domainMappingElements TYPE(DOMAIN_MAPPINGS_TYPE), POINTER :: domainMappings TYPE(DOMAIN_TOPOLOGY_TYPE), POINTER :: domainTopology - INTEGER(INTG) :: myComputationalNode,numberOfComputationalNodes !1) THEN + !use MPI if number of computation nodes is greater than 1 + IF(numberOfComputationNodes>1) THEN !Use MPI !Allocate arrays for MPI communication ALLOCATE(globalToLocalNumberOfClosestCandidates(numberOfDataPoints),STAT=err) IF(err/=0) CALL FlagError("Could not allocate global to local number of closest elements.",err,error,*999) - ALLOCATE(globalNumberOfClosestCandidates(numberOfComputationalNodes),STAT=err) + ALLOCATE(globalNumberOfClosestCandidates(numberOfComputationNodes),STAT=err) IF(err/=0) CALL FlagError("Could not allocate global number of closest candidates.",err,error,*999) - ALLOCATE(globalMPIDisplacements(numberOfComputationalNodes),STAT=err) + ALLOCATE(globalMPIDisplacements(numberOfComputationNodes),STAT=err) IF(err/=0) CALL FlagError("Could not allocate global MPI displacements.",err,error,*999) - ALLOCATE(globalNumberOfProjectedPoints(numberOfComputationalNodes),STAT=err) + ALLOCATE(globalNumberOfProjectedPoints(numberOfComputationNodes),STAT=err) IF(err/=0) CALL FlagError("Could not allocate all number of projected points.",err,error,*999) ALLOCATE(projectionExitTag(numberOfDataPoints),STAT=err) IF(err/=0) CALL FlagError("Could not allocate projected.",err,error,*999) @@ -1684,13 +1684,13 @@ SUBROUTINE DataProjection_DataPointsProjectionEvaluate(dataProjection,projection IF(err/=0) CALL FlagError("Could not allocate projected vectors.",err,error,*999) ALLOCATE(sortingIndices2(numberOfDataPoints),STAT=err) IF(err/=0) CALL FlagError("Could not allocate sorting indices 2.",err,error,*999) - !gather and distribute the number of closest elements from all computational nodes + !gather and distribute the number of closest elements from all computation nodes CALL MPI_ALLGATHER(numberOfClosestCandidates,1,MPI_INTEGER,globalNumberOfClosestCandidates,1,MPI_INTEGER, & - & computationalEnvironment%mpiCommunicator,MPIIError) + & computationEnvironment%mpiCommunicator,MPIIError) CALL MPI_ERROR_CHECK("MPI_ALLGATHER",MPIIError,err,error,*999) - !Sum all number of closest candidates from all computational nodes + !Sum all number of closest candidates from all computation nodes totalNumberOfClosestCandidates=SUM(globalNumberOfClosestCandidates,1) - !Allocate arrays to store information gathered from all computational node + !Allocate arrays to store information gathered from all computation node !The information for each data point is stored in the corresponding row so they are contiguous in memory for !easy MPI access ALLOCATE(globalClosestDistances(numberOfDataPoints,totalNumberOfClosestCandidates),STAT=err) @@ -1704,27 +1704,27 @@ SUBROUTINE DataProjection_DataPointsProjectionEvaluate(dataProjection,projection CALL MPI_ERROR_CHECK("MPI_TYPE_COMMIT",MPIIError,err,error,*999) !Create displacement vectors for MPI_ALLGATHERV globalMPIDisplacements(1)=0 - DO computationalNodeIdx=1,(numberOfComputationalNodes-1) - globalMPIDisplacements(computationalNodeIdx+1)=globalMPIDisplacements(computationalNodeIdx)+ & - & globalNumberOfClosestCandidates(computationalNodeIdx) - ENDDO !computationalNodeIdx + DO computationNodeIdx=1,(numberOfComputationNodes-1) + globalMPIDisplacements(computationNodeIdx+1)=globalMPIDisplacements(computationNodeIdx)+ & + & globalNumberOfClosestCandidates(computationNodeIdx) + ENDDO !computationNodeIdx !Share closest element distances between all domains CALL MPI_ALLGATHERV(closestDistances(1,1),numberOfClosestCandidates,MPIClosestDistances, & & globalClosestDistances,globalNumberOfClosestCandidates,globalMPIDisplacements, & - & MPIClosestDistances,computationalEnvironment%mpiCommunicator,MPIIError) + & MPIClosestDistances,computationEnvironment%mpiCommunicator,MPIIError) CALL MPI_ERROR_CHECK("MPI_ALLGATHERV",MPIIError,err,error,*999) reducedNumberOfCLosestCandidates=MIN(dataProjection%numberOfClosestElements,totalNumberOfClosestCandidates) - projectedDistance(2,:)=myComputationalNode + projectedDistance(2,:)=myComputationNode !Find the globally closest distance in the current domain DO dataPointIdx=1,numberOfDataPoints CALL Sorting_BubbleIndexSort(globalClosestDistances(dataPointIdx,:),sortingIndices1,err,error,*999) sortingIndices1(1:totalNumberOfClosestCandidates)=sortingIndices1(1:totalNumberOfClosestCandidates)- & - & globalMPIDisplacements(myComputationalNode+1) !shift the index to current computational node + & globalMPIDisplacements(myComputationNode+1) !shift the index to current computation node globalToLocalNumberOfClosestCandidates(dataPointIdx)=0 DO elementIdx=1,reducedNumberOfCLosestCandidates - !Sorted index indicates it is in the current computational domain + !Sorted index indicates it is in the current computation domain IF((sortingIndices1(elementIdx)>=1).AND. & - & (sortingIndices1(elementIdx)<=globalNumberOfClosestCandidates(myComputationalNode+1))) & + & (sortingIndices1(elementIdx)<=globalNumberOfClosestCandidates(myComputationNode+1))) & & globalToLocalNumberOfClosestCandidates(dataPointIdx)= & & globalToLocalNumberOfClosestCandidates(dataPointIdx)+1 ENDDO !elementIdx @@ -1818,46 +1818,46 @@ SUBROUTINE DataProjection_DataPointsProjectionEvaluate(dataProjection,projection END SELECT !Find the shortest projected distance in all domains CALL MPI_ALLREDUCE(MPI_IN_PLACE,projectedDistance,numberOfDataPoints,MPI_2DOUBLE_PRECISION,MPI_MINLOC, & - & computationalEnvironment%mpiCommunicator,MPIIError) + & computationEnvironment%mpiCommunicator,MPIIError) CALL MPI_ERROR_CHECK("MPI_ALLREDUCE",MPIIError,err,error,*999) - !Sort the computational node/rank from 0 to number of computational node + !Sort the computation node/rank from 0 to number of computation node CALL Sorting_BubbleIndexSort(projectedDistance(2,:),sortingIndices2,err,error,*999) - DO computationalNodeIdx=0,(numberOfComputationalNodes-1) - globalNumberOfProjectedPoints(computationalNodeIdx+1)=COUNT(ABS(projectedDistance(2,:)- & - & REAL(computationalNodeIdx))1 + ENDIF !numberOfComputationNodes>1 !Compute full elemental xi IF(dataProjection%numberOfXi==dataProjection%numberOfElementXi) THEN DO dataPointIdx=1,numberOfDataPoints @@ -2230,7 +2230,7 @@ SUBROUTINE DataProjection_NewtonElementsEvaluate_1(dataProjection,interpolatedPo TYPE(VARYING_STRING), INTENT(OUT) :: error !=1) THEN - IF(numberOfComputationalNodes>1) THEN - WRITE(analFilename,('(A,A,I0)')) filename(1:filenameLength),".opdataproj.",myComputationalNodeNumber + IF(numberOfComputationNodes>1) THEN + WRITE(analFilename,('(A,A,I0)')) filename(1:filenameLength),".opdataproj.",myComputationNodeNumber ELSE analFilename=filename(1:filenameLength)//".opdataproj" ENDIF diff --git a/src/distributed_matrix_vector.f90 b/src/distributed_matrix_vector.f90 index 6577b3f9..27f1c425 100755 --- a/src/distributed_matrix_vector.f90 +++ b/src/distributed_matrix_vector.f90 @@ -47,7 +47,7 @@ MODULE DISTRIBUTED_MATRIX_VECTOR USE BaseRoutines USE CmissMPI USE CmissPetsc - USE ComputationEnvironment + USE ComputationRoutines USE INPUT_OUTPUT USE ISO_VARYING_STRING USE ISO_C_BINDING @@ -1150,7 +1150,7 @@ SUBROUTINE DISTRIBUTED_MATRIX_DATA_GET_INTG(DISTRIBUTED_MATRIX,DATA,ERR,ERROR,*) !Argument variables TYPE(DISTRIBUTED_MATRIX_TYPE), POINTER :: DISTRIBUTED_MATRIX !Gets the dimensions of a matrix on this computational node. + !>Gets the dimensions of a matrix on this computation node. SUBROUTINE DistributedMatrix_DimensionsGet(distributedMatrix,m,n,err,error,*) !Argument variables @@ -2713,7 +2713,7 @@ SUBROUTINE DISTRIBUTED_MATRIX_PETSC_CREATE_FINISH(PETSC_MATRIX,ERR,ERROR,*) !Set up the matrix ALLOCATE(PETSC_MATRIX%DATA_DP(PETSC_MATRIX%DATA_SIZE),STAT=ERR) IF(ERR/=0) CALL FlagError("Could not allocate PETSc matrix data.",ERR,ERROR,*999) - CALL Petsc_MatCreateDense(computationalEnvironment%mpiCommunicator,PETSC_MATRIX%M,PETSC_MATRIX%N, & + CALL Petsc_MatCreateDense(computationEnvironment%mpiCommunicator,PETSC_MATRIX%M,PETSC_MATRIX%N, & & PETSC_MATRIX%GLOBAL_M,PETSC_MATRIX%GLOBAL_N,PETSC_MATRIX%DATA_DP,PETSC_MATRIX%MATRIX,ERR,ERROR,*999) CASE(DISTRIBUTED_MATRIX_DIAGONAL_STORAGE_TYPE) PETSC_MATRIX%NUMBER_NON_ZEROS=PETSC_MATRIX%M @@ -2733,7 +2733,7 @@ SUBROUTINE DISTRIBUTED_MATRIX_PETSC_CREATE_FINISH(PETSC_MATRIX,ERR,ERROR,*) PETSC_MATRIX%DIAGONAL_NUMBER_NON_ZEROS=1 PETSC_MATRIX%OFFDIAGONAL_NUMBER_NON_ZEROS=0 !Create the PETsc AIJ matrix - CALL Petsc_MatCreateAIJ(computationalEnvironment%mpiCommunicator,PETSC_MATRIX%M,PETSC_MATRIX%N, & + CALL Petsc_MatCreateAIJ(computationEnvironment%mpiCommunicator,PETSC_MATRIX%M,PETSC_MATRIX%N, & & PETSC_MATRIX%GLOBAL_M,PETSC_MATRIX%GLOBAL_N,PETSC_NULL_INTEGER,PETSC_MATRIX%DIAGONAL_NUMBER_NON_ZEROS, & & PETSC_NULL_INTEGER,PETSC_MATRIX%OFFDIAGONAL_NUMBER_NON_ZEROS,PETSC_MATRIX%MATRIX,ERR,ERROR,*999) CASE(DISTRIBUTED_MATRIX_COLUMN_MAJOR_STORAGE_TYPE) @@ -2744,7 +2744,7 @@ SUBROUTINE DISTRIBUTED_MATRIX_PETSC_CREATE_FINISH(PETSC_MATRIX,ERR,ERROR,*) IF(ALLOCATED(PETSC_MATRIX%DIAGONAL_NUMBER_NON_ZEROS)) THEN IF(ALLOCATED(PETSC_MATRIX%OFFDIAGONAL_NUMBER_NON_ZEROS)) THEN !Create the PETSc AIJ matrix - CALL Petsc_MatCreateAIJ(computationalEnvironment%mpiCommunicator,PETSC_MATRIX%M,PETSC_MATRIX%N, & + CALL Petsc_MatCreateAIJ(computationEnvironment%mpiCommunicator,PETSC_MATRIX%M,PETSC_MATRIX%N, & & PETSC_MATRIX%GLOBAL_M,PETSC_MATRIX%GLOBAL_N,PETSC_NULL_INTEGER,PETSC_MATRIX%DIAGONAL_NUMBER_NON_ZEROS, & & PETSC_NULL_INTEGER,PETSC_MATRIX%OFFDIAGONAL_NUMBER_NON_ZEROS,PETSC_MATRIX%MATRIX,ERR,ERROR,*999) !Set matrix options @@ -6439,7 +6439,7 @@ SUBROUTINE DISTRIBUTED_VECTOR_CMISS_CREATE_FINISH(CMISS_VECTOR,ERR,ERROR,*) INTEGER(INTG), INTENT(OUT) :: ERR !0) THEN - my_computational_node_number=ComputationalEnvironment_NodeNumberGet(ERR,ERROR) + my_computation_node_number=ComputationEnvironment_NodeNumberGet(ERR,ERROR) IF(ERR/=0) GOTO 999 IF(DISTRIBUTED_VECTOR%GHOSTING_TYPE==DISTRIBUTED_MATRIX_VECTOR_INCLUDE_GHOSTS_TYPE) THEN ALLOCATE(CMISS_VECTOR%TRANSFERS(DOMAIN_MAPPING%NUMBER_OF_ADJACENT_DOMAINS),STAT=ERR) @@ -6496,11 +6496,11 @@ SUBROUTINE DISTRIBUTED_VECTOR_CMISS_CREATE_FINISH(CMISS_VECTOR,ERR,ERROR,*) & DOMAIN_MAPPING%ADJACENT_DOMAINS(domain_idx)%NUMBER_OF_RECEIVE_GHOSTS CMISS_VECTOR%TRANSFERS(domain_idx)%DATA_TYPE=DISTRIBUTED_VECTOR%DATA_TYPE CMISS_VECTOR%TRANSFERS(domain_idx)%SEND_TAG_NUMBER=CMISS_VECTOR%BASE_TAG_NUMBER + & - & DOMAIN_MAPPING%ADJACENT_DOMAINS_PTR(my_computational_node_number)+domain_idx-1 + & DOMAIN_MAPPING%ADJACENT_DOMAINS_PTR(my_computation_node_number)+domain_idx-1 domain_no=DOMAIN_MAPPING%ADJACENT_DOMAINS(domain_idx)%DOMAIN_NUMBER FOUND=.FALSE. DO domain_idx2=DOMAIN_MAPPING%ADJACENT_DOMAINS_PTR(domain_no),DOMAIN_MAPPING%ADJACENT_DOMAINS_PTR(domain_no+1)-1 - IF(DOMAIN_MAPPING%ADJACENT_DOMAINS_LIST(domain_idx2)==my_computational_node_number) THEN + IF(DOMAIN_MAPPING%ADJACENT_DOMAINS_LIST(domain_idx2)==my_computation_node_number) THEN FOUND=.TRUE. EXIT ENDIF @@ -7152,7 +7152,7 @@ SUBROUTINE DISTRIBUTED_VECTOR_DATA_RESTORE_INTG(DISTRIBUTED_VECTOR,DATA,ERR,ERRO !Argument variables TYPE(DISTRIBUTED_VECTOR_TYPE), POINTER :: DISTRIBUTED_VECTOR !1) THEN + IF(NUMBER_OF_COMPUTATION_NODES>1) THEN CALL DISTRIBUTED_VECTOR_UPDATE_WAITFINISHED(DISTRIBUTED_VECTOR,ERR,ERROR,*999) !Copy the receive buffers back to the ghost positions in the data vector DO domain_idx=1,DISTRIBUTED_VECTOR%DOMAIN_MAPPING%NUMBER_OF_ADJACENT_DOMAINS @@ -8170,7 +8170,7 @@ SUBROUTINE DISTRIBUTED_VECTOR_UPDATE_START(DISTRIBUTED_VECTOR,ERR,ERROR,*) INTEGER(INTG), INTENT(OUT) :: ERR !1) THEN + IF(NUMBER_OF_COMPUTATION_NODES>1) THEN IF(DISTRIBUTED_VECTOR%DOMAIN_MAPPING%NUMBER_OF_ADJACENT_DOMAINS>0) THEN !Fill in the send buffers with the send ghost values DO domain_idx=1,DISTRIBUTED_VECTOR%DOMAIN_MAPPING%NUMBER_OF_ADJACENT_DOMAINS @@ -8230,7 +8230,7 @@ SUBROUTINE DISTRIBUTED_VECTOR_UPDATE_START(DISTRIBUTED_VECTOR,ERR,ERROR,*) & DISTRIBUTED_VECTOR%CMISS%TRANSFERS(domain_idx)%RECEIVE_BUFFER_SIZE,MPI_INTEGER, & & DISTRIBUTED_VECTOR%DOMAIN_MAPPING%ADJACENT_DOMAINS(domain_idx)%DOMAIN_NUMBER, & & DISTRIBUTED_VECTOR%CMISS%TRANSFERS(domain_idx)%RECEIVE_TAG_NUMBER, & - & computationalEnvironment%mpiCommunicator, & + & computationEnvironment%mpiCommunicator, & & DISTRIBUTED_VECTOR%CMISS%TRANSFERS(domain_idx)%MPI_RECEIVE_REQUEST,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_IRECV",MPI_IERROR,ERR,ERROR,*999) IF(DIAGNOSTICS5) THEN @@ -8243,7 +8243,7 @@ SUBROUTINE DISTRIBUTED_VECTOR_UPDATE_START(DISTRIBUTED_VECTOR,ERR,ERROR,*) CALL WRITE_STRING_VALUE(DIAGNOSTIC_OUTPUT_TYPE," Receive tag = ",DISTRIBUTED_VECTOR% & & CMISS%TRANSFERS(domain_idx)%RECEIVE_TAG_NUMBER,ERR,ERROR,*999) CALL WRITE_STRING_VALUE(DIAGNOSTIC_OUTPUT_TYPE," Receive comm = ", & - & computationalEnvironment%mpiCommunicator,ERR,ERROR,*999) + & computationEnvironment%mpiCommunicator,ERR,ERROR,*999) CALL WRITE_STRING_VALUE(DIAGNOSTIC_OUTPUT_TYPE," Receive request = ",DISTRIBUTED_VECTOR% & & CMISS%TRANSFERS(domain_idx)%MPI_RECEIVE_REQUEST,ERR,ERROR,*999) ENDIF @@ -8252,7 +8252,7 @@ SUBROUTINE DISTRIBUTED_VECTOR_UPDATE_START(DISTRIBUTED_VECTOR,ERR,ERROR,*) & DISTRIBUTED_VECTOR%CMISS%TRANSFERS(domain_idx)%RECEIVE_BUFFER_SIZE,MPI_REAL, & & DISTRIBUTED_VECTOR%DOMAIN_MAPPING%ADJACENT_DOMAINS(domain_idx)%DOMAIN_NUMBER, & & DISTRIBUTED_VECTOR%CMISS%TRANSFERS(domain_idx)%RECEIVE_TAG_NUMBER, & - & computationalEnvironment%mpiCommunicator, & + & computationEnvironment%mpiCommunicator, & & DISTRIBUTED_VECTOR%CMISS%TRANSFERS(domain_idx)%MPI_RECEIVE_REQUEST,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_IRECV",MPI_IERROR,ERR,ERROR,*999) IF(DIAGNOSTICS5) THEN @@ -8265,7 +8265,7 @@ SUBROUTINE DISTRIBUTED_VECTOR_UPDATE_START(DISTRIBUTED_VECTOR,ERR,ERROR,*) CALL WRITE_STRING_VALUE(DIAGNOSTIC_OUTPUT_TYPE," Receive tag = ",DISTRIBUTED_VECTOR% & & CMISS%TRANSFERS(domain_idx)%RECEIVE_TAG_NUMBER,ERR,ERROR,*999) CALL WRITE_STRING_VALUE(DIAGNOSTIC_OUTPUT_TYPE," Receive comm = ", & - & computationalEnvironment%mpiCommunicator,ERR,ERROR,*999) + & computationEnvironment%mpiCommunicator,ERR,ERROR,*999) CALL WRITE_STRING_VALUE(DIAGNOSTIC_OUTPUT_TYPE," Receive request = ",DISTRIBUTED_VECTOR% & & CMISS%TRANSFERS(domain_idx)%MPI_RECEIVE_REQUEST,ERR,ERROR,*999) ENDIF @@ -8274,7 +8274,7 @@ SUBROUTINE DISTRIBUTED_VECTOR_UPDATE_START(DISTRIBUTED_VECTOR,ERR,ERROR,*) & DISTRIBUTED_VECTOR%CMISS%TRANSFERS(domain_idx)%RECEIVE_BUFFER_SIZE,MPI_DOUBLE_PRECISION, & & DISTRIBUTED_VECTOR%DOMAIN_MAPPING%ADJACENT_DOMAINS(domain_idx)%DOMAIN_NUMBER, & & DISTRIBUTED_VECTOR%CMISS%TRANSFERS(domain_idx)%RECEIVE_TAG_NUMBER, & - & computationalEnvironment%mpiCommunicator, & + & computationEnvironment%mpiCommunicator, & & DISTRIBUTED_VECTOR%CMISS%TRANSFERS(domain_idx)%MPI_RECEIVE_REQUEST,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_IRECV",MPI_IERROR,ERR,ERROR,*999) IF(DIAGNOSTICS5) THEN @@ -8287,7 +8287,7 @@ SUBROUTINE DISTRIBUTED_VECTOR_UPDATE_START(DISTRIBUTED_VECTOR,ERR,ERROR,*) CALL WRITE_STRING_VALUE(DIAGNOSTIC_OUTPUT_TYPE," Receive tag = ",DISTRIBUTED_VECTOR% & & CMISS%TRANSFERS(domain_idx)%RECEIVE_TAG_NUMBER,ERR,ERROR,*999) CALL WRITE_STRING_VALUE(DIAGNOSTIC_OUTPUT_TYPE," Receive comm = ", & - & computationalEnvironment%mpiCommunicator,ERR,ERROR,*999) + & computationEnvironment%mpiCommunicator,ERR,ERROR,*999) CALL WRITE_STRING_VALUE(DIAGNOSTIC_OUTPUT_TYPE," Receive request = ",DISTRIBUTED_VECTOR% & & CMISS%TRANSFERS(domain_idx)%MPI_RECEIVE_REQUEST,ERR,ERROR,*999) ENDIF @@ -8296,7 +8296,7 @@ SUBROUTINE DISTRIBUTED_VECTOR_UPDATE_START(DISTRIBUTED_VECTOR,ERR,ERROR,*) & DISTRIBUTED_VECTOR%CMISS%TRANSFERS(domain_idx)%RECEIVE_BUFFER_SIZE,MPI_LOGICAL, & & DISTRIBUTED_VECTOR%DOMAIN_MAPPING%ADJACENT_DOMAINS(domain_idx)%DOMAIN_NUMBER, & & DISTRIBUTED_VECTOR%CMISS%TRANSFERS(domain_idx)%RECEIVE_TAG_NUMBER, & - & computationalEnvironment%mpiCommunicator, & + & computationEnvironment%mpiCommunicator, & & DISTRIBUTED_VECTOR%CMISS%TRANSFERS(domain_idx)%MPI_RECEIVE_REQUEST,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_IRECV",MPI_IERROR,ERR,ERROR,*999) IF(DIAGNOSTICS5) THEN @@ -8309,7 +8309,7 @@ SUBROUTINE DISTRIBUTED_VECTOR_UPDATE_START(DISTRIBUTED_VECTOR,ERR,ERROR,*) CALL WRITE_STRING_VALUE(DIAGNOSTIC_OUTPUT_TYPE," Receive tag = ",DISTRIBUTED_VECTOR% & & CMISS%TRANSFERS(domain_idx)%RECEIVE_TAG_NUMBER,ERR,ERROR,*999) CALL WRITE_STRING_VALUE(DIAGNOSTIC_OUTPUT_TYPE," Receive comm = ", & - & computationalEnvironment%mpiCommunicator,ERR,ERROR,*999) + & computationEnvironment%mpiCommunicator,ERR,ERROR,*999) CALL WRITE_STRING_VALUE(DIAGNOSTIC_OUTPUT_TYPE," Receive request = ",DISTRIBUTED_VECTOR% & & CMISS%TRANSFERS(domain_idx)%MPI_RECEIVE_REQUEST,ERR,ERROR,*999) ENDIF @@ -8331,7 +8331,7 @@ SUBROUTINE DISTRIBUTED_VECTOR_UPDATE_START(DISTRIBUTED_VECTOR,ERR,ERROR,*) & DISTRIBUTED_VECTOR%CMISS%TRANSFERS(domain_idx)%SEND_BUFFER_SIZE,MPI_INTEGER, & & DISTRIBUTED_VECTOR%DOMAIN_MAPPING%ADJACENT_DOMAINS(domain_idx)%DOMAIN_NUMBER, & & DISTRIBUTED_VECTOR%CMISS%TRANSFERS(domain_idx)%SEND_TAG_NUMBER, & - & computationalEnvironment%mpiCommunicator, & + & computationEnvironment%mpiCommunicator, & & DISTRIBUTED_VECTOR%CMISS%TRANSFERS(domain_idx)%MPI_SEND_REQUEST,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ISEND",MPI_IERROR,ERR,ERROR,*999) IF(DIAGNOSTICS5) THEN @@ -8344,7 +8344,7 @@ SUBROUTINE DISTRIBUTED_VECTOR_UPDATE_START(DISTRIBUTED_VECTOR,ERR,ERROR,*) CALL WRITE_STRING_VALUE(DIAGNOSTIC_OUTPUT_TYPE," Send tag = ",DISTRIBUTED_VECTOR% & & CMISS%TRANSFERS(domain_idx)%SEND_TAG_NUMBER,ERR,ERROR,*999) CALL WRITE_STRING_VALUE(DIAGNOSTIC_OUTPUT_TYPE," Send comm = ", & - & computationalEnvironment%mpiCommunicator,ERR,ERROR,*999) + & computationEnvironment%mpiCommunicator,ERR,ERROR,*999) CALL WRITE_STRING_VALUE(DIAGNOSTIC_OUTPUT_TYPE," Send request = ",DISTRIBUTED_VECTOR% & & CMISS%TRANSFERS(domain_idx)%MPI_SEND_REQUEST,ERR,ERROR,*999) ENDIF @@ -8353,7 +8353,7 @@ SUBROUTINE DISTRIBUTED_VECTOR_UPDATE_START(DISTRIBUTED_VECTOR,ERR,ERROR,*) & DISTRIBUTED_VECTOR%CMISS%TRANSFERS(domain_idx)%SEND_BUFFER_SIZE,MPI_REAL, & & DISTRIBUTED_VECTOR%DOMAIN_MAPPING%ADJACENT_DOMAINS(domain_idx)%DOMAIN_NUMBER, & & DISTRIBUTED_VECTOR%CMISS%TRANSFERS(domain_idx)%SEND_TAG_NUMBER, & - & computationalEnvironment%mpiCommunicator, & + & computationEnvironment%mpiCommunicator, & & DISTRIBUTED_VECTOR%CMISS%TRANSFERS(domain_idx)%MPI_SEND_REQUEST,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ISEND",MPI_IERROR,ERR,ERROR,*999) IF(DIAGNOSTICS5) THEN @@ -8366,7 +8366,7 @@ SUBROUTINE DISTRIBUTED_VECTOR_UPDATE_START(DISTRIBUTED_VECTOR,ERR,ERROR,*) CALL WRITE_STRING_VALUE(DIAGNOSTIC_OUTPUT_TYPE," Send tag = ",DISTRIBUTED_VECTOR% & & CMISS%TRANSFERS(domain_idx)%SEND_TAG_NUMBER,ERR,ERROR,*999) CALL WRITE_STRING_VALUE(DIAGNOSTIC_OUTPUT_TYPE," Send comm = ", & - & computationalEnvironment%mpiCommunicator,ERR,ERROR,*999) + & computationEnvironment%mpiCommunicator,ERR,ERROR,*999) CALL WRITE_STRING_VALUE(DIAGNOSTIC_OUTPUT_TYPE," Send request = ",DISTRIBUTED_VECTOR% & & CMISS%TRANSFERS(domain_idx)%MPI_SEND_REQUEST,ERR,ERROR,*999) ENDIF @@ -8375,7 +8375,7 @@ SUBROUTINE DISTRIBUTED_VECTOR_UPDATE_START(DISTRIBUTED_VECTOR,ERR,ERROR,*) & DISTRIBUTED_VECTOR%CMISS%TRANSFERS(domain_idx)%SEND_BUFFER_SIZE,MPI_DOUBLE_PRECISION, & & DISTRIBUTED_VECTOR%DOMAIN_MAPPING%ADJACENT_DOMAINS(domain_idx)%DOMAIN_NUMBER, & & DISTRIBUTED_VECTOR%CMISS%TRANSFERS(domain_idx)%SEND_TAG_NUMBER, & - & computationalEnvironment%mpiCommunicator, & + & computationEnvironment%mpiCommunicator, & & DISTRIBUTED_VECTOR%CMISS%TRANSFERS(domain_idx)%MPI_SEND_REQUEST,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ISEND",MPI_IERROR,ERR,ERROR,*999) IF(DIAGNOSTICS5) THEN @@ -8387,7 +8387,7 @@ SUBROUTINE DISTRIBUTED_VECTOR_UPDATE_START(DISTRIBUTED_VECTOR,ERR,ERROR,*) & ADJACENT_DOMAINS(domain_idx)%DOMAIN_NUMBER,ERR,ERROR,*999) CALL WRITE_STRING_VALUE(DIAGNOSTIC_OUTPUT_TYPE," Send tag = ",DISTRIBUTED_VECTOR% & & CMISS%TRANSFERS(domain_idx)%SEND_TAG_NUMBER,ERR,ERROR,*999) - CALL WRITE_STRING_VALUE(DIAGNOSTIC_OUTPUT_TYPE," Send comm = ",computationalEnvironment%mpiCommunicator, & + CALL WRITE_STRING_VALUE(DIAGNOSTIC_OUTPUT_TYPE," Send comm = ",computationEnvironment%mpiCommunicator, & & ERR,ERROR,*999) CALL WRITE_STRING_VALUE(DIAGNOSTIC_OUTPUT_TYPE," Send request = ",DISTRIBUTED_VECTOR% & & CMISS%TRANSFERS(domain_idx)%MPI_SEND_REQUEST,ERR,ERROR,*999) @@ -8397,7 +8397,7 @@ SUBROUTINE DISTRIBUTED_VECTOR_UPDATE_START(DISTRIBUTED_VECTOR,ERR,ERROR,*) & DISTRIBUTED_VECTOR%CMISS%TRANSFERS(domain_idx)%SEND_BUFFER_SIZE,MPI_LOGICAL, & & DISTRIBUTED_VECTOR%DOMAIN_MAPPING%ADJACENT_DOMAINS(domain_idx)%DOMAIN_NUMBER, & & DISTRIBUTED_VECTOR%CMISS%TRANSFERS(domain_idx)%SEND_TAG_NUMBER, & - & computationalEnvironment%mpiCommunicator, & + & computationEnvironment%mpiCommunicator, & & DISTRIBUTED_VECTOR%CMISS%TRANSFERS(domain_idx)%MPI_SEND_REQUEST,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ISEND",MPI_IERROR,ERR,ERROR,*999) IF(DIAGNOSTICS5) THEN @@ -8410,7 +8410,7 @@ SUBROUTINE DISTRIBUTED_VECTOR_UPDATE_START(DISTRIBUTED_VECTOR,ERR,ERROR,*) CALL WRITE_STRING_VALUE(DIAGNOSTIC_OUTPUT_TYPE," Send tag = ",DISTRIBUTED_VECTOR% & & CMISS%TRANSFERS(domain_idx)%SEND_TAG_NUMBER,ERR,ERROR,*999) CALL WRITE_STRING_VALUE(DIAGNOSTIC_OUTPUT_TYPE," Send comm = ", & - & computationalEnvironment%mpiCommunicator,ERR,ERROR,*999) + & computationEnvironment%mpiCommunicator,ERR,ERROR,*999) CALL WRITE_STRING_VALUE(DIAGNOSTIC_OUTPUT_TYPE," Send request = ",DISTRIBUTED_VECTOR% & & CMISS%TRANSFERS(domain_idx)%MPI_SEND_REQUEST,ERR,ERROR,*999) ENDIF @@ -8522,12 +8522,12 @@ END SUBROUTINE DISTRIBUTED_VECTOR_UPDATE_START !================================================================================================================================ ! - !>Calculates the L2 norm of a distributed vector values on this computational node + !>Calculates the L2 norm of a distributed vector values on this computation node SUBROUTINE DistributedVector_L2Norm(distributedVector,norm,err,error,*) !Argument variables TYPE(DISTRIBUTED_VECTOR_TYPE), INTENT(IN), POINTER :: distributedVector !Calculates the dot product of 2 distributed integer vectors on this computational node + !>Calculates the dot product of 2 distributed integer vectors on this computation node SUBROUTINE DistributedVector_VecDotIntg(distributedVectorA,distributedVectorB,dotProduct,err,error,*) !Argument variables TYPE(DISTRIBUTED_VECTOR_TYPE), INTENT(IN), POINTER :: distributedVectorA !Calculates the dot product of 2 distributed single-precision vectors on this computational node + !>Calculates the dot product of 2 distributed single-precision vectors on this computation node SUBROUTINE DistributedVector_VecDotSp(distributedVectorA,distributedVectorB,dotProduct,err,error,*) !Argument variables TYPE(DISTRIBUTED_VECTOR_TYPE), INTENT(IN), POINTER :: distributedVectorA !Calculates the dot product of 2 distributed double-precision vectors on this computational node + !>Calculates the dot product of 2 distributed double-precision vectors on this computation node SUBROUTINE DistributedVector_VecDotDp(distributedVectorA,distributedVectorB,dotProduct,err,error,*) !Argument variables TYPE(DISTRIBUTED_VECTOR_TYPE), INTENT(IN), POINTER :: distributedVectorA ! Auckland, the University of Oxford and King's College, London. !> All Rights Reserved. !> -!> Contributor(s): +!> Contributor(s): Chris Bradley !> !> Alternatively, the contents of this file may be used under the terms of !> either the GNU General Public License Version 2 or later (the "GPL"), or @@ -45,7 +45,7 @@ MODULE DOMAIN_MAPPINGS USE BaseRoutines - USE ComputationEnvironment + USE ComputationRoutines USE INPUT_OUTPUT USE ISO_VARYING_STRING USE KINDS @@ -159,7 +159,7 @@ SUBROUTINE DOMAIN_MAPPINGS_GLOBAL_TO_LOCAL_GET(DOMAIN_MAPPING,GLOBAL_NUMBER,LOCA IF(ASSOCIATED(DOMAIN_MAPPING)) THEN IF(GLOBAL_NUMBER>=1.AND.GLOBAL_NUMBER<=DOMAIN_MAPPING%NUMBER_OF_GLOBAL) THEN IF(DOMAIN_MAPPING%GLOBAL_TO_LOCAL_MAP(GLOBAL_NUMBER)%DOMAIN_NUMBER(1)== & - & computationalEnvironment%myComputationalNodeNumber) THEN + & computationEnvironment%myComputationNodeNumber) THEN LOCAL_NUMBER=DOMAIN_MAPPING%GLOBAL_TO_LOCAL_MAP(GLOBAL_NUMBER)%LOCAL_NUMBER(1) LOCAL_EXISTS=.TRUE. ENDIF @@ -192,7 +192,7 @@ SUBROUTINE DOMAIN_MAPPINGS_LOCAL_FROM_GLOBAL_CALCULATE(DOMAIN_MAPPING,ERR,ERROR, TYPE(VARYING_STRING), INTENT(OUT) :: ERROR !0) THEN TOTAL_NUMBER_OF_ADJACENT_DOMAINS=TOTAL_NUMBER_OF_ADJACENT_DOMAINS+1 - IF(domain_no==myComputationalNodeNumber) NUMBER_OF_ADJACENT_DOMAINS=NUMBER_OF_ADJACENT_DOMAINS+1 + IF(domain_no==myComputationNodeNumber) NUMBER_OF_ADJACENT_DOMAINS=NUMBER_OF_ADJACENT_DOMAINS+1 ENDIF ENDIF ENDDO !domain_no2 @@ -335,7 +335,7 @@ SUBROUTINE DOMAIN_MAPPINGS_LOCAL_FROM_GLOBAL_CALCULATE(DOMAIN_MAPPING,ERR,ERROR, DO domain_idx=1,DOMAIN_MAPPING%NUMBER_OF_ADJACENT_DOMAINS CALL DOMAIN_MAPPINGS_ADJACENT_DOMAIN_INITIALISE(DOMAIN_MAPPING%ADJACENT_DOMAINS(domain_idx),ERR,ERROR,*999) domain_no= & - & DOMAIN_MAPPING%ADJACENT_DOMAINS_LIST(DOMAIN_MAPPING%ADJACENT_DOMAINS_PTR(myComputationalNodeNumber)+domain_idx-1) + & DOMAIN_MAPPING%ADJACENT_DOMAINS_LIST(DOMAIN_MAPPING%ADJACENT_DOMAINS_PTR(myComputationNodeNumber)+domain_idx-1) DOMAIN_MAPPING%ADJACENT_DOMAINS(domain_idx)%DOMAIN_NUMBER=domain_no ADJACENT_DOMAIN_MAP(domain_no)=domain_idx NULLIFY(GHOST_SEND_LISTS(domain_idx)%PTR) @@ -368,7 +368,7 @@ SUBROUTINE DOMAIN_MAPPINGS_LOCAL_FROM_GLOBAL_CALCULATE(DOMAIN_MAPPING,ERR,ERROR, domain_no=DOMAIN_MAPPING%GLOBAL_TO_LOCAL_MAP(global_number)%DOMAIN_NUMBER(domain_idx) local_type=DOMAIN_MAPPING%GLOBAL_TO_LOCAL_MAP(global_number)%LOCAL_TYPE(domain_idx) IF(local_type/=DOMAIN_LOCAL_GHOST) THEN - IF(domain_no==myComputationalNodeNumber) SEND_GLOBAL=.TRUE. + IF(domain_no==myComputationNodeNumber) SEND_GLOBAL=.TRUE. IF(RECEIVE_FROM_DOMAIN==-1) THEN RECEIVE_FROM_DOMAIN=domain_no ELSE @@ -390,7 +390,7 @@ SUBROUTINE DOMAIN_MAPPINGS_LOCAL_FROM_GLOBAL_CALCULATE(DOMAIN_MAPPING,ERR,ERROR, domain_no=DOMAIN_MAPPING%GLOBAL_TO_LOCAL_MAP(global_number)%DOMAIN_NUMBER(domain_idx) local_number=DOMAIN_MAPPING%GLOBAL_TO_LOCAL_MAP(global_number)%LOCAL_NUMBER(domain_idx) local_type=DOMAIN_MAPPING%GLOBAL_TO_LOCAL_MAP(global_number)%LOCAL_TYPE(domain_idx) - IF(domain_no==myComputationalNodeNumber) THEN + IF(domain_no==myComputationNodeNumber) THEN DOMAIN_MAPPING%LOCAL_TO_GLOBAL_MAP(local_number)=global_number SELECT CASE(DOMAIN_MAPPING%GLOBAL_TO_LOCAL_MAP(global_number)%LOCAL_TYPE(domain_idx)) CASE(DOMAIN_LOCAL_INTERNAL) diff --git a/src/equations_set_routines.f90 b/src/equations_set_routines.f90 index 7cb7fdeb..24702e6a 100644 --- a/src/equations_set_routines.f90 +++ b/src/equations_set_routines.f90 @@ -50,7 +50,7 @@ MODULE EQUATIONS_SET_ROUTINES USE BOUNDARY_CONDITIONS_ROUTINES USE CLASSICAL_FIELD_ROUTINES USE CmissMPI - USE ComputationEnvironment + USE ComputationRoutines USE Constants USE COORDINATE_ROUTINES USE DISTRIBUTED_MATRIX_VECTOR @@ -6305,7 +6305,7 @@ SUBROUTINE EQUATIONS_SET_BOUNDARY_CONDITIONS_INCREMENT(EQUATIONS_SET,BOUNDARY_CO TYPE(BOUNDARY_CONDITIONS_DIRICHLET_TYPE), POINTER :: DIRICHLET_BOUNDARY_CONDITIONS TYPE(BOUNDARY_CONDITIONS_PRESSURE_INCREMENTED_TYPE), POINTER :: PRESSURE_INCREMENTED_BOUNDARY_CONDITIONS INTEGER(INTG) :: variable_idx,variable_type,dirichlet_idx,dirichlet_dof_idx,neumann_point_dof - INTEGER(INTG) :: condition_idx, condition_global_dof, condition_local_dof, myComputationalNodeNumber + INTEGER(INTG) :: condition_idx, condition_global_dof, condition_local_dof, myComputationNodeNumber REAL(DP), POINTER :: FULL_LOADS(:),CURRENT_LOADS(:), PREV_LOADS(:) REAL(DP) :: FULL_LOAD, CURRENT_LOAD, NEW_LOAD, PREV_LOAD TYPE(VARYING_STRING) :: localError @@ -6320,7 +6320,7 @@ SUBROUTINE EQUATIONS_SET_BOUNDARY_CONDITIONS_INCREMENT(EQUATIONS_SET,BOUNDARY_CO NULLIFY(PREV_LOADS) NULLIFY(CURRENT_LOADS) - myComputationalNodeNumber=ComputationalEnvironment_NodeNumberGet(err,error) + myComputationNodeNumber=ComputationEnvironment_NodeNumberGet(err,error) !Take the stored load, scale it down appropriately then apply to the unknown variables IF(ASSOCIATED(EQUATIONS_SET)) THEN @@ -6367,7 +6367,7 @@ SUBROUTINE EQUATIONS_SET_BOUNDARY_CONDITIONS_INCREMENT(EQUATIONS_SET,BOUNDARY_CO & BOUNDARY_CONDITION_MOVED_WALL_INCREMENTED) !Convert dof index to local index IF(DOMAIN_MAPPING%GLOBAL_TO_LOCAL_MAP(dirichlet_dof_idx)%DOMAIN_NUMBER(1)== & - & myComputationalNodeNumber) THEN + & myComputationNodeNumber) THEN dirichlet_dof_idx=DOMAIN_MAPPING%GLOBAL_TO_LOCAL_MAP(dirichlet_dof_idx)%LOCAL_NUMBER(1) IF(0=NUMBER_OF_EXNODE_FILES) EXIT ENDIF - !IF(MASTER_COMPUTATIONAL_NUMBER/=myComputationalNodeNumber) PRINT * , idx_exnode + !IF(MASTER_COMPUTATION_NUMBER/=myComputationNodeNumber) PRINT * , idx_exnode !goto the start of mesh part - IF(MASTER_COMPUTATIONAL_NUMBER==myComputationalNodeNumber) THEN + IF(MASTER_COMPUTATION_NUMBER==myComputationNodeNumber) THEN IF(FILE_END) THEN FILE_ID=1030+idx_exnode @@ -1286,14 +1286,14 @@ SUBROUTINE FIELD_IO_CREATE_FIELDS(NAME, REGION, DECOMPOSITION, FIELD_VALUES_SET_ NODE_SECTION=.TRUE. ENDDO !idx_field ENDIF !FILE_END==.FALSE..AND.SECTION_START=.TRUE..AND.NODE_SECTION=.FALSE. - ENDIF !MASTER_COMPUTATIONAL_NUMBER + ENDIF !MASTER_COMPUTATION_NUMBER !broadcasting total_number_of_devs - CALL MPI_BCAST(total_number_of_devs,1,MPI_INTEGER,MASTER_COMPUTATIONAL_NUMBER, & - & computationalEnvironment%mpiCommunicator,MPI_IERROR) + CALL MPI_BCAST(total_number_of_devs,1,MPI_INTEGER,MASTER_COMPUTATION_NUMBER, & + & computationEnvironment%mpiCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_BCAST",MPI_IERROR,ERR,ERROR,*999) - IF(MASTER_COMPUTATIONAL_NUMBER/=myComputationalNodeNumber) THEN + IF(MASTER_COMPUTATION_NUMBER/=myComputationNodeNumber) THEN CALL REALLOCATE( LIST_DEV, total_number_of_devs, & & "Could not allocate memory for nodal derivative index in non-master node", ERR, ERROR, *999 ) ENDIF @@ -1302,16 +1302,16 @@ SUBROUTINE FIELD_IO_CREATE_FIELDS(NAME, REGION, DECOMPOSITION, FIELD_VALUES_SET_ & "Could not allocate memory for nodal derivative index in non-master node", ERR, ERROR, *999 ) !broadcasting total_number_of_comps - CALL MPI_BCAST(LIST_DEV_POS,total_number_of_comps,MPI_INTEGER,MASTER_COMPUTATIONAL_NUMBER, & - & computationalEnvironment%mpiCommunicator,MPI_IERROR) + CALL MPI_BCAST(LIST_DEV_POS,total_number_of_comps,MPI_INTEGER,MASTER_COMPUTATION_NUMBER, & + & computationEnvironment%mpiCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_BCAST",MPI_IERROR,ERR,ERROR,*999) !broadcasting total_number_of_devs - CALL MPI_BCAST(LIST_DEV,total_number_of_devs,MPI_INTEGER,MASTER_COMPUTATIONAL_NUMBER, & - & computationalEnvironment%mpiCommunicator,MPI_IERROR) + CALL MPI_BCAST(LIST_DEV,total_number_of_devs,MPI_INTEGER,MASTER_COMPUTATION_NUMBER, & + & computationEnvironment%mpiCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_BCAST",MPI_IERROR,ERR,ERROR,*999) !goto the start of mesh part - IF(MASTER_COMPUTATIONAL_NUMBER==myComputationalNodeNumber) THEN + IF(MASTER_COMPUTATION_NUMBER==myComputationNodeNumber) THEN !have not touched the end IF((.NOT.FILE_END).AND.SECTION_START.AND.NODE_SECTION) THEN @@ -1363,17 +1363,17 @@ SUBROUTINE FIELD_IO_CREATE_FIELDS(NAME, REGION, DECOMPOSITION, FIELD_VALUES_SET_ IF(VERIFY(CMISS_KEYWORD_NODE, LINE)/=0) NODE_SECTION=.FALSE. ENDIF ENDIF !FILE_END==.FALSE..AND.SECTION_START=.TRUE..AND.NODE_SECTION=.TRUE. - ENDIF !(MASTER_COMPUTATIONAL_NUMBER==myComputationalNodeNumber) + ENDIF !(MASTER_COMPUTATION_NUMBER==myComputationNodeNumber) !broadcasting total_number_of_devs - CALL MPI_BCAST(LIST_DEV_VALUE,total_number_of_devs,MPI_REAL8,MASTER_COMPUTATIONAL_NUMBER, & - & computationalEnvironment%mpiCommunicator,MPI_IERROR) + CALL MPI_BCAST(LIST_DEV_VALUE,total_number_of_devs,MPI_REAL8,MASTER_COMPUTATION_NUMBER, & + & computationEnvironment%mpiCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_BCAST",MPI_IERROR,ERR,ERROR,*999) - CALL MPI_BCAST(NODAL_USER_NUMBER,1,MPI_INTEGER,MASTER_COMPUTATIONAL_NUMBER, & - & computationalEnvironment%mpiCommunicator,MPI_IERROR) + CALL MPI_BCAST(NODAL_USER_NUMBER,1,MPI_INTEGER,MASTER_COMPUTATION_NUMBER, & + & computationEnvironment%mpiCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_BCAST",MPI_IERROR,ERR,ERROR,*999) - !IF(MASTER_COMPUTATIONAL_NUMBER/=myComputationalNodeNumber) THEN + !IF(MASTER_COMPUTATION_NUMBER/=myComputationNodeNumber) THEN print *, "user number:" print *, NODAL_USER_NUMBER print *, LIST_DEV_VALUE @@ -1491,7 +1491,7 @@ END SUBROUTINE FIELD_IO_CREATE_DECOMPISTION !================================================================================================================================ ! - !>Import fields from files into different computational nodes + !>Import fields from files into different computation nodes SUBROUTINE FIELD_IO_FIELDS_IMPORT(NAME, METHOD, REGION, MESH, MESH_USER_NUMBER, DECOMPOSITION, DECOMPOSITION_USER_NUMBER, & &DECOMPOSITION_METHOD, FIELD_VALUES_SET_TYPE, FIELD_SCALING_TYPE, ERR, ERROR, *) !Argument variables @@ -1509,9 +1509,9 @@ SUBROUTINE FIELD_IO_FIELDS_IMPORT(NAME, METHOD, REGION, MESH, MESH_USER_NUMBER, INTEGER(INTG), INTENT(OUT) :: ERR !Read the global mesh into one computational node first and then broadcasting to others nodes - SUBROUTINE FIELD_IO_IMPORT_GLOBAL_MESH(NAME, REGION, MESH, MESH_USER_NUMBER, MASTER_COMPUTATIONAL_NUMBER, & - & myComputationalNodeNumber, &!USER_NODAL_NUMBER_MAP_GLOBAL_NODAL_NUMBER, + !>Read the global mesh into one computation node first and then broadcasting to others nodes + SUBROUTINE FIELD_IO_IMPORT_GLOBAL_MESH(NAME, REGION, MESH, MESH_USER_NUMBER, MASTER_COMPUTATION_NUMBER, & + & myComputationNodeNumber, &!USER_NODAL_NUMBER_MAP_GLOBAL_NODAL_NUMBER, &MESH_COMPONENTS_OF_FIELD_COMPONENTS, & & COMPONENTS_IN_FIELDS, NUMBER_OF_FIELDS, NUMBER_OF_EXNODE_FILES, ERR, ERROR, *) !Argument variables @@ -1618,8 +1618,8 @@ SUBROUTINE FIELD_IO_IMPORT_GLOBAL_MESH(NAME, REGION, MESH, MESH_USER_NUMBER, MAS TYPE(MESH_TYPE), POINTER :: MESH !Write the header of a group elements using FORTRAN SUBROUTINE FieldIO_ExportElementalGroupHeaderFortran( global_number, MAX_NODE_COMP_INDEX,NUM_OF_SCALING_FACTOR_SETS, & - & LIST_COMP_SCALE, myComputationalNodeNumber, elementalInfoSet, sessionHandle, ERR,ERROR, *) + & LIST_COMP_SCALE, myComputationNodeNumber, elementalInfoSet, sessionHandle, ERR,ERROR, *) !Argument variables INTEGER(INTG), INTENT(IN) :: global_number !elementalInfoSet%COMPONENTS(comp_idx)%PTR%DOMAIN !get the domain index for this variable component according to my own computional node number local_number = FindMyLocalDomainNumber( componentDomain%MAPPINGS%ELEMENTS%GLOBAL_TO_LOCAL_MAP( global_number ),& - & myComputationalNodeNumber ) + & myComputationNodeNumber ) GROUP_LOCAL_NUMBER(comp_idx)=local_number !use local domain information find the out the maximum number of derivatives DOMAIN_ELEMENTS=>componentDomain%TOPOLOGY%ELEMENTS @@ -3444,13 +3444,13 @@ END SUBROUTINE FieldIO_ExportElementalGroupHeaderFortran ! SUBROUTINE FIELD_IO_EXPORT_ELEMENT_SCALE_FACTORS( sessionHandle, components, componentScales, globalNumber, & - & myComputationalNodeNumber, ERR, ERROR, * ) + & myComputationNodeNumber, ERR, ERROR, * ) !Argument variables INTEGER(INTG) :: sessionHandle TYPE(FIELD_IO_COMPONENT_INFO_SET), INTENT(INOUT) :: components ! component%DOMAIN%TOPOLOGY%ELEMENTS domainNodes => component%DOMAIN%TOPOLOGY%NODES @@ -3558,13 +3558,13 @@ END SUBROUTINE FIELD_IO_EXPORT_ELEMENT_SCALE_FACTORS ! !>Write all the elemental information from LOCAL_PROCESS_NODAL_INFO_SET to exelem files - SUBROUTINE FIELD_IO_EXPORT_ELEMENTS_INTO_LOCAL_FILE(ELEMENTAL_INFO_SET, NAME, myComputationalNodeNumber, & + SUBROUTINE FIELD_IO_EXPORT_ELEMENTS_INTO_LOCAL_FILE(ELEMENTAL_INFO_SET, NAME, myComputationNodeNumber, & & ERR, ERROR, *) - !the reason that myComputationalNodeNumber is used in the argument is for future extension + !the reason that myComputationNodeNumber is used in the argument is for future extension !Argument variables TYPE(FIELD_IO_INFO_SET), INTENT(INOUT) :: ELEMENTAL_INFO_SET !component%DOMAIN%TOPOLOGY%ELEMENTS !get the domain index for this variable component according to my own computional node number local_number = FindMyLocalDomainNumber( DOMAIN_MAPPING_ELEMENTS%GLOBAL_TO_LOCAL_MAP( global_number ), & - & myComputationalNodeNumber ) + & myComputationNodeNumber ) !use local domain information find the out the maximum number of derivatives BASIS => DOMAIN_ELEMENTS%ELEMENTS( local_number )%BASIS @@ -3861,7 +3861,7 @@ SUBROUTINE FIELD_IO_EXPORT_ELEMENTS_INTO_LOCAL_FILE(ELEMENTAL_INFO_SET, NAME, my ENDIF CALL FIELD_IO_EXPORT_ELEMENT_SCALE_FACTORS( sessionHandle, components, & - & LIST_COMP_SCALE, global_number, myComputationalNodeNumber, ERR, ERROR, *999 ) + & LIST_COMP_SCALE, global_number, myComputationNodeNumber, ERR, ERROR, *999 ) ENDDO !elem_idx @@ -3887,10 +3887,10 @@ END SUBROUTINE FIELD_IO_EXPORT_ELEMENTS_INTO_LOCAL_FILE ! !>Sort the Elemental_info_set according to the type of field variable components - SUBROUTINE FIELD_IO_ELEMENTAL_INFO_SET_SORT(ELEMENTAL_INFO_SET, myComputationalNodeNumber, ERR,ERROR,*) + SUBROUTINE FIELD_IO_ELEMENTAL_INFO_SET_SORT(ELEMENTAL_INFO_SET, myComputationNodeNumber, ERR,ERROR,*) !Argument variables TYPE(FIELD_IO_INFO_SET), INTENT(INOUT) :: ELEMENTAL_INFO_SET !& & ELEMENTAL_INFO_SET%COMPONENT_INFO_SET(nn1)%PTR%COMPONENTS(component_idx)%PTR% & & DOMAIN%TOPOLOGY%ELEMENTS @@ -3991,7 +3991,7 @@ SUBROUTINE FIELD_IO_ELEMENTAL_INFO_SET_SORT(ELEMENTAL_INFO_SET, myComputationalN !get the domain index for this variable component according to my own computional node number !local number of nn2'th node in the damain assoicated with component(component_idx) local_number2 = FindMyLocalDomainNumber( DOMAIN_MAPPING_ELEMENTS%GLOBAL_TO_LOCAL_MAP( global_number2 ), & - & myComputationalNodeNumber ) + & myComputationNodeNumber ) DOMAIN_ELEMENTS2=>& & ELEMENTAL_INFO_SET%COMPONENT_INFO_SET(nn2)%PTR%COMPONENTS(component_idx)%PTR% & & DOMAIN%TOPOLOGY%ELEMENTS @@ -4281,23 +4281,23 @@ END SUBROUTINE FieldIO_ElementalInfoSetAttachLocalProcess ! TYPE(VARYING_STRING), INTENT(OUT) :: ERROR !Sort nodal information according to the type of field variable component - SUBROUTINE FIELD_IO_NODAL_INFO_SET_SORT(NODAL_INFO_SET, myComputationalNodeNumber, ERR,ERROR,*) + SUBROUTINE FIELD_IO_NODAL_INFO_SET_SORT(NODAL_INFO_SET, myComputationNodeNumber, ERR,ERROR,*) !Argument variables TYPE(FIELD_IO_INFO_SET), INTENT(INOUT) :: NODAL_INFO_SET !Write the header of a group nodes using FORTRAIN !SUBROUTINE FIELD_IO_IMPORT_NODAL_GROUP_HEADER_FORTRAN(NODAL_INFO_SET, LOCAL_NODAL_NUMBER, MAX_NUM_OF_NODAL_DERIVATIVES, & - !&myComputationalNodeNumber, FILE_ID, ERR,ERROR, *) + !&myComputationNodeNumber, FILE_ID, ERR,ERROR, *) ! !Argument variables ! TYPE(FIELD_IO_INFO_SET), INTENT(INOUT) :: NODAL_INFO_SET !NODAL_INFO_SET%COMPONENT_INFO_SET(LOCAL_NODAL_NUMBER)%& ! &COMPONENTS(comp_idx)%PTR%DOMAIN%MAPPINGS%NODES ! !get the domain index for this variable component according to my own computional node number - ! local_number = FindMyLocalDomainNumber( DOMAIN_MAPPING_NODES%GLOBAL_TO_LOCAL_MAP(global_number), myComputationalNodeNumber ) + ! local_number = FindMyLocalDomainNumber( DOMAIN_MAPPING_NODES%GLOBAL_TO_LOCAL_MAP(global_number), myComputationNodeNumber ) ! !use local domain information find the out the maximum number of derivatives ! DOMAIN_NODES=>NODAL_INFO_SET%COMPONENT_INFO_SET(LOCAL_NODAL_NUMBER)%COMPONENTS(comp_idx)%PTR%DOMAIN%TOPOLOGY%NODES ! MAX_NUM_OF_NODAL_DERIVATIVES=MAX(DOMAIN_NODES%NODES(local_number)%NUMBER_OF_DERIVATIVES,MAX_NUM_OF_NODAL_DERIVATIVES) @@ -5091,7 +5091,7 @@ END FUNCTION FIELD_IO_GET_COMPONENT_INFO_LABEL ! DOMAIN_MAPPING_NODES=>NODAL_INFO_SET%COMPONENT_INFO_SET(LOCAL_NODAL_NUMBER)%COMPONENTS(comp_idx)%PTR%& ! &DOMAIN%MAPPINGS%NODES ! !get the domain index for this variable component according to my own computional node number - ! local_number = FindMyLocalDomainNumber( DOMAIN_MAPPING_NODES%GLOBAL_TO_LOCAL_MAP(global_number), myComputationalNodeNumber ) + ! local_number = FindMyLocalDomainNumber( DOMAIN_MAPPING_NODES%GLOBAL_TO_LOCAL_MAP(global_number), myComputationNodeNumber ) ! !use local domain information find the out the maximum number of derivatives ! DOMAIN_NODES=>NODAL_INFO_SET%COMPONENT_INFO_SET(LOCAL_NODAL_NUMBER)%COMPONENTS(comp_idx)%PTR%DOMAIN%TOPOLOGY%NODES ! !get the nodal partial derivatives @@ -5137,12 +5137,12 @@ END FUNCTION FIELD_IO_GET_COMPONENT_INFO_LABEL !>Write the header of a group nodes using FORTRAIN SUBROUTINE FIELD_IO_EXPORT_NODAL_GROUP_HEADER_FORTRAN(fieldInfoSet, global_number, MAX_NUM_OF_NODAL_DERIVATIVES, & - &myComputationalNodeNumber, sessionHandle, paddingInfo, ERR,ERROR, *) + &myComputationNodeNumber, sessionHandle, paddingInfo, ERR,ERROR, *) !Argument variables TYPE(FIELD_IO_COMPONENT_INFO_SET), INTENT(IN) :: fieldInfoSet INTEGER(INTG), INTENT(IN) :: global_number INTEGER(INTG), INTENT(INOUT) :: MAX_NUM_OF_NODAL_DERIVATIVES !Write all the nodal information from NODAL_INFO_SET to local exnode files - SUBROUTINE FIELD_IO_EXPORT_NODES_INTO_LOCAL_FILE(NODAL_INFO_SET, NAME, myComputationalNodeNumber,ERR, ERROR, *) - !the reason that myComputationalNodeNumber is used in the argument is for future extension + SUBROUTINE FIELD_IO_EXPORT_NODES_INTO_LOCAL_FILE(NODAL_INFO_SET, NAME, myComputationNodeNumber,ERR, ERROR, *) + !the reason that myComputationNodeNumber is used in the argument is for future extension !Argument variables TYPE(FIELD_IO_INFO_SET), INTENT(INOUT):: NODAL_INFO_SET !Collect nodal information from each MPI process - SUBROUTINE FieldIO_NodelInfoSetAttachLocalProcess(NODAL_INFO_SET, FIELDS, myComputationalNodeNumber, ERR,ERROR,*) + SUBROUTINE FieldIO_NodelInfoSetAttachLocalProcess(NODAL_INFO_SET, FIELDS, myComputationNodeNumber, ERR,ERROR,*) !Argument variables TYPE(FIELD_IO_INFO_SET), INTENT(INOUT):: NODAL_INFO_SET ! Auckland, the University of Oxford and King's College, London. !> All Rights Reserved. !> -!> Contributor(s): +!> Contributor(s): Chris Bradley !> !> Alternatively, the contents of this file may be used under the terms of !> either the GNU General Public License Version 2 or later (the "GPL"), or @@ -46,7 +46,7 @@ MODULE FIELD_ROUTINES USE BaseRoutines USE BASIS_ROUTINES - USE ComputationEnvironment + USE ComputationRoutines USE COORDINATE_ROUTINES USE CmissMPI USE DISTRIBUTED_MATRIX_VECTOR @@ -10010,8 +10010,8 @@ SUBROUTINE FIELD_MAPPINGS_CALCULATE(FIELD,ERR,ERROR,*) & NUMBER_OF_CONSTANT_DOFS,NUMBER_OF_ELEMENT_DOFS,NUMBER_OF_NODE_DOFS,NUMBER_OF_GRID_POINT_DOFS,NUMBER_OF_GAUSS_POINT_DOFS, & & NUMBER_OF_LOCAL_VARIABLE_DOFS,TOTAL_NUMBER_OF_VARIABLE_DOFS,NUMBER_OF_DOMAINS,variable_global_ny, & & variable_local_ny,domain_idx,domain_no,constant_nyy,element_ny,element_nyy,node_ny,node_nyy,grid_point_nyy, & - & Gauss_point_nyy,version_idx,derivative_idx,ny,NUMBER_OF_COMPUTATIONAL_NODES, & - & myComputationalNodeNumber,domain_type_stop,start_idx,stop_idx,element_idx,node_idx,NUMBER_OF_LOCAL, NGP, MAX_NGP, & + & Gauss_point_nyy,version_idx,derivative_idx,ny,NUMBER_OF_COMPUTATION_NODES, & + & myComputationNodeNumber,domain_type_stop,start_idx,stop_idx,element_idx,node_idx,NUMBER_OF_LOCAL, NGP, MAX_NGP, & & gp,MPI_IERROR,NUMBER_OF_GLOBAL_DOFS,gauss_point_idx,NUMBER_OF_DATA_POINT_DOFS,data_point_nyy,dataPointIdx,elementIdx, & & localDataNumber,globalElementNumber INTEGER(INTG), ALLOCATABLE :: VARIABLE_LOCAL_DOFS_OFFSETS(:),VARIABLE_GHOST_DOFS_OFFSETS(:), & @@ -10028,9 +10028,9 @@ SUBROUTINE FIELD_MAPPINGS_CALCULATE(FIELD,ERR,ERROR,*) ENTERS("FIELD_MAPPINGS_CALCULATE",ERR,ERROR,*999) IF(ASSOCIATED(FIELD)) THEN - NUMBER_OF_COMPUTATIONAL_NODES=ComputationalEnvironment_NumberOfNodesGet(ERR,ERROR) + NUMBER_OF_COMPUTATION_NODES=ComputationEnvironment_NumberOfNodesGet(ERR,ERROR) IF(ERR/=0) GOTO 999 - myComputationalNodeNumber=ComputationalEnvironment_NodeNumberGet(ERR,ERROR) + myComputationNodeNumber=ComputationEnvironment_NodeNumberGet(ERR,ERROR) IF(ERR/=0) GOTO 999 !Calculate the number of global and local degrees of freedom for the field variables and components. Each field variable !component has a set of DOFs so loop over the components for each variable component and count up the DOFs. @@ -10077,7 +10077,7 @@ SUBROUTINE FIELD_MAPPINGS_CALCULATE(FIELD,ERR,ERROR,*) NGP=BASIS%QUADRATURE%QUADRATURE_SCHEME_MAP(BASIS_DEFAULT_QUADRATURE_SCHEME)%PTR%NUMBER_OF_GAUSS MAX_NGP=MAX(MAX_NGP,NGP) ENDDO !element_idx - CALL MPI_ALLREDUCE(MPI_IN_PLACE,MAX_NGP,1,MPI_INTEGER,MPI_MAX,computationalEnvironment%mpiCommunicator,MPI_IERROR) + CALL MPI_ALLREDUCE(MPI_IN_PLACE,MAX_NGP,1,MPI_INTEGER,MPI_MAX,computationEnvironment%mpiCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ALLREDUCE",MPI_IERROR,ERR,ERROR,*999) NUMBER_OF_GAUSS_POINT_DOFS=NUMBER_OF_GAUSS_POINT_DOFS+DOMAIN_TOPOLOGY%ELEMENTS%TOTAL_NUMBER_OF_ELEMENTS*MAX_NGP NUMBER_OF_LOCAL_VARIABLE_DOFS=NUMBER_OF_LOCAL_VARIABLE_DOFS+DOMAIN_TOPOLOGY%ELEMENTS%NUMBER_OF_ELEMENTS*MAX_NGP @@ -10146,7 +10146,7 @@ SUBROUTINE FIELD_MAPPINGS_CALCULATE(FIELD,ERR,ERROR,*) IF(ERR/=0) CALL FlagError("Could not allocate variable ghost dofs offsets.",ERR,ERROR,*999) !We want to ensure that the ghost DOFs are at the end so loop over the DOFs in two passes. The first pass will process !the local DOFs for each variable component and the second pass will process the ghost DOFs for each variable component. - IF(NUMBER_OF_COMPUTATIONAL_NODES==1) THEN + IF(NUMBER_OF_COMPUTATION_NODES==1) THEN domain_type_stop=1 !Local only ELSE domain_type_stop=2 !Local+Ghosts @@ -10192,7 +10192,7 @@ SUBROUTINE FIELD_MAPPINGS_CALCULATE(FIELD,ERR,ERROR,*) variable_global_ny=1+VARIABLE_GLOBAL_DOFS_OFFSET CALL DOMAIN_MAPPINGS_MAPPING_GLOBAL_INITIALISE(FIELD_VARIABLE_DOFS_MAPPING% & & GLOBAL_TO_LOCAL_MAP(variable_global_ny),ERR,ERROR,*999) - NUMBER_OF_DOMAINS=NUMBER_OF_COMPUTATIONAL_NODES !Constant is in all domains + NUMBER_OF_DOMAINS=NUMBER_OF_COMPUTATION_NODES !Constant is in all domains ALLOCATE(FIELD_VARIABLE_DOFS_MAPPING%GLOBAL_TO_LOCAL_MAP(variable_global_ny)%LOCAL_NUMBER(NUMBER_OF_DOMAINS), & & STAT=ERR) IF(ERR/=0) CALL FlagError("Could not allocate field variable dofs global to local map local number.", & @@ -10572,7 +10572,7 @@ SUBROUTINE FIELD_MAPPINGS_CALCULATE(FIELD,ERR,ERROR,*) decompositionTopology=>domain%DECOMPOSITION%TOPOLOGY IF(domain_type_idx==1) THEN ! domain_type_idx==1 -> non ghosts !Allocate parameter to dof map for this field variable component - !including both local and ghost data points on this computational domain. + !including both local and ghost data points on this computation domain. ALLOCATE(FIELD_COMPONENT%PARAM_TO_DOF_MAP%DATA_POINT_PARAM2DOF_MAP%DATA_POINTS(decompositionTopology% & & dataPoints%totalNumberOfDataPoints),STAT=ERR) IF(ERR/=0) CALL FlagError("Could not allocate field component parameter to dof data point map.",ERR,ERROR,*999) @@ -10720,13 +10720,13 @@ SUBROUTINE FIELD_MAPPINGS_CALCULATE(FIELD,ERR,ERROR,*) CASE(FIELD_CONSTANT_INTERPOLATION) DO component_idx=1,FIELD%VARIABLES(variable_idx)%NUMBER_OF_COMPONENTS FIELD_COMPONENT=>FIELD%VARIABLES(variable_idx)%COMPONENTS(component_idx) - variable_local_ny=1+VARIABLE_LOCAL_DOFS_OFFSETS(myComputationalNodeNumber) + variable_local_ny=1+VARIABLE_LOCAL_DOFS_OFFSETS(myComputationNodeNumber) !Allocate and set up global to local domain map for variable mapping IF(ASSOCIATED(FIELD_VARIABLE_DOFS_MAPPING)) THEN variable_global_ny=1+VARIABLE_GLOBAL_DOFS_OFFSET CALL DOMAIN_MAPPINGS_MAPPING_GLOBAL_INITIALISE(FIELD_VARIABLE_DOFS_MAPPING% & & GLOBAL_TO_LOCAL_MAP(variable_global_ny),ERR,ERROR,*999) - NUMBER_OF_DOMAINS=NUMBER_OF_COMPUTATIONAL_NODES !Constant is in all domains + NUMBER_OF_DOMAINS=NUMBER_OF_COMPUTATION_NODES !Constant is in all domains ALLOCATE(FIELD_VARIABLE_DOFS_MAPPING%GLOBAL_TO_LOCAL_MAP(variable_global_ny)%LOCAL_NUMBER(NUMBER_OF_DOMAINS), & & STAT=ERR) IF(ERR/=0) CALL FlagError("Could not allocate field variable dofs global to local map local number.", & @@ -10828,7 +10828,7 @@ SUBROUTINE FIELD_MAPPINGS_CALCULATE(FIELD,ERR,ERROR,*) DO component_idx=1,FIELD%VARIABLES(variable_idx)%NUMBER_OF_COMPONENTS FIELD_COMPONENT=>FIELD%VARIABLES(variable_idx)%COMPONENTS(component_idx) element_ny=element_ny+1 - variable_local_ny=element_ny+VARIABLE_LOCAL_DOFS_OFFSETS(myComputationalNodeNumber) + variable_local_ny=element_ny+VARIABLE_LOCAL_DOFS_OFFSETS(myComputationNodeNumber) element_nyy=element_nyy+1 !Setup dof to parameter map FIELD%VARIABLES(variable_idx)%DOF_TO_PARAM_MAP%DOF_TYPE(1,variable_local_ny)=FIELD_ELEMENT_DOF_TYPE @@ -10935,7 +10935,7 @@ SUBROUTINE FIELD_MAPPINGS_CALCULATE(FIELD,ERR,ERROR,*) FIELD_COMPONENT=>FIELD%VARIABLES(variable_idx)%COMPONENTS(component_idx) DOMAIN=>FIELD_COMPONENT%DOMAIN node_ny=node_ny+1 - variable_local_ny=node_ny+VARIABLE_LOCAL_DOFS_OFFSETS(myComputationalNodeNumber) + variable_local_ny=node_ny+VARIABLE_LOCAL_DOFS_OFFSETS(myComputationNodeNumber) node_nyy=node_nyy+1 version_idx=DOMAIN%TOPOLOGY%DOFS%DOF_INDEX(1,ny) derivative_idx=DOMAIN%TOPOLOGY%DOFS%DOF_INDEX(2,ny) @@ -11036,7 +11036,7 @@ SUBROUTINE FIELD_MAPPINGS_CALCULATE(FIELD,ERR,ERROR,*) FIELD_COMPONENT=>FIELD%VARIABLES(variable_idx)%COMPONENTS(component_idx) DOMAIN=>FIELD_COMPONENT%DOMAIN element_ny=element_ny+1 - variable_local_ny=element_ny+VARIABLE_LOCAL_DOFS_OFFSETS(myComputationalNodeNumber) + variable_local_ny=element_ny+VARIABLE_LOCAL_DOFS_OFFSETS(myComputationNodeNumber) node_nyy=node_nyy+1 !Setup dof to parameter map FIELD%VARIABLES(variable_idx)%DOF_TO_PARAM_MAP%DOF_TYPE(1,variable_local_ny)=FIELD_GAUSS_POINT_DOF_TYPE @@ -23577,7 +23577,7 @@ SUBROUTINE Field_ParameterSetUpdateElementDataPointDP(field,variableType,fieldSe IF(ASSOCIATED(decompositionTopology)) THEN dataProjection=>field%dataProjection IF(ASSOCIATED(dataProjection)) THEN - ! Use element topology to check if data point is on current computational node + ! Use element topology to check if data point is on current computation node CALL DECOMPOSITION_TOPOLOGY_ELEMENT_CHECK_EXISTS(decompositionTopology,userElementNumber, & & userElementExists,decompositionLocalElementNumber,ghostElement,err,error,*999) IF(userElementExists) THEN diff --git a/src/fieldml_input_routines.f90 b/src/fieldml_input_routines.f90 index ede199f2..0322f565 100755 --- a/src/fieldml_input_routines.f90 +++ b/src/fieldml_input_routines.f90 @@ -50,7 +50,7 @@ MODULE FIELDML_INPUT_ROUTINES USE BasisAccessRoutines USE CMISS USE CONSTANTS - USE ComputationEnvironment + USE ComputationRoutines USE COORDINATE_ROUTINES USE FIELD_ROUTINES USE FIELDML_API @@ -1261,7 +1261,7 @@ SUBROUTINE FieldmlInput_FieldNodalParametersUpdate( FIELDML_INFO, EVALUATOR_NAME INTEGER(INTG), TARGET :: OFFSETS(2), SIZES(2) REAL(C_DOUBLE), ALLOCATABLE, TARGET :: BUFFER(:) INTEGER(INTG) :: READER - INTEGER(INTG) :: myComputationalNodeNumber,nodeDomain,meshComponentNumber + INTEGER(INTG) :: myComputationNodeNumber,nodeDomain,meshComponentNumber ENTERS( "FieldmlInput_FieldNodalParametersUpdate", ERR, ERROR, *999 ) @@ -1312,10 +1312,10 @@ SUBROUTINE FieldmlInput_FieldNodalParametersUpdate( FIELDML_INFO, EVALUATOR_NAME !Default to version 1 of each node derivative (value hardcoded in loop) VERSION_NUMBER = 1 - myComputationalNodeNumber = ComputationalEnvironment_NodeNumberGet(err,error) + myComputationNodeNumber = ComputationEnvironment_NodeNumberGet(err,error) CALL DECOMPOSITION_MESH_COMPONENT_NUMBER_GET(FIELD%DECOMPOSITION,meshComponentNumber,err,error,*999) CALL DECOMPOSITION_NODE_DOMAIN_GET(FIELD%DECOMPOSITION,NODE_NUMBER,meshComponentNumber,nodeDomain,err,error,*999) - IF(nodeDomain==myComputationalNodeNumber) THEN + IF(nodeDomain==myComputationNodeNumber) THEN CALL FIELD_PARAMETER_SET_UPDATE_NODE( FIELD, VARIABLE_TYPE, SET_TYPE, VERSION_NUMBER, & & NO_GLOBAL_DERIV, NODE_NUMBER, COMPONENT_NUMBER, BUFFER( COMPONENT_NUMBER ), ERR, ERROR, *999 ) ENDIF diff --git a/src/fieldml_output_routines.f90 b/src/fieldml_output_routines.f90 index 2e4a2984..68cca8a9 100755 --- a/src/fieldml_output_routines.f90 +++ b/src/fieldml_output_routines.f90 @@ -49,7 +49,7 @@ MODULE FIELDML_OUTPUT_ROUTINES USE BASIS_ROUTINES USE COORDINATE_ROUTINES USE CONSTANTS - USE ComputationEnvironment + USE ComputationRoutines USE FIELD_ROUTINES USE FIELDML_API USE FIELDML_TYPES @@ -1532,7 +1532,7 @@ SUBROUTINE FIELDML_OUTPUT_ADD_FIELD_NODE_DOFS( FIELDML_INFO, BASE_NAME, DOF_FORM LOGICAL, ALLOCATABLE :: IS_NODE_BASED(:) TYPE(C_PTR) :: SIZE_POINTER TYPE(VARYING_STRING) :: ARRAY_LOCATION - INTEGER(INTG) :: myComputationalNodeNumber,nodeDomain,meshComponentNumber + INTEGER(INTG) :: myComputationNodeNumber,nodeDomain,meshComponentNumber ENTERS( "FIELDML_OUTPUT_ADD_FIELD_NODE_DOFS", ERR, ERROR, *999 ) @@ -1629,10 +1629,10 @@ SUBROUTINE FIELDML_OUTPUT_ADD_FIELD_NODE_DOFS( FIELDML_INFO, BASE_NAME, DOF_FORM !Default to version 1 of each node derivative (value hardcoded in loop) VERSION_NUMBER = 1 - myComputationalNodeNumber = ComputationalEnvironment_NodeNumberGet(err,error) + myComputationNodeNumber = ComputationEnvironment_NodeNumberGet(err,error) CALL DECOMPOSITION_MESH_COMPONENT_NUMBER_GET(FIELD%DECOMPOSITION,meshComponentNumber,err,error,*999) CALL DECOMPOSITION_NODE_DOMAIN_GET(FIELD%DECOMPOSITION,I,meshComponentNumber,nodeDomain,err,error,*999) - IF(nodeDomain==myComputationalNodeNumber) THEN + IF(nodeDomain==myComputationNodeNumber) THEN CALL FIELD_PARAMETER_SET_GET_NODE( FIELD, VARIABLE_TYPE, SET_TYPE, VERSION_NUMBER, & & NO_GLOBAL_DERIV, I, FIELD_COMPONENT_NUMBERS(J), DVALUE, ERR, ERROR, *999 ) ENDIF diff --git a/src/finite_elasticity_routines.f90 b/src/finite_elasticity_routines.f90 index e3b3030d..81036fda 100644 --- a/src/finite_elasticity_routines.f90 +++ b/src/finite_elasticity_routines.f90 @@ -26,7 +26,7 @@ !> Auckland, the University of Oxford and King's College, London. !> All Rights Reserved. !> -!> Contributor(s): Kumar Mithraratne, Jack Lee, Alice Hung, Sander Arens +!> Contributor(s): Chris Bradley, Kumar Mithraratne, Jack Lee, Alice Hung, Sander Arens !> !> Alternatively, the contents of this file may be used under the terms of !> either the GNU General Public License Version 2 or later (the "GPL"), or @@ -47,7 +47,7 @@ MODULE FINITE_ELASTICITY_ROUTINES USE BaseRoutines USE BASIS_ROUTINES USE BOUNDARY_CONDITIONS_ROUTINES - USE ComputationEnvironment + USE ComputationRoutines USE Constants USE CONTROL_LOOP_ROUTINES USE ControlLoopAccessRoutines @@ -166,7 +166,7 @@ SUBROUTINE FiniteElasticity_BoundaryConditionsAnalyticCalculate(EQUATIONS_SET,BO !BC stuff INTEGER(INTG),ALLOCATABLE :: INNER_SURFACE_NODES(:),OUTER_SURFACE_NODES(:),TOP_SURFACE_NODES(:),BOTTOM_SURFACE_NODES(:) INTEGER(INTG) :: INNER_NORMAL_XI,OUTER_NORMAL_XI,TOP_NORMAL_XI,BOTTOM_NORMAL_XI,MESH_COMPONENT - INTEGER(INTG) :: myComputationalNodeNumber, DOMAIN_NUMBER, MPI_IERROR + INTEGER(INTG) :: myComputationNodeNumber, DOMAIN_NUMBER, MPI_IERROR REAL(DP) :: PIN,POUT,LAMBDA,DEFORMED_Z LOGICAL :: X_FIXED,Y_FIXED,NODE_EXISTS, X_OKAY,Y_OKAY TYPE(VARYING_STRING) :: LOCAL_ERROR @@ -175,7 +175,7 @@ SUBROUTINE FiniteElasticity_BoundaryConditionsAnalyticCalculate(EQUATIONS_SET,BO ENTERS("FiniteElasticity_BoundaryConditionsAnalyticCalculate",err,error,*999) - myComputationalNodeNumber=ComputationalEnvironment_NodeNumberGet(err,error) + myComputationNodeNumber=ComputationEnvironment_NodeNumberGet(err,error) IF(ASSOCIATED(EQUATIONS_SET)) THEN IF(ASSOCIATED(EQUATIONS_SET%ANALYTIC)) THEN @@ -215,7 +215,7 @@ SUBROUTINE FiniteElasticity_BoundaryConditionsAnalyticCalculate(EQUATIONS_SET,BO user_node=INNER_SURFACE_NODES(node_idx) !Need to test if this node is in current decomposition CALL DECOMPOSITION_NODE_DOMAIN_GET(DECOMPOSITION,user_node,1,DOMAIN_NUMBER,err,error,*999) - IF(DOMAIN_NUMBER==myComputationalNodeNumber) THEN + IF(DOMAIN_NUMBER==myComputationNodeNumber) THEN !Default to version 1 of each node derivative CALL BOUNDARY_CONDITIONS_SET_NODE(BOUNDARY_CONDITIONS,DEPENDENT_FIELD,FIELD_DELUDELN_VARIABLE_TYPE,1,1, & & user_node,ABS(INNER_NORMAL_XI),BOUNDARY_CONDITION_PRESSURE_INCREMENTED,PIN,err,error,*999) @@ -227,7 +227,7 @@ SUBROUTINE FiniteElasticity_BoundaryConditionsAnalyticCalculate(EQUATIONS_SET,BO user_node=OUTER_SURFACE_NODES(node_idx) !Need to test if this node is in current decomposition CALL DECOMPOSITION_NODE_DOMAIN_GET(DECOMPOSITION,user_node,1,DOMAIN_NUMBER,err,error,*999) - IF(DOMAIN_NUMBER==myComputationalNodeNumber) THEN + IF(DOMAIN_NUMBER==myComputationNodeNumber) THEN !Default to version 1 of each node derivative CALL BOUNDARY_CONDITIONS_SET_NODE(BOUNDARY_CONDITIONS,DEPENDENT_FIELD,FIELD_DELUDELN_VARIABLE_TYPE,1,1, & & user_node,ABS(OUTER_NORMAL_XI),BOUNDARY_CONDITION_PRESSURE_INCREMENTED,POUT,err,error,*999) @@ -239,7 +239,7 @@ SUBROUTINE FiniteElasticity_BoundaryConditionsAnalyticCalculate(EQUATIONS_SET,BO user_node=TOP_SURFACE_NODES(node_idx) !Need to test if this node is in current decomposition CALL DECOMPOSITION_NODE_DOMAIN_GET(DECOMPOSITION,user_node,1,DOMAIN_NUMBER,err,error,*999) - IF(DOMAIN_NUMBER==myComputationalNodeNumber) THEN + IF(DOMAIN_NUMBER==myComputationNodeNumber) THEN CALL MeshTopology_NodeCheckExists(MESH,1,user_node,NODE_EXISTS,global_node,err,error,*999) IF(.NOT.NODE_EXISTS) CYCLE CALL DOMAIN_MAPPINGS_GLOBAL_TO_LOCAL_GET(NODES_MAPPING,global_node,NODE_EXISTS,local_node,err,error,*999) @@ -257,7 +257,7 @@ SUBROUTINE FiniteElasticity_BoundaryConditionsAnalyticCalculate(EQUATIONS_SET,BO user_node=BOTTOM_SURFACE_NODES(node_idx) !Need to check this node exists in the current domain CALL DECOMPOSITION_NODE_DOMAIN_GET(DECOMPOSITION,user_node,1,DOMAIN_NUMBER,err,error,*999) - IF(DOMAIN_NUMBER==myComputationalNodeNumber) THEN + IF(DOMAIN_NUMBER==myComputationNodeNumber) THEN !Default to version 1 of each node derivative CALL BOUNDARY_CONDITIONS_SET_NODE(BOUNDARY_CONDITIONS,DEPENDENT_FIELD,FIELD_U_VARIABLE_TYPE,1,1, & & user_node,ABS(BOTTOM_NORMAL_XI),BOUNDARY_CONDITION_FIXED,0.0_DP,err,error,*999) @@ -270,7 +270,7 @@ SUBROUTINE FiniteElasticity_BoundaryConditionsAnalyticCalculate(EQUATIONS_SET,BO DO node_idx=1,SIZE(BOTTOM_SURFACE_NODES,1) user_node=BOTTOM_SURFACE_NODES(node_idx) CALL DECOMPOSITION_NODE_DOMAIN_GET(DECOMPOSITION,user_node,1,DOMAIN_NUMBER,err,error,*999) - IF(DOMAIN_NUMBER==myComputationalNodeNumber) THEN + IF(DOMAIN_NUMBER==myComputationNodeNumber) THEN CALL MeshTopology_NodeCheckExists(MESH,1,user_node,NODE_EXISTS,global_node,err,error,*999) IF(.NOT.NODE_EXISTS) CYCLE CALL DOMAIN_MAPPINGS_GLOBAL_TO_LOCAL_GET(NODES_MAPPING,global_node,NODE_EXISTS,local_node,err,error,*999) @@ -303,9 +303,9 @@ SUBROUTINE FiniteElasticity_BoundaryConditionsAnalyticCalculate(EQUATIONS_SET,BO ENDIF ENDDO !Check it went well - CALL MPI_REDUCE(X_FIXED,X_OKAY,1,MPI_LOGICAL,MPI_LOR,0,computationalEnvironment%mpiCommunicator,MPI_IERROR) - CALL MPI_REDUCE(Y_FIXED,Y_OKAY,1,MPI_LOGICAL,MPI_LOR,0,computationalEnvironment%mpiCommunicator,MPI_IERROR) - IF(myComputationalNodeNumber==0) THEN + CALL MPI_REDUCE(X_FIXED,X_OKAY,1,MPI_LOGICAL,MPI_LOR,0,computationEnvironment%mpiCommunicator,MPI_IERROR) + CALL MPI_REDUCE(Y_FIXED,Y_OKAY,1,MPI_LOGICAL,MPI_LOR,0,computationEnvironment%mpiCommunicator,MPI_IERROR) + IF(myComputationNodeNumber==0) THEN IF(.NOT.(X_OKAY.AND.Y_OKAY)) THEN CALL FlagError("Could not fix nodes to prevent rigid body motion",err,error,*999) ENDIF @@ -422,7 +422,7 @@ SUBROUTINE FiniteElasticity_BoundaryConditionsAnalyticCalculate(EQUATIONS_SET,BO IF(NODE_EXISTS) THEN CALL DECOMPOSITION_NODE_DOMAIN_GET(DECOMPOSITION,user_node, & & DOMAIN_PRESSURE%MESH_COMPONENT_NUMBER,DOMAIN_NUMBER,err,error,*999) - IF(DOMAIN_NUMBER==myComputationalNodeNumber) THEN + IF(DOMAIN_NUMBER==myComputationNodeNumber) THEN !\todo: test the domain node mappings pointer properly local_node=DOMAIN_PRESSURE%mappings%nodes%global_to_local_map(global_node)%local_number(1) !Default to version 1 of each node derivative @@ -12616,7 +12616,7 @@ END SUBROUTINE FiniteElasticity_PreSolveUpdateBoundaryConditions ! !>Evaluates the functions f(J) and f\'(J); - !> Eq.(21) in Chapelle, Gerbeau, Sainte-Marie, Vignon-Clementel, Computational Mechanics (2010) + !> Eq.(21) in Chapelle, Gerbeau, Sainte-Marie, Vignon-Clementel, Computation Mechanics (2010) SUBROUTINE EVALUATE_CHAPELLE_FUNCTION(Jznu,ffact,dfdJfact,err,error,*) !Argument variables diff --git a/src/generated_mesh_routines.f90 b/src/generated_mesh_routines.f90 index bd5f3655..5b7af100 100755 --- a/src/generated_mesh_routines.f90 +++ b/src/generated_mesh_routines.f90 @@ -46,7 +46,7 @@ MODULE GENERATED_MESH_ROUTINES USE BaseRoutines USE BASIS_ROUTINES - USE ComputationEnvironment + USE ComputationRoutines USE CONSTANTS USE COORDINATE_ROUTINES USE FIELD_ROUTINES @@ -3305,7 +3305,7 @@ SUBROUTINE GeneratedMesh_RegularGeometricParametersCalculate(REGULAR_MESH,FIELD, END IF ENDIF END SELECT - !Update geometric parameters in this computational domain only + !Update geometric parameters in this computation domain only DOMAIN=>FIELD_VARIABLE_COMPONENT%DOMAIN DOMAIN_NODES=>DOMAIN%TOPOLOGY%NODES DO component_node=1,TOTAL_NUMBER_OF_NODES_XI(1)*TOTAL_NUMBER_OF_NODES_XI(2)*TOTAL_NUMBER_OF_NODES_XI(3) @@ -3570,7 +3570,7 @@ SUBROUTINE GeneratedMesh_EllipsoidGeometricParametersCalculate(ELLIPSOID_MESH,FI TYPE(DOMAIN_NODES_TYPE), POINTER :: DOMAIN_NODES TYPE(FIELD_VARIABLE_TYPE), POINTER :: FIELD_VARIABLE TYPE(FIELD_VARIABLE_COMPONENT_TYPE), POINTER :: FIELD_VARIABLE_COMPONENT - INTEGER(INTG) :: MY_COMPUTATIONAL_NODE,DOMAIN_NUMBER,MESH_COMPONENT,basis_idx + INTEGER(INTG) :: MY_COMPUTATION_NODE,DOMAIN_NUMBER,MESH_COMPONENT,basis_idx INTEGER(INTG) :: NUMBER_ELEMENTS_XI(3),NUMBER_OF_NODES_XIC(3) INTEGER(INTG) :: TOTAL_NUMBER_NODES_XI(3),INTERPOLATION_TYPES(3) INTEGER(INTG) :: component_idx,xi_idx @@ -3586,7 +3586,7 @@ SUBROUTINE GeneratedMesh_EllipsoidGeometricParametersCalculate(ELLIPSOID_MESH,FI ENTERS("GeneratedMesh_EllipsoidGeometricParametersCalculate",ERR,ERROR,*999) - MY_COMPUTATIONAL_NODE=ComputationalEnvironment_NodeNumberGet(ERR,ERROR) + MY_COMPUTATION_NODE=ComputationEnvironment_NodeNumberGet(ERR,ERROR) ! assign to the field np=0 @@ -3649,7 +3649,7 @@ SUBROUTINE GeneratedMesh_EllipsoidGeometricParametersCalculate(ELLIPSOID_MESH,FI np=1 npg=COMPONENT_NODE_TO_USER_NUMBER(ELLIPSOID_MESH%GENERATED_MESH,basis_idx,np,ERR,ERROR) CALL DECOMPOSITION_NODE_DOMAIN_GET(DECOMPOSITION,npg,MESH_COMPONENT,DOMAIN_NUMBER,ERR,ERROR,*999) - IF(DOMAIN_NUMBER==MY_COMPUTATIONAL_NODE) THEN + IF(DOMAIN_NUMBER==MY_COMPUTATION_NODE) THEN RECT_COORDS(1)=0 RECT_COORDS(2)=0 RECT_COORDS(3)=-ELLIPSOID_EXTENT(1) @@ -3676,7 +3676,7 @@ SUBROUTINE GeneratedMesh_EllipsoidGeometricParametersCalculate(ELLIPSOID_MESH,FI np=np+1 npg=COMPONENT_NODE_TO_USER_NUMBER(ELLIPSOID_MESH%GENERATED_MESH,basis_idx,np,ERR,ERROR) CALL DECOMPOSITION_NODE_DOMAIN_GET(DECOMPOSITION,npg,MESH_COMPONENT,DOMAIN_NUMBER,ERR,ERROR,*999) - IF(DOMAIN_NUMBER==MY_COMPUTATIONAL_NODE) THEN + IF(DOMAIN_NUMBER==MY_COMPUTATION_NODE) THEN DO component_idx=1,FIELD_VARIABLE%NUMBER_OF_COMPONENTS CALL FIELD_PARAMETER_SET_UPDATE_NODE(FIELD,FIELD_U_VARIABLE_TYPE,FIELD_VALUES_SET_TYPE,1,1,npg, & & component_idx,RECT_COORDS(component_idx),ERR,ERROR,*999) @@ -3699,7 +3699,7 @@ SUBROUTINE GeneratedMesh_EllipsoidGeometricParametersCalculate(ELLIPSOID_MESH,FI np=np+1 npg=COMPONENT_NODE_TO_USER_NUMBER(ELLIPSOID_MESH%GENERATED_MESH,basis_idx,np,ERR,ERROR) CALL DECOMPOSITION_NODE_DOMAIN_GET(DECOMPOSITION,npg,MESH_COMPONENT,DOMAIN_NUMBER,ERR,ERROR,*999) - IF(DOMAIN_NUMBER==MY_COMPUTATIONAL_NODE) THEN + IF(DOMAIN_NUMBER==MY_COMPUTATION_NODE) THEN DO component_idx=1,FIELD_VARIABLE%NUMBER_OF_COMPONENTS CALL FIELD_PARAMETER_SET_UPDATE_NODE(FIELD,FIELD_U_VARIABLE_TYPE,FIELD_VALUES_SET_TYPE,1,1,npg, & & component_idx,RECT_COORDS(component_idx),ERR,ERROR,*999) @@ -3730,7 +3730,7 @@ SUBROUTINE GeneratedMesh_EllipsoidGeometricParametersCalculate(ELLIPSOID_MESH,FI np=np+1 npg=COMPONENT_NODE_TO_USER_NUMBER(ELLIPSOID_MESH%GENERATED_MESH,basis_idx,np,ERR,ERROR) CALL DECOMPOSITION_NODE_DOMAIN_GET(DECOMPOSITION,npg,MESH_COMPONENT,DOMAIN_NUMBER,ERR,ERROR,*999) - IF(DOMAIN_NUMBER==MY_COMPUTATIONAL_NODE) THEN + IF(DOMAIN_NUMBER==MY_COMPUTATION_NODE) THEN DO component_idx=1,FIELD_VARIABLE%NUMBER_OF_COMPONENTS CALL FIELD_PARAMETER_SET_UPDATE_NODE(FIELD,FIELD_U_VARIABLE_TYPE,FIELD_VALUES_SET_TYPE,1,1,npg, & & component_idx,RECT_COORDS(component_idx),ERR,ERROR,*999) @@ -3757,7 +3757,7 @@ SUBROUTINE GeneratedMesh_EllipsoidGeometricParametersCalculate(ELLIPSOID_MESH,FI np=np+1 npg=COMPONENT_NODE_TO_USER_NUMBER(ELLIPSOID_MESH%GENERATED_MESH,basis_idx,np,ERR,ERROR) CALL DECOMPOSITION_NODE_DOMAIN_GET(DECOMPOSITION,npg,MESH_COMPONENT,DOMAIN_NUMBER,ERR,ERROR,*999) - IF(DOMAIN_NUMBER==MY_COMPUTATIONAL_NODE) THEN + IF(DOMAIN_NUMBER==MY_COMPUTATION_NODE) THEN DO component_idx=1,FIELD_VARIABLE%NUMBER_OF_COMPONENTS CALL FIELD_PARAMETER_SET_UPDATE_NODE(FIELD,FIELD_U_VARIABLE_TYPE,FIELD_VALUES_SET_TYPE,1,1,npg, & & component_idx,RECT_COORDS(component_idx),ERR,ERROR,*999) @@ -3780,7 +3780,7 @@ SUBROUTINE GeneratedMesh_EllipsoidGeometricParametersCalculate(ELLIPSOID_MESH,FI np=np+1 npg=COMPONENT_NODE_TO_USER_NUMBER(ELLIPSOID_MESH%GENERATED_MESH,basis_idx,np,ERR,ERROR) CALL DECOMPOSITION_NODE_DOMAIN_GET(DECOMPOSITION,npg,MESH_COMPONENT,DOMAIN_NUMBER,ERR,ERROR,*999) - IF(DOMAIN_NUMBER==MY_COMPUTATIONAL_NODE) THEN + IF(DOMAIN_NUMBER==MY_COMPUTATION_NODE) THEN DO component_idx=1,FIELD_VARIABLE%NUMBER_OF_COMPONENTS CALL FIELD_PARAMETER_SET_UPDATE_NODE(FIELD,FIELD_U_VARIABLE_TYPE,FIELD_VALUES_SET_TYPE,1,1,npg, & & component_idx,RECT_COORDS(component_idx),ERR,ERROR,*999) @@ -3807,7 +3807,7 @@ SUBROUTINE GeneratedMesh_EllipsoidGeometricParametersCalculate(ELLIPSOID_MESH,FI np=1 npg=COMPONENT_NODE_TO_USER_NUMBER(ELLIPSOID_MESH%GENERATED_MESH,basis_idx,np,ERR,ERROR) CALL DECOMPOSITION_NODE_DOMAIN_GET(DECOMPOSITION,npg,MESH_COMPONENT,DOMAIN_NUMBER,ERR,ERROR,*999) - IF(DOMAIN_NUMBER==MY_COMPUTATIONAL_NODE) THEN + IF(DOMAIN_NUMBER==MY_COMPUTATION_NODE) THEN RECT_COORDS(1)=0 RECT_COORDS(2)=0 RECT_COORDS(3)=-ELLIPSOID_EXTENT(1) @@ -3833,7 +3833,7 @@ SUBROUTINE GeneratedMesh_EllipsoidGeometricParametersCalculate(ELLIPSOID_MESH,FI np=np+1 npg=COMPONENT_NODE_TO_USER_NUMBER(ELLIPSOID_MESH%GENERATED_MESH,basis_idx,np,ERR,ERROR) CALL DECOMPOSITION_NODE_DOMAIN_GET(DECOMPOSITION,npg,MESH_COMPONENT,DOMAIN_NUMBER,ERR,ERROR,*999) - IF(DOMAIN_NUMBER==MY_COMPUTATIONAL_NODE) THEN + IF(DOMAIN_NUMBER==MY_COMPUTATION_NODE) THEN DO component_idx=1,FIELD_VARIABLE%NUMBER_OF_COMPONENTS CALL FIELD_PARAMETER_SET_UPDATE_NODE(FIELD,FIELD_U_VARIABLE_TYPE,FIELD_VALUES_SET_TYPE,1,1,npg, & & component_idx,RECT_COORDS(component_idx),ERR,ERROR,*999) @@ -3856,7 +3856,7 @@ SUBROUTINE GeneratedMesh_EllipsoidGeometricParametersCalculate(ELLIPSOID_MESH,FI np=np+1 npg=COMPONENT_NODE_TO_USER_NUMBER(ELLIPSOID_MESH%GENERATED_MESH,basis_idx,np,ERR,ERROR) CALL DECOMPOSITION_NODE_DOMAIN_GET(DECOMPOSITION,npg,MESH_COMPONENT,DOMAIN_NUMBER,ERR,ERROR,*999) - IF(DOMAIN_NUMBER==MY_COMPUTATIONAL_NODE) THEN + IF(DOMAIN_NUMBER==MY_COMPUTATION_NODE) THEN DO component_idx=1,FIELD_VARIABLE%NUMBER_OF_COMPONENTS CALL FIELD_PARAMETER_SET_UPDATE_NODE(FIELD,FIELD_U_VARIABLE_TYPE,FIELD_VALUES_SET_TYPE,1,1,npg, & & component_idx,RECT_COORDS(component_idx),ERR,ERROR,*999) @@ -3887,7 +3887,7 @@ SUBROUTINE GeneratedMesh_EllipsoidGeometricParametersCalculate(ELLIPSOID_MESH,FI np=np+1 npg=COMPONENT_NODE_TO_USER_NUMBER(ELLIPSOID_MESH%GENERATED_MESH,basis_idx,np,ERR,ERROR) CALL DECOMPOSITION_NODE_DOMAIN_GET(DECOMPOSITION,npg,MESH_COMPONENT,DOMAIN_NUMBER,ERR,ERROR,*999) - IF(DOMAIN_NUMBER==MY_COMPUTATIONAL_NODE) THEN + IF(DOMAIN_NUMBER==MY_COMPUTATION_NODE) THEN DO component_idx=1,FIELD_VARIABLE%NUMBER_OF_COMPONENTS CALL FIELD_PARAMETER_SET_UPDATE_NODE(FIELD,FIELD_U_VARIABLE_TYPE,FIELD_VALUES_SET_TYPE,1,1,npg, & & component_idx,RECT_COORDS(component_idx),ERR,ERROR,*999) diff --git a/src/mesh_routines.f90 b/src/mesh_routines.f90 index 1547e1ad..4c950cc5 100644 --- a/src/mesh_routines.f90 +++ b/src/mesh_routines.f90 @@ -26,7 +26,7 @@ !> Auckland, the University of Oxford and King's College, London. !> All Rights Reserved. !> -!> Contributor(s): +!> Contributor(s): Chris Bradley !> !> Alternatively, the contents of this file may be used under the terms of !> either the GNU General Public License Version 2 or later (the "GPL"), or @@ -48,7 +48,7 @@ MODULE MESH_ROUTINES USE BASIS_ROUTINES USE CmissMPI USE CMISS_PARMETIS - USE ComputationEnvironment + USE ComputationRoutines USE COORDINATE_ROUTINES USE DataProjectionAccessRoutines USE DOMAIN_MAPPINGS @@ -299,7 +299,7 @@ SUBROUTINE DECOMPOSITION_CREATE_FINISH(DECOMPOSITION,ERR,ERROR,*) CALL DECOMPOSITION_ELEMENT_DOMAIN_CALCULATE(DECOMPOSITION,ERR,ERROR,*999) !Initialise the topology information for this decomposition CALL DECOMPOSITION_TOPOLOGY_INITIALISE(DECOMPOSITION,ERR,ERROR,*999) - !Initialise the domain for this computational node + !Initialise the domain for this computation node CALL DOMAIN_INITIALISE(DECOMPOSITION,ERR,ERROR,*999) !Calculate the decomposition topology CALL DECOMPOSITION_TOPOLOGY_CALCULATE(DECOMPOSITION,ERR,ERROR,*999) @@ -595,8 +595,8 @@ SUBROUTINE DECOMPOSITION_ELEMENT_DOMAIN_CALCULATE(DECOMPOSITION,ERR,ERROR,*) INTEGER(INTG), INTENT(OUT) :: ERR !(MESH%NUMBER_OF_ELEMENTS-ELEMENT_STOP)) & - & ELEMENT_STOP=MESH%NUMBER_OF_ELEMENTS-(number_computational_nodes-1-no_computational_node) + IF((number_computation_nodes-1-no_computation_node)>(MESH%NUMBER_OF_ELEMENTS-ELEMENT_STOP)) & + & ELEMENT_STOP=MESH%NUMBER_OF_ELEMENTS-(number_computation_nodes-1-no_computation_node) IF(ELEMENT_START>MESH%NUMBER_OF_ELEMENTS) ELEMENT_START=MESH%NUMBER_OF_ELEMENTS IF(ELEMENT_STOP>MESH%NUMBER_OF_ELEMENTS) ELEMENT_STOP=MESH%NUMBER_OF_ELEMENTS - DISPLACEMENTS(no_computational_node)=ELEMENT_START-1 - ELEMENT_DISTANCE(no_computational_node+1)=ELEMENT_STOP !C numbering + DISPLACEMENTS(no_computation_node)=ELEMENT_START-1 + ELEMENT_DISTANCE(no_computation_node+1)=ELEMENT_STOP !C numbering NUMBER_OF_ELEMENTS=ELEMENT_STOP-ELEMENT_START+1 - RECEIVE_COUNTS(no_computational_node)=NUMBER_OF_ELEMENTS + RECEIVE_COUNTS(no_computation_node)=NUMBER_OF_ELEMENTS IF(NUMBER_OF_ELEMENTS>MAX_NUMBER_ELEMENTS_PER_NODE) MAX_NUMBER_ELEMENTS_PER_NODE=NUMBER_OF_ELEMENTS - IF(no_computational_node==my_computational_node_number) THEN + IF(no_computation_node==my_computation_node_number) THEN MY_ELEMENT_START=ELEMENT_START MY_ELEMENT_STOP=ELEMENT_STOP MY_NUMBER_OF_ELEMENTS=ELEMENT_STOP-ELEMENT_START+1 @@ -675,7 +675,7 @@ SUBROUTINE DECOMPOSITION_ELEMENT_DOMAIN_CALCULATE(DECOMPOSITION,ERR,ERROR,*) number_elem_indicies=number_elem_indicies+BASIS%NUMBER_OF_NODES ENDDO !ne ENDIF - ENDDO !no_computational_node + ENDDO !no_computation_node ALLOCATE(ELEMENT_PTR(0:MY_NUMBER_OF_ELEMENTS),STAT=ERR) IF(ERR/=0) CALL FlagError("Could not allocate element pointer list.",ERR,ERROR,*999) @@ -721,14 +721,14 @@ SUBROUTINE DECOMPOSITION_ELEMENT_DOMAIN_CALCULATE(DECOMPOSITION,ERR,ERROR,*) !Call ParMETIS to calculate the partitioning of the mesh graph. CALL PARMETIS_PARTMESHKWAY(ELEMENT_DISTANCE,ELEMENT_PTR,ELEMENT_INDICIES,ELEMENT_WEIGHT,WEIGHT_FLAG,NUMBER_FLAG, & & NUMBER_OF_CONSTRAINTS,NUMBER_OF_COMMON_NODES,DECOMPOSITION%NUMBER_OF_DOMAINS,TPWGTS,UBVEC,PARMETIS_OPTIONS, & - & DECOMPOSITION%NUMBER_OF_EDGES_CUT,DECOMPOSITION%ELEMENT_DOMAIN(DISPLACEMENTS(my_computational_node_number)+1:), & - & computationalEnvironment%mpiCommunicator,ERR,ERROR,*999) + & DECOMPOSITION%NUMBER_OF_EDGES_CUT,DECOMPOSITION%ELEMENT_DOMAIN(DISPLACEMENTS(my_computation_node_number)+1:), & + & computationEnvironment%mpiCommunicator,ERR,ERROR,*999) - !Transfer all the element domain information to the other computational nodes so that each rank has all the info - IF(number_computational_nodes>1) THEN + !Transfer all the element domain information to the other computation nodes so that each rank has all the info + IF(number_computation_nodes>1) THEN !This should work on a single processor but doesn't for mpich2 under windows. Maybe a bug? Avoid for now. CALL MPI_ALLGATHERV(MPI_IN_PLACE,MAX_NUMBER_ELEMENTS_PER_NODE,MPI_INTEGER,DECOMPOSITION%ELEMENT_DOMAIN, & - & RECEIVE_COUNTS,DISPLACEMENTS,MPI_INTEGER,computationalEnvironment%mpiCommunicator,MPI_IERROR) + & RECEIVE_COUNTS,DISPLACEMENTS,MPI_INTEGER,computationEnvironment%mpiCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ALLGATHERV",MPI_IERROR,ERR,ERROR,*999) ENDIF @@ -748,28 +748,28 @@ SUBROUTINE DECOMPOSITION_ELEMENT_DOMAIN_CALCULATE(DECOMPOSITION,ERR,ERROR,*) END SELECT !Check decomposition and check that each domain has an element in it. - ALLOCATE(ELEMENT_COUNT(0:number_computational_nodes-1),STAT=ERR) + ALLOCATE(ELEMENT_COUNT(0:number_computation_nodes-1),STAT=ERR) IF(ERR/=0) CALL FlagError("Could not allocate element count.",ERR,ERROR,*999) ELEMENT_COUNT=0 DO elem_index=1,MESH%NUMBER_OF_ELEMENTS - no_computational_node=DECOMPOSITION%ELEMENT_DOMAIN(elem_index) - IF(no_computational_node>=0.AND.no_computational_node=0.AND.no_computation_nodeMESH%TOPOLOGY(DECOMPOSITION%MESH_COMPONENT_NUMBER)%PTR IF(ASSOCIATED(MESH_TOPOLOGY)) THEN IF(GLOBAL_ELEMENT_NUMBER>0.AND.GLOBAL_ELEMENT_NUMBER<=MESH_TOPOLOGY%ELEMENTS%NUMBER_OF_ELEMENTS) THEN - number_computational_nodes=ComputationalEnvironment_NumberOfNodesGet(ERR,ERROR) + number_computation_nodes=ComputationEnvironment_NumberOfNodesGet(ERR,ERROR) IF(ERR/=0) GOTO 999 - IF(DOMAIN_NUMBER>=0.AND.DOMAIN_NUMBER=0.AND.DOMAIN_NUMBER=1) THEN !wolfye???<=? IF(NUMBER_OF_DOMAINS<=DECOMPOSITION%numberOfElements) THEN - !Get the number of computational nodes - numberOfComputationalNodes=ComputationalEnvironment_NumberOfNodesGet(ERR,ERROR) + !Get the number of computation nodes + numberOfComputationNodes=ComputationEnvironment_NumberOfNodesGet(ERR,ERROR) IF(ERR/=0) GOTO 999 !!TODO: relax this later - !IF(NUMBER_OF_DOMAINS==numberOfComputationalNodes) THEN + !IF(NUMBER_OF_DOMAINS==numberOfComputationNodes) THEN DECOMPOSITION%NUMBER_OF_DOMAINS=NUMBER_OF_DOMAINS !ELSE ! LOCAL_ERROR="The number of domains ("//TRIM(NUMBER_TO_VSTRING(NUMBER_OF_DOMAINSS,"*",ERR,ERROR))// & - ! & ") is not equal to the number of computational nodes ("// & - ! & TRIM(NUMBER_TO_VSTRING(numberOfComputationalNodes,"*",ERR,ERROR))//")" + ! & ") is not equal to the number of computation nodes ("// & + ! & TRIM(NUMBER_TO_VSTRING(numberOfComputationNodes,"*",ERR,ERROR))//")" ! CALL FlagError(LOCAL_ERROR,ERR,ERROR,*999) !ENDIF ELSE @@ -1275,7 +1275,7 @@ SUBROUTINE DecompositionTopology_DataPointsCalculate(TOPOLOGY,ERR,ERROR,*) TYPE(VARYING_STRING), INTENT(OUT) :: ERROR !decomposition%MESH%TOPOLOGY(meshComponentNumber)%PTR%dataPoints IF(ASSOCIATED(meshData)) THEN - NUMBER_OF_COMPUTATIONAL_NODES=ComputationalEnvironment_NumberOfNodesGet(ERR,ERROR) + NUMBER_OF_COMPUTATION_NODES=ComputationEnvironment_NumberOfNodesGet(ERR,ERROR) IF(ERR/=0) GOTO 999 - myComputationalNodeNumber=ComputationalEnvironment_NodeNumberGet(ERR,ERROR) + myComputationNodeNumber=ComputationEnvironment_NodeNumberGet(ERR,ERROR) IF(ERR/=0) GOTO 999 - ALLOCATE(decompositionData%numberOfDomainLocal(0:NUMBER_OF_COMPUTATIONAL_NODES-1),STAT=ERR) - ALLOCATE(decompositionData%numberOfDomainGhost(0:NUMBER_OF_COMPUTATIONAL_NODES-1),STAT=ERR) + ALLOCATE(decompositionData%numberOfDomainLocal(0:NUMBER_OF_COMPUTATION_NODES-1),STAT=ERR) + ALLOCATE(decompositionData%numberOfDomainGhost(0:NUMBER_OF_COMPUTATION_NODES-1),STAT=ERR) ALLOCATE(decompositionData%numberOfElementDataPoints(decompositionElements%NUMBER_OF_GLOBAL_ELEMENTS),STAT=ERR) ALLOCATE(decompositionData%elementDataPoint(decompositionElements%TOTAL_NUMBER_OF_ELEMENTS),STAT=ERR) IF(ERR/=0) CALL FlagError("Could not allocate decomposition element data points.",ERR,ERROR,*999) @@ -1340,16 +1340,16 @@ SUBROUTINE DecompositionTopology_DataPointsCalculate(TOPOLOGY,ERR,ERROR,*) & INSERT_STATUS,ERR,ERROR,*999) ENDDO !dataPointIdx ENDDO !localElement - !Calculate number of ghost data points on the current computational domain + !Calculate number of ghost data points on the current computation domain NUMBER_OF_LOCAL_DATA=decompositionData%numberOfDataPoints NUMBER_OF_GHOST_DATA=decompositionData%totalNumberOfDataPoints-decompositionData%numberOfDataPoints - !Gather number of local data points on all computational nodes + !Gather number of local data points on all computation nodes CALL MPI_ALLGATHER(NUMBER_OF_LOCAL_DATA,1,MPI_INTEGER,decompositionData% & - & numberOfDomainLocal,1,MPI_INTEGER,computationalEnvironment%mpiCommunicator,MPI_IERROR) + & numberOfDomainLocal,1,MPI_INTEGER,computationEnvironment%mpiCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ALLGATHER",MPI_IERROR,ERR,ERROR,*999) - !Gather number of ghost data points on all computational nodes + !Gather number of ghost data points on all computation nodes CALL MPI_ALLGATHER(NUMBER_OF_GHOST_DATA,1,MPI_INTEGER,decompositionData% & - & numberOfDomainGhost,1,MPI_INTEGER,computationalEnvironment%mpiCommunicator,MPI_IERROR) + & numberOfDomainGhost,1,MPI_INTEGER,computationEnvironment%mpiCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ALLGATHER",MPI_IERROR,ERR,ERROR,*999) ELSE CALL FlagError("Mesh data points topology is not associated.",ERR,ERROR,*999) @@ -4050,7 +4050,7 @@ SUBROUTINE DOMAIN_MAPPINGS_ELEMENTS_CALCULATE(DOMAIN,ERR,ERROR,*) TYPE(VARYING_STRING), INTENT(OUT) :: ERROR !DOMAIN%MESH component_idx=DOMAIN%MESH_COMPONENT_NUMBER - myComputationalNodeNumber=ComputationalEnvironment_NodeNumberGet(ERR,ERROR) + myComputationNodeNumber=ComputationEnvironment_NodeNumberGet(ERR,ERROR) IF(ERR/=0) GOTO 999 !Calculate the local and global numbers and set up the mappings @@ -4097,7 +4097,7 @@ SUBROUTINE DOMAIN_MAPPINGS_ELEMENTS_CALCULATE(DOMAIN,ERR,ERROR,*) !Calculate the local numbers domain_no=DECOMPOSITION%ELEMENT_DOMAIN(ne) LOCAL_ELEMENT_NUMBERS(domain_no)=LOCAL_ELEMENT_NUMBERS(domain_no)+1 - !Calculate the adjacent elements to the computational domains and the adjacent domain numbers themselves + !Calculate the adjacent elements to the computation domains and the adjacent domain numbers themselves BASIS=>MESH%TOPOLOGY(component_idx)%PTR%ELEMENTS%ELEMENTS(ne)%BASIS NULLIFY(ADJACENT_DOMAINS_LIST) CALL LIST_CREATE_START(ADJACENT_DOMAINS_LIST,ERR,ERROR,*999) @@ -4132,7 +4132,7 @@ SUBROUTINE DOMAIN_MAPPINGS_ELEMENTS_CALCULATE(DOMAIN,ERR,ERROR,*) !Element is an internal element ELEMENTS_MAPPING%GLOBAL_TO_LOCAL_MAP(ne)%LOCAL_TYPE(1)=DOMAIN_LOCAL_INTERNAL ELSE - !Element is on the boundary of computational domains + !Element is on the boundary of computation domains ELEMENTS_MAPPING%GLOBAL_TO_LOCAL_MAP(ne)%LOCAL_TYPE(1)=DOMAIN_LOCAL_BOUNDARY ENDIF ENDDO !ne @@ -4407,9 +4407,9 @@ SUBROUTINE DOMAIN_MAPPINGS_NODES_DOFS_CALCULATE(DOMAIN,ERR,ERROR,*) INTEGER(INTG), INTENT(OUT) :: ERR !MESH%TOPOLOGY(component_idx)%PTR - numberOfComputationalNodes=ComputationalEnvironment_NumberOfNodesGet(ERR,ERROR) + numberOfComputationNodes=ComputationEnvironment_NumberOfNodesGet(ERR,ERROR) IF(ERR/=0) GOTO 999 - myComputationalNodeNumber=ComputationalEnvironment_NodeNumberGet(ERR,ERROR) + myComputationNodeNumber=ComputationEnvironment_NodeNumberGet(ERR,ERROR) IF(ERR/=0) GOTO 999 !Calculate the local and global numbers and set up the mappings @@ -4551,7 +4551,7 @@ SUBROUTINE DOMAIN_MAPPINGS_NODES_DOFS_CALCULATE(DOMAIN,ERR,ERROR,*) ENDDO !version_idx ENDDO !derivative_idx ELSE - !Node is on the boundary of computational domains + !Node is on the boundary of computation domains NODES_MAPPING%GLOBAL_TO_LOCAL_MAP(node_idx)%NUMBER_OF_DOMAINS=NUMBER_OF_DOMAINS DO derivative_idx=1,MESH_TOPOLOGY%NODES%NODES(node_idx)%numberOfDerivatives DO version_idx=1,MESH_TOPOLOGY%NODES%NODES(node_idx)%DERIVATIVES(derivative_idx)%numberOfVersions @@ -4677,29 +4677,29 @@ SUBROUTINE DOMAIN_MAPPINGS_NODES_DOFS_CALCULATE(DOMAIN,ERR,ERROR,*) ENDDO !domain_idx !Check decomposition and check that each domain has a node in it. - ALLOCATE(NODE_COUNT(0:numberOfComputationalNodes-1),STAT=ERR) + ALLOCATE(NODE_COUNT(0:numberOfComputationNodes-1),STAT=ERR) IF(ERR/=0) CALL FlagError("Could not allocate node count.",ERR,ERROR,*999) NODE_COUNT=0 DO node_idx=1,MESH_TOPOLOGY%NODES%numberOfNodes - no_computational_node=DOMAIN%NODE_DOMAIN(node_idx) - IF(no_computational_node>=0.AND.no_computational_node=0.AND.no_computation_node Auckland, the University of Oxford and King's College, London. !> All Rights Reserved. !> -!> Contributor(s): +!> Contributor(s): Chris Bradley !> !> Alternatively, the contents of this file may be used under the terms of !> either the GNU General Public License Version 2 or later (the "GPL"), or @@ -64,7 +64,7 @@ MODULE OpenCMISS_Iron USE Cmiss USE CmissPetsc USE CMISS_CELLML - USE ComputationEnvironment + USE ComputationRoutines USE Constants USE CONTROL_LOOP_ROUTINES USE ControlLoopAccessRoutines @@ -248,14 +248,14 @@ MODULE OpenCMISS_Iron TYPE(InterfacePointsConnectivityType), POINTER :: pointsConnectivity END TYPE cmfe_InterfacePointsConnectivityType - !>A matrix that may be distributed across multiple computational nodes + !>A matrix that may be distributed across multiple computation nodes !>and may use sparse or full storage. TYPE cmfe_DistributedMatrixType PRIVATE TYPE(DISTRIBUTED_MATRIX_TYPE), POINTER :: distributedMatrix END TYPE cmfe_DistributedMatrixType - !>A vector that may be distributed across multiple computational nodes + !>A vector that may be distributed across multiple computation nodes TYPE cmfe_DistributedVectorType PRIVATE TYPE(DISTRIBUTED_VECTOR_TYPE), POINTER :: distributedVector @@ -321,11 +321,11 @@ MODULE OpenCMISS_Iron TYPE(SOLVER_EQUATIONS_TYPE), POINTER :: solverEquations END TYPE cmfe_SolverEquationsType - !>Contains information on a computational work group - TYPE cmfe_ComputationalWorkGroupType + !>Contains information on a computation work group + TYPE cmfe_ComputationWorkGroupType PRIVATE - TYPE(ComputationalWorkGroupType), POINTER :: computationalWorkGroup - END TYPE cmfe_ComputationalWorkGroupType + TYPE(ComputationWorkGroupType), POINTER :: computationWorkGroup + END TYPE cmfe_ComputationWorkGroupType !Module variables @@ -360,7 +360,7 @@ MODULE OpenCMISS_Iron PUBLIC cmfe_CellMLEquationsType,cmfe_CellMLEquations_Finalise,cmfe_CellMLEquations_Initialise - PUBLIC cmfe_ComputationalWorkGroupType,cmfe_ComputationalWorkGroup_Initialise + PUBLIC cmfe_ComputationWorkGroupType,cmfe_ComputationWorkGroup_Initialise PUBLIC cmfe_ControlLoopType,cmfe_ControlLoop_Finalise,cmfe_ControlLoop_Initialise,cmfe_ControlLoop_LoadOutputSet @@ -1258,7 +1258,7 @@ MODULE OpenCMISS_Iron !!================================================================================================================================== !! -!! ComputationalEnvironment +!! ComputationEnvironment !! !!================================================================================================================================== @@ -1270,17 +1270,17 @@ MODULE OpenCMISS_Iron !Interfaces - PUBLIC cmfe_ComputationalWorldCommunicatorGet,cmfe_ComputationalWorldCommunicatorSet + PUBLIC cmfe_ComputationWorldCommunicatorGet,cmfe_ComputationWorldCommunicatorSet - PUBLIC cmfe_ComputationalNodeNumberGet + PUBLIC cmfe_ComputationNodeNumberGet - PUBLIC cmfe_ComputationalNumberOfNodesGet + PUBLIC cmfe_ComputationNumberOfNodesGet - PUBLIC cmfe_ComputationalWorkGroup_CreateStart + PUBLIC cmfe_Computation_WorkGroupCreateStart - PUBLIC cmfe_ComputationalWorkGroup_CreateFinish + PUBLIC cmfe_Computation_WorkGroupCreateFinish - PUBLIC cmfe_ComputationalWorkGroup_SubgroupAdd + PUBLIC cmfe_Computation_WorkGroupSubgroupAdd PUBLIC cmfe_Decomposition_WorldWorkGroupSet @@ -1835,7 +1835,7 @@ MODULE OpenCMISS_Iron INTEGER(INTG), PARAMETER :: CMFE_DATA_PROJECTION_EXIT_TAG_CONVERGED = DATA_PROJECTION_EXIT_TAG_CONVERGED !@} !> \addtogroup OPENCMISS_DataProjectionDistanceRelations OpenCMISS::Iron::DataProjection::DataProjectionDistanceRelations !> \brief Datapoint projection distance relations to select data points based on distance. @@ -5599,7 +5599,7 @@ MODULE OpenCMISS_Iron MODULE PROCEDURE cmfe_DistributedMatrix_DataTypeGetObj END INTERFACE cmfe_DistributedMatrix_DataTypeGet - !>Get the dimensions for a distributed matrix on this computational node + !>Get the dimensions for a distributed matrix on this computation node INTERFACE cmfe_DistributedMatrix_DimensionsGet MODULE PROCEDURE cmfe_DistributedMatrix_DimensionsGetObj END INTERFACE cmfe_DistributedMatrix_DimensionsGet @@ -5609,7 +5609,7 @@ MODULE OpenCMISS_Iron MODULE PROCEDURE cmfe_DistributedMatrix_StorageLocationsGetObj END INTERFACE cmfe_DistributedMatrix_StorageLocationsGet - !>Get the data array for this matrix on this computational node + !>Get the data array for this matrix on this computation node INTERFACE cmfe_DistributedMatrix_DataGet MODULE PROCEDURE cmfe_DistributedMatrix_DataGetIntgObj MODULE PROCEDURE cmfe_DistributedMatrix_DataGetDPObj @@ -5630,7 +5630,7 @@ MODULE OpenCMISS_Iron MODULE PROCEDURE cmfe_DistributedVector_DataTypeGetObj END INTERFACE cmfe_DistributedVector_DataTypeGet - !>Get the data array for this vector on this computational node + !>Get the data array for this vector on this computation node INTERFACE cmfe_DistributedVector_DataGet MODULE PROCEDURE cmfe_DistributedVector_DataGetIntgObj MODULE PROCEDURE cmfe_DistributedVector_DataGetDPObj @@ -8081,26 +8081,26 @@ END SUBROUTINE cmfe_CellMLEquations_Initialise !================================================================================================================================ ! - !>Initialises a cmfe_ComputationalWorkGroupType object. - SUBROUTINE cmfe_ComputationalWorkGroup_Initialise(cmfe_ComputationalWorkGroup,err) - !DLLEXPORT(cmfe_ComputationalWorkGroup_Initialise) + !>Initialises a cmfe_ComputationWorkGroupType object. + SUBROUTINE cmfe_ComputationWorkGroup_Initialise(cmfe_ComputationWorkGroup,err) + !DLLEXPORT(cmfe_ComputationWorkGroup_Initialise) !Argument variables - TYPE(cmfe_ComputationalWorkGroupType), INTENT(OUT) :: cmfe_ComputationalWorkGroup !Returns the current world communicator. - SUBROUTINE cmfe_ComputationalWorldCommunicatorGet(worldCommunicator,err) - !DLLEXPORT(cmfe_ComputationalWorldCommunicatorGet) + SUBROUTINE cmfe_ComputationWorldCommunicatorGet(worldCommunicator,err) + !DLLEXPORT(cmfe_ComputationWorldCommunicatorGet) !Argument variables INTEGER(INTG), INTENT(OUT) :: worldCommunicator !Sets/changes the current world communicator. - SUBROUTINE cmfe_ComputationalWorldCommunicatorSet(worldCommunicator,err) - !DLLEXPORT(cmfe_ComputationalWorldCommunicatorSet) + SUBROUTINE cmfe_ComputationWorldCommunicatorSet(worldCommunicator,err) + !DLLEXPORT(cmfe_ComputationWorldCommunicatorSet) !Argument variables INTEGER(INTG), INTENT(IN) :: worldCommunicator !Returns the computational node number of the running process. - SUBROUTINE cmfe_ComputationalNodeNumberGet(nodeNumber,err) - !DLLEXPORT(cmfe_ComputationalNodeNumberGet) + !>Returns the computation node number of the running process. + SUBROUTINE cmfe_ComputationNodeNumberGet(nodeNumber,err) + !DLLEXPORT(cmfe_ComputationNodeNumberGet) !Argument variables - INTEGER(INTG), INTENT(OUT) :: nodeNumber !Returns the number of computational nodes for the running process. - SUBROUTINE cmfe_ComputationalNumberOfNodesGet(numberOfNodes,err) - !DLLEXPORT(cmfe_ComputationalNumberOfNodesGet) + !>Returns the number of computation nodes for the running process. + SUBROUTINE cmfe_ComputationNumberOfNodesGet(numberOfNodes,err) + !DLLEXPORT(cmfe_ComputationNumberOfNodesGet) !Argument variables - INTEGER(INTG), INTENT(OUT) :: numberOfNodes !CREATE THE HIGHEST LEVEL WORK GROUP (DEFAULT: GROUP_WORLD) - SUBROUTINE cmfe_ComputationalWorkGroup_CreateStart(worldWorkGroup, numberComputationalNodes, err) - !DLLEXPORT(cmfe_ComputationalWorkGroup_CreateStart) + !>Start the creation of a computation work group + SUBROUTINE cmfe_Computation_WorkGroupCreateStart(worldWorkGroup,numberComputationNodes,err) + !DLLEXPORT(cmfe_Computation_WorkGroupCreateStart) !Argument Variables - TYPE(cmfe_ComputationalWorkGroupType), INTENT(INOUT) :: worldWorkGroup - INTEGER(INTG),INTENT(IN) :: numberComputationalNodes + TYPE(cmfe_ComputationWorkGroupType), INTENT(INOUT) :: worldWorkGroup + INTEGER(INTG),INTENT(IN) :: numberComputationNodes INTEGER(INTG), INTENT(OUT) :: err !GENERATE THE HIERARCHY COMPUTATIONAL ENVIRONMENT BASED ON WORK GROUP TREE - SUBROUTINE cmfe_ComputationalWorkGroup_CreateFinish(worldWorkGroup, err) - !DLLEXPORT(cmfe_ComputationalWorkGroup_CreateFinish) + !>Finish the creation of a computation work group + SUBROUTINE cmfe_Computation_WorkGroupCreateFinish(worldWorkGroup, err) + !DLLEXPORT(cmfe_Computation_WorkGroupCreateFinish) !Argument Variables - TYPE(cmfe_ComputationalWorkGroupType), INTENT(INOUT) :: worldWorkGroup + TYPE(cmfe_ComputationWorkGroupType), INTENT(INOUT) :: worldWorkGroup INTEGER(INTG), INTENT(OUT) :: err !ADD WORK SUB-GROUP TO THE PARENT GROUP BASED ON THE COMPUTATIONAL REQUIREMENTS (CALLED BY THE USER) - SUBROUTINE cmfe_ComputationalWorkGroup_SubgroupAdd(parentWorkGroup, numberComputationalNodes,addedWorkGroup, err) - !DLLEXPORT(cmfe_ComputationalWorkGroup_SubgroupAdd) + !>Add a work sub-group to the parent work group based on the computational requirements + SUBROUTINE cmfe_Computation_WorkGroupSubGroupAdd(parentWorkGroup,numberComputationNodes,addedWorkGroup,err) + !DLLEXPORT(cmfe_Computation_WorkGroupSubGroupAdd) !Argument Variables - TYPE(cmfe_ComputationalWorkGroupType), INTENT(INOUT) :: parentWorkGroup - TYPE(cmfe_ComputationalWorkGroupType), INTENT(INOUT) :: addedWorkGroup - INTEGER(INTG),INTENT(IN) :: numberComputationalNodes + TYPE(cmfe_ComputationWorkGroupType), INTENT(INOUT) :: parentWorkGroup + TYPE(cmfe_ComputationWorkGroupType), INTENT(INOUT) :: addedWorkGroup + INTEGER(INTG),INTENT(IN) :: numberComputationNodes INTEGER(INTG), INTENT(OUT) :: err !Get the dimensions of a distributed matrix on this computational node + !>Get the dimensions of a distributed matrix on this computation node SUBROUTINE cmfe_DistributedMatrix_DimensionsGetObj(matrix,m,n,err) !DLLEXPORT(cmfe_DistributedMatrix_DimensionsGetObj) !Argument variables TYPE(cmfe_DistributedMatrixType), INTENT(IN) :: matrix !Get the data array for this matrix on this computational node + !>Get the data array for this matrix on this computation node SUBROUTINE cmfe_DistributedMatrix_DataGetIntgObj(matrix,data,err) !DLLEXPORT(cmfe_DistributedMatrix_DataGetIntgObj) @@ -45482,7 +45483,7 @@ END SUBROUTINE cmfe_DistributedMatrix_DataRestoreIntgObj !================================================================================================================================ ! - !>Get the data array for this matrix on this computational node + !>Get the data array for this matrix on this computation node SUBROUTINE cmfe_DistributedMatrix_DataGetDPObj(matrix,data,err) !DLLEXPORT(cmfe_DistributedMatrix_DataGetDPObj) @@ -45534,7 +45535,7 @@ END SUBROUTINE cmfe_DistributedMatrix_DataRestoreDPObj !================================================================================================================================ ! - !>Get the data array for this matrix on this computational node + !>Get the data array for this matrix on this computation node SUBROUTINE cmfe_DistributedMatrix_DataGetSPObj(matrix,data,err) !DLLEXPORT(cmfe_DistributedMatrix_DataGetSPObj) @@ -45586,7 +45587,7 @@ END SUBROUTINE cmfe_DistributedMatrix_DataRestoreSPObj !================================================================================================================================ ! - !>Get the data array for this matrix on this computational node + !>Get the data array for this matrix on this computation node SUBROUTINE cmfe_DistributedMatrix_DataGetLObj(matrix,data,err) !DLLEXPORT(cmfe_DistributedMatrix_DataGetLObj) @@ -45664,7 +45665,7 @@ END SUBROUTINE cmfe_DistributedVector_DataTypeGetObj !================================================================================================================================ ! - !>Get the data array for this vector on this computational node + !>Get the data array for this vector on this computation node SUBROUTINE cmfe_DistributedVector_DataGetIntgObj(vector,data,err) !DLLEXPORT(cmfe_DistributedVector_DataGetIntgObj) @@ -45716,7 +45717,7 @@ END SUBROUTINE cmfe_DistributedVector_DataRestoreIntgObj !================================================================================================================================ ! - !>Get the data array for this vector on this computational node + !>Get the data array for this vector on this computation node SUBROUTINE cmfe_DistributedVector_DataGetDPObj(vector,data,err) !DLLEXPORT(cmfe_DistributedVector_DataGetDPObj) @@ -45768,7 +45769,7 @@ END SUBROUTINE cmfe_DistributedVector_DataRestoreDPObj !================================================================================================================================ ! - !>Get the data array for this vector on this computational node + !>Get the data array for this vector on this computation node SUBROUTINE cmfe_DistributedVector_DataGetSPObj(vector,data,err) !DLLEXPORT(cmfe_DistributedVector_DataGetSPObj) @@ -45820,7 +45821,7 @@ END SUBROUTINE cmfe_DistributedVector_DataRestoreSPObj !================================================================================================================================ ! - !>Get the data array for this vector on this computational node + !>Get the data array for this vector on this computation node SUBROUTINE cmfe_DistributedVector_DataGetLObj(vector,data,err) !DLLEXPORT(cmfe_DistributedVector_DataGetLObj) diff --git a/src/reaction_diffusion_IO_routines.f90 b/src/reaction_diffusion_IO_routines.f90 index 148f4cd7..ab719a46 100755 --- a/src/reaction_diffusion_IO_routines.f90 +++ b/src/reaction_diffusion_IO_routines.f90 @@ -27,7 +27,7 @@ !> Auckland, the University of Oxford and King's College, London. !> All Rights Reserved. !> -!> Contributor(s): +!> Contributor(s): Vijay Rajagopal !> !> Alternatively, the contents of this file may be used under the terms of !> either the GNU General Public License Version 2 or later (the "GPL"), or @@ -47,7 +47,7 @@ MODULE REACTION_DIFFUSION_IO_ROUTINES USE BaseRoutines - USE ComputationEnvironment + USE ComputationRoutines USE EQUATIONS_SET_CONSTANTS USE FIELD_ROUTINES USE FieldAccessRoutines @@ -90,10 +90,10 @@ SUBROUTINE REACTION_DIFFUSION_IO_WRITE_CMGUI(REGION, EQUATIONS_SET_GLOBAL_NUMBER !Local Variables TYPE(EQUATIONS_SET_TYPE), POINTER :: EQUATIONS_SET - TYPE(DOMAIN_TYPE), POINTER :: COMPUTATIONAL_DOMAIN + TYPE(DOMAIN_TYPE), POINTER :: COMPUTATION_DOMAIN TYPE(FIELD_TYPE), POINTER :: SOURCE_FIELD REAL(DP) :: NodeXValue,NodeYValue,NodeZValue,NodeUValue - INTEGER(INTG):: myComputationalNodeNumber,NumberOfOutputFields,NumberOfDimensions,NumberOfElements,NumberOfNodes + INTEGER(INTG):: myComputationNodeNumber,NumberOfOutputFields,NumberOfDimensions,NumberOfElements,NumberOfNodes INTEGER(INTG):: NumberOfVariableComponents,NumberOfSourceComponents,I,J,K,ValueIndex,NODE_GLOBAL_NUMBER INTEGER(INTG) :: NodesInMeshComponent,BasisType,MaxNodesPerElement,NumberOfFieldComponents(3),ELEMENT_GLOBAL_NUMBER INTEGER(INTG) :: NODE_LOCAL_NUMBER @@ -106,18 +106,18 @@ SUBROUTINE REACTION_DIFFUSION_IO_WRITE_CMGUI(REGION, EQUATIONS_SET_GLOBAL_NUMBER ENTERS("REACTION_DIFFUSION_IO_WRITE_CMGUI",ERR,ERROR,*999) - myComputationalNodeNumber = ComputationalEnvironment_NodeNumberGet(err,error) + myComputationNodeNumber = ComputationEnvironment_NodeNumberGet(err,error) EQUATIONS_SET => REGION%equations_sets%equations_sets(EQUATIONS_SET_GLOBAL_NUMBER)%ptr NULLIFY(SOURCE_FIELD) - COMPUTATIONAL_DOMAIN=>REGION%MESHES%MESHES(1) & + COMPUTATION_DOMAIN=>REGION%MESHES%MESHES(1) & & %ptr%DECOMPOSITIONS%DECOMPOSITIONS(1)%ptr%DOMAIN(1)%ptr - myComputationalNodeNumber = ComputationalEnvironment_NodeNumberGet(ERR,ERROR) - NumberOfDimensions = COMPUTATIONAL_DOMAIN%NUMBER_OF_DIMENSIONS - NumberOfNodes = COMPUTATIONAL_DOMAIN%TOPOLOGY%NODES%NUMBER_OF_NODES + myComputationNodeNumber = ComputationEnvironment_NodeNumberGet(ERR,ERROR) + NumberOfDimensions = COMPUTATION_DOMAIN%NUMBER_OF_DIMENSIONS + NumberOfNodes = COMPUTATION_DOMAIN%TOPOLOGY%NODES%NUMBER_OF_NODES NodesInMeshComponent = REGION%meshes%meshes(1)%ptr%topology(1)%ptr%nodes%numberOfNodes - NumberOfElements = COMPUTATIONAL_DOMAIN%TOPOLOGY%ELEMENTS%NUMBER_OF_ELEMENTS + NumberOfElements = COMPUTATION_DOMAIN%TOPOLOGY%ELEMENTS%NUMBER_OF_ELEMENTS NumberOfVariableComponents=REGION%equations_sets%equations_sets(EQUATIONS_SET_GLOBAL_NUMBER)%ptr%dependent%dependent_field% & & variables(1)%number_of_components NumberOfOutputFields=2 @@ -142,50 +142,50 @@ SUBROUTINE REACTION_DIFFUSION_IO_WRITE_CMGUI(REGION, EQUATIONS_SET_GLOBAL_NUMBER FILENAME="./output/"//NAME//".exnode" - OPEN(UNIT=myComputationalNodeNumber, FILE=CHAR(FILENAME),STATUS='unknown') + OPEN(UNIT=myComputationNodeNumber, FILE=CHAR(FILENAME),STATUS='unknown') ! WRITING HEADER INFORMATION - WRITE(myComputationalNodeNumber,*) 'Group name: Cell' + WRITE(myComputationNodeNumber,*) 'Group name: Cell' WRITE(INTG_STRING,'(I0)'),NumberOfOutputFields - WRITE(myComputationalNodeNumber,*) '#Fields=',TRIM(INTG_STRING) + WRITE(myComputationNodeNumber,*) '#Fields=',TRIM(INTG_STRING) ValueIndex=1 WRITE(INTG_STRING,'(I0)'),NumberOfDimensions - WRITE(myComputationalNodeNumber,*) & + WRITE(myComputationNodeNumber,*) & & ' 1) coordinates, coordinate, rectangular cartesian, #Components=',TRIM(INTG_STRING) DO I=1,NumberOfDimensions IF(I==1) THEN WRITE(INTG_STRING,'(I0)'),ValueIndex - WRITE(myComputationalNodeNumber,*) ' x. Value index= ',TRIM(INTG_STRING),', #Derivatives= 0' + WRITE(myComputationNodeNumber,*) ' x. Value index= ',TRIM(INTG_STRING),', #Derivatives= 0' ELSE IF(I==2) THEN WRITE(INTG_STRING,'(I0)'),ValueIndex - WRITE(myComputationalNodeNumber,*) ' y. Value index= ',TRIM(INTG_STRING),', #Derivatives= 0' + WRITE(myComputationNodeNumber,*) ' y. Value index= ',TRIM(INTG_STRING),', #Derivatives= 0' ELSE WRITE(INTG_STRING,'(I0)'),ValueIndex - WRITE(myComputationalNodeNumber,*) ' z. Value index= ',TRIM(INTG_STRING),', #Derivatives= 0' + WRITE(myComputationNodeNumber,*) ' z. Value index= ',TRIM(INTG_STRING),', #Derivatives= 0' END IF ValueIndex=ValueIndex+1 END DO WRITE(INTG_STRING,'(I0)'),NumberOfVariableComponents - WRITE(myComputationalNodeNumber,*) ' 2) dependent, field, rectangular cartesian, #Components=', & + WRITE(myComputationNodeNumber,*) ' 2) dependent, field, rectangular cartesian, #Components=', & & TRIM(INTG_STRING) DO I=1,NumberOfVariableComponents WRITE(INTG_STRING,'(I0)'),ValueIndex WRITE(INTG_STRING2,'(I0)'),I - WRITE(myComputationalNodeNumber,*) ' ',TRIM(INTG_STRING2),'. Value index= ',TRIM(INTG_STRING), & + WRITE(myComputationNodeNumber,*) ' ',TRIM(INTG_STRING2),'. Value index= ',TRIM(INTG_STRING), & & ', #Derivatives= 0' ValueIndex=ValueIndex+1 END DO IF( OUTPUT_SOURCE ) THEN !Watch out that no numbering conflict occurs with Analytic: 4.) WRITE(INTG_STRING,'(I0)'),NumberOfSourceComponents - WRITE(myComputationalNodeNumber,*) ' 3) source, field, rectangular cartesian, #Components=', & + WRITE(myComputationNodeNumber,*) ' 3) source, field, rectangular cartesian, #Components=', & & TRIM(INTG_STRING) DO I=1,NumberOfSourceComponents WRITE(INTG_STRING,'(I0)'),ValueIndex WRITE(INTG_STRING2,'(I0)'),I - WRITE(myComputationalNodeNumber,*) ' ',TRIM(INTG_STRING2),'. Value index= ', & + WRITE(myComputationNodeNumber,*) ' ',TRIM(INTG_STRING2),'. Value index= ', & & TRIM(INTG_STRING),', #Derivatives= 0' ValueIndex=ValueIndex+1 END DO @@ -193,7 +193,7 @@ SUBROUTINE REACTION_DIFFUSION_IO_WRITE_CMGUI(REGION, EQUATIONS_SET_GLOBAL_NUMBER !WRITE OUT NODE VALUES DO I = 1,NumberOfNodes - NODE_GLOBAL_NUMBER = COMPUTATIONAL_DOMAIN%TOPOLOGY%NODES%NODES(I)%GLOBAL_NUMBER + NODE_GLOBAL_NUMBER = COMPUTATION_DOMAIN%TOPOLOGY%NODES%NODES(I)%GLOBAL_NUMBER NodeXValue = REGION%equations_sets%equations_sets(EQUATIONS_SET_GLOBAL_NUMBER)%ptr%geometry%geometric_field%variables(1) & & %parameter_sets%parameter_sets(1)%ptr%parameters%cmiss%data_dp(I) IF(NumberOfDimensions==2 .OR. NumberOfDimensions==3) THEN @@ -207,17 +207,17 @@ SUBROUTINE REACTION_DIFFUSION_IO_WRITE_CMGUI(REGION, EQUATIONS_SET_GLOBAL_NUMBER NodeUValue=REGION%equations_sets%equations_sets(EQUATIONS_SET_GLOBAL_NUMBER)%ptr%dependent%dependent_field% & & variables(1)%parameter_sets%parameter_sets(1)%ptr%parameters%cmiss%data_dp(I) - WRITE(myComputationalNodeNumber,*) ' Node: ',NODE_GLOBAL_NUMBER - WRITE(myComputationalNodeNumber,'(" ", es25.16 )')NodeXValue + WRITE(myComputationNodeNumber,*) ' Node: ',NODE_GLOBAL_NUMBER + WRITE(myComputationNodeNumber,'(" ", es25.16 )')NodeXValue IF(NumberOfDimensions==2 .OR. NumberOfDimensions==3) THEN - WRITE(myComputationalNodeNumber,'(" ", es25.16 )')NodeYValue + WRITE(myComputationNodeNumber,'(" ", es25.16 )')NodeYValue END IF IF(NumberOfDimensions==3) THEN - WRITE(myComputationalNodeNumber,'(" ", es25.16 )')NodeZValue + WRITE(myComputationNodeNumber,'(" ", es25.16 )')NodeZValue END IF - WRITE(myComputationalNodeNumber,'(" ", es25.16 )')NodeUValue + WRITE(myComputationNodeNumber,'(" ", es25.16 )')NodeUValue IF( (EQUATIONS_SET%SPECIFICATION(1)==EQUATIONS_SET_CLASSICAL_FIELD_CLASS) & & .AND.(EQUATIONS_SET%SPECIFICATION(2)==EQUATIONS_SET_REACTION_DIFFUSION_EQUATION_TYPE) & @@ -225,14 +225,14 @@ SUBROUTINE REACTION_DIFFUSION_IO_WRITE_CMGUI(REGION, EQUATIONS_SET_GLOBAL_NUMBER !source field IF( OUTPUT_SOURCE ) THEN !NodeSourceValue = SOURCE_INTERPOLATED_POINT(FIELD_U_VARIABLE_TYPE)%ptr%VALUES(1,1) - !WRITE(myComputationalNodeNumber,'(" ", es25.16 )')NodeSourceValue + !WRITE(myComputationNodeNumber,'(" ", es25.16 )')NodeSourceValue END IF END IF END DO !nodes I - CLOSE(myComputationalNodeNumber) + CLOSE(myComputationNodeNumber) !OUTPUT ELEMENTS IN CURRENT DOMAIN - MaxNodesPerElement=COMPUTATIONAL_DOMAIN%TOPOLOGY%ELEMENTS%ELEMENTS(1)%basis%number_of_element_parameters + MaxNodesPerElement=COMPUTATION_DOMAIN%TOPOLOGY%ELEMENTS%ELEMENTS(1)%basis%number_of_element_parameters BasisType = 1 IF(NumberOfDimensions==2) THEN IF(MaxNodesPerElement==4.OR.MaxNodesPerElement==9.OR.MaxNodesPerElement==16) THEN @@ -246,110 +246,110 @@ SUBROUTINE REACTION_DIFFUSION_IO_WRITE_CMGUI(REGION, EQUATIONS_SET_GLOBAL_NUMBER ENDIF CALL WRITE_STRING(GENERAL_OUTPUT_TYPE,"Writing Elements...",ERR,ERROR,*999) FILENAME="./output/"//NAME//".exelem" - OPEN(UNIT=myComputationalNodeNumber, FILE=CHAR(FILENAME),STATUS='unknown') - WRITE(myComputationalNodeNumber,*) 'Group name: Cell' + OPEN(UNIT=myComputationNodeNumber, FILE=CHAR(FILENAME),STATUS='unknown') + WRITE(myComputationNodeNumber,*) 'Group name: Cell' IF (BasisType==1) THEN !lagrange basis in 1 and 2D WRITE(INTG_STRING,'(I0)'),NumberOfDimensions - WRITE(myComputationalNodeNumber,*) 'Shape. Dimension= ',TRIM(INTG_STRING) - WRITE(myComputationalNodeNumber,*) '#Scale factor sets= 1' + WRITE(myComputationNodeNumber,*) 'Shape. Dimension= ',TRIM(INTG_STRING) + WRITE(myComputationNodeNumber,*) '#Scale factor sets= 1' IF(NumberOfDimensions==1) THEN WRITE(INTG_STRING,'(I0)'),MaxNodesPerElement - WRITE(myComputationalNodeNumber,*) 'q.Lagrange, #Scale factors=',TRIM(INTG_STRING) + WRITE(myComputationNodeNumber,*) 'q.Lagrange, #Scale factors=',TRIM(INTG_STRING) ELSE IF (NumberOfDimensions==2) THEN IF(MaxNodesPerElement==4) THEN WRITE(INTG_STRING,'(I0)'),MaxNodesPerElement - WRITE(myComputationalNodeNumber,*) & + WRITE(myComputationNodeNumber,*) & & 'l.Lagrange*l.Lagrange, #Scale factors=',TRIM(INTG_STRING) !linear lagrange ELSE IF(MaxNodesPerElement==9) THEN WRITE(INTG_STRING,'(I0)'),MaxNodesPerElement - WRITE(myComputationalNodeNumber,*) & + WRITE(myComputationNodeNumber,*) & & 'q.Lagrange*q.Lagrange, #Scale factors=',TRIM(INTG_STRING) !quadratic lagrange ELSE IF(MaxNodesPerElement==16) THEN WRITE(INTG_STRING,'(I0)'),MaxNodesPerElement - WRITE(myComputationalNodeNumber,*) & + WRITE(myComputationNodeNumber,*) & & 'c.Lagrange*c.Lagrange, #Scale factors=',TRIM(INTG_STRING) !cubic lagrange END IF ELSE !three dimensions IF(MaxNodesPerElement==8) THEN WRITE(INTG_STRING,'(I0)'),MaxNodesPerElement - WRITE(myComputationalNodeNumber,*) & + WRITE(myComputationNodeNumber,*) & & 'l.Lagrange*l.Lagrange*l.Lagrange, #Scale factors=',TRIM(INTG_STRING) ELSE IF(MaxNodesPerElement==27) THEN WRITE(INTG_STRING,'(I0)'),MaxNodesPerElement - WRITE(myComputationalNodeNumber,*) & + WRITE(myComputationNodeNumber,*) & & 'q.Lagrange*q.Lagrange*q.Lagrange, #Scale factors=',TRIM(INTG_STRING) ELSE IF(MaxNodesPerElement==64) THEN WRITE(INTG_STRING,'(I0)'),MaxNodesPerElement - WRITE(myComputationalNodeNumber,*) & + WRITE(myComputationNodeNumber,*) & & 'c.Lagrange*c.Lagrange*c.Lagrange, #Scale factors=',TRIM(INTG_STRING) END IF END IF ELSEIF(BasisType==2) THEN IF(NumberOfDimensions==2) THEN - WRITE(myComputationalNodeNumber,*) 'Shape. Dimension=', & + WRITE(myComputationNodeNumber,*) 'Shape. Dimension=', & & NumberOfDimensions,', simplex(2)*simplex' IF(MaxNodesPerElement==3) THEN - WRITE(myComputationalNodeNumber,*) '#Scale factor sets= 1' + WRITE(myComputationNodeNumber,*) '#Scale factor sets= 1' WRITE(INTG_STRING,'(I0)'),MaxNodesPerElement - WRITE(myComputationalNodeNumber,*) & + WRITE(myComputationNodeNumber,*) & & ' l.simplex(2)*l.simplex, #Scale factors= ', TRIM(INTG_STRING) ELSE IF(MaxNodesPerElement==6) THEN - WRITE(myComputationalNodeNumber,*) '#Scale factor sets= 1' + WRITE(myComputationNodeNumber,*) '#Scale factor sets= 1' WRITE(INTG_STRING,'(I0)'),MaxNodesPerElement - WRITE(myComputationalNodeNumber,*) & + WRITE(myComputationNodeNumber,*) & & ' l.simplex(2)*l.simplex, #Scale factors= ', TRIM(INTG_STRING) ELSE IF (MaxNodesPerElement== 10 ) THEN - WRITE(myComputationalNodeNumber,*) '#Scale factor sets= 1' + WRITE(myComputationNodeNumber,*) '#Scale factor sets= 1' WRITE(INTG_STRING,'(I0)'),MaxNodesPerElement - WRITE(myComputationalNodeNumber,*) & + WRITE(myComputationNodeNumber,*) & & ' q.simplex(2)*q.simplex, #Scale factors= ', TRIM(INTG_STRING) ENDIF ELSE IF(NumberOfDimensions==3) THEN WRITE(INTG_STRING2,'(I0)'),NumberOfDimensions - WRITE(myComputationalNodeNumber,*) & + WRITE(myComputationNodeNumber,*) & & 'Shape. Dimension=',TRIM(INTG_STRING2),', simplex(2;3)*simplex*simplex' IF(MaxNodesPerElement==4) THEN - WRITE(myComputationalNodeNumber,*) & + WRITE(myComputationNodeNumber,*) & & '#Scale factor sets= 1' WRITE(INTG_STRING,'(I0)'),MaxNodesPerElement - WRITE(myComputationalNodeNumber,*) & + WRITE(myComputationNodeNumber,*) & & ' l.simplex(2;3)*l.simplex*l.simplex, #Scale factors= ', TRIM(INTG_STRING) ELSE IF (MaxNodesPerElement== 10 ) THEN - WRITE(myComputationalNodeNumber,*) '#Scale factor sets= 1' + WRITE(myComputationNodeNumber,*) '#Scale factor sets= 1' WRITE(INTG_STRING,'(I0)'),MaxNodesPerElement - WRITE(myComputationalNodeNumber,*) & + WRITE(myComputationNodeNumber,*) & & ' q.simplex(2;3)*q.simplex*q.simplex, #Scale factors= ', TRIM(INTG_STRING) ELSE IF(MaxNodesPerElement==20) THEN - WRITE(myComputationalNodeNumber,*) '#Scale factor sets= 1' + WRITE(myComputationNodeNumber,*) '#Scale factor sets= 1' WRITE(INTG_STRING,'(I0)'),MaxNodesPerElement - WRITE(myComputationalNodeNumber,*) & + WRITE(myComputationNodeNumber,*) & & ' q.simplex(2;3)*q.simplex*q.simplex, #Scale factors= ', TRIM(INTG_STRING) ENDIF ELSE - WRITE(myComputationalNodeNumber,*) '#Scale factor sets= 0' + WRITE(myComputationNodeNumber,*) '#Scale factor sets= 0' END IF END IF WRITE(INTG_STRING,'(I0)'),MaxNodesPerElement - WRITE(myComputationalNodeNumber,*) '#Nodes= ',TRIM(INTG_STRING) + WRITE(myComputationNodeNumber,*) '#Nodes= ',TRIM(INTG_STRING) WRITE(INTG_STRING,'(I0)'),NumberOfOutputFields - WRITE(myComputationalNodeNumber,*) '#Fields= ',TRIM(INTG_STRING) + WRITE(myComputationNodeNumber,*) '#Fields= ',TRIM(INTG_STRING) NumberOfFieldComponents(1) = NumberOfDimensions NumberOfFieldComponents(2) = NumberOfVariableComponents NumberOfFieldComponents(3) = NumberOfSourceComponents DO I=1,NumberOfOutputFields IF(I==1)THEN WRITE(INTG_STRING,'(I0)'),NumberOfDimensions - WRITE(myComputationalNodeNumber,*) & + WRITE(myComputationNodeNumber,*) & & ' 1) coordinates, coordinate, rectangular cartesian, #Components= ',TRIM(INTG_STRING) ELSE IF(I==2) THEN WRITE(INTG_STRING,'(I0)'),NumberOfVariableComponents - WRITE(myComputationalNodeNumber,*) & + WRITE(myComputationNodeNumber,*) & & ' 2) dependent, field, rectangular cartesian, #Components= ',TRIM(INTG_STRING) ELSE IF(I==3) THEN WRITE(INTG_STRING,'(I0)'),NumberOfSourceComponents - WRITE(myComputationalNodeNumber,*) & + WRITE(myComputationNodeNumber,*) & & ' 3) source, field, rectangular cartesian, #Components= ',TRIM(INTG_STRING) END IF @@ -357,98 +357,98 @@ SUBROUTINE REACTION_DIFFUSION_IO_WRITE_CMGUI(REGION, EQUATIONS_SET_GLOBAL_NUMBER IF(NumberOfDimensions==1) THEN IF(I==1)THEN IF(J==1) THEN - WRITE(myComputationalNodeNumber,*)' x. l.Lagrange, no modify, standard node based.' + WRITE(myComputationNodeNumber,*)' x. l.Lagrange, no modify, standard node based.' ELSE IF(J==2) THEN - WRITE(myComputationalNodeNumber,*)' y. l.Lagrange, no modify, standard node based.' + WRITE(myComputationNodeNumber,*)' y. l.Lagrange, no modify, standard node based.' ELSE IF(J==3) THEN - WRITE(myComputationalNodeNumber,*)' z. l.Lagrange, no modify, standard node based.' + WRITE(myComputationNodeNumber,*)' z. l.Lagrange, no modify, standard node based.' END IF ELSE - WRITE(myComputationalNodeNumber,*) & + WRITE(myComputationNodeNumber,*) & & ' ',J,'. l.Lagrange, no modify, standard node based.' END IF ELSE IF(NumberOfDimensions==2) THEN IF(I==1)THEN IF(J==1) THEN IF(MaxNodesPerElement==4)THEN - WRITE(myComputationalNodeNumber,*) & + WRITE(myComputationNodeNumber,*) & & ' x. l.Lagrange*l.Lagrange, no modify, standard node based.' ELSE IF(MaxNodesPerElement==9) THEN - WRITE(myComputationalNodeNumber,*) & + WRITE(myComputationNodeNumber,*) & & ' x. q.Lagrange*q.Lagrange, no modify, standard node based.' ELSE IF(MaxNodesPerElement==16) THEN - WRITE(myComputationalNodeNumber,*) & + WRITE(myComputationNodeNumber,*) & & ' x. c.Lagrange*c.Lagrange, no modify, standard node based.' ELSE IF(MaxNodesPerElement==3) THEN - WRITE(myComputationalNodeNumber,*) & + WRITE(myComputationNodeNumber,*) & & ' x. l.simplex(2)*l.simplex, no modify, standard node based.' ELSE IF(MaxNodesPerElement==6) THEN - WRITE(myComputationalNodeNumber,*) & + WRITE(myComputationNodeNumber,*) & & ' x. q.simplex(2)*q.simplex, no modify, standard node based.' ELSE IF(MaxNodesPerElement==10) THEN - WRITE(myComputationalNodeNumber,*) & + WRITE(myComputationNodeNumber,*) & & ' x. c.simplex(2)*c.simplex, no modify, standard node based.' END IF ELSE IF(J==2) THEN IF(MaxNodesPerElement==4) THEN - WRITE(myComputationalNodeNumber,*) & + WRITE(myComputationNodeNumber,*) & & ' y. l.Lagrange*l.Lagrange, no modify, standard node based.' ELSE IF(MaxNodesPerElement==9) THEN - WRITE(myComputationalNodeNumber,*) & + WRITE(myComputationNodeNumber,*) & & ' y. q.Lagrange*q.Lagrange, no modify, standard node based.' ELSE IF(MaxNodesPerElement==16) THEN - WRITE(myComputationalNodeNumber,*) & + WRITE(myComputationNodeNumber,*) & & ' y. c.Lagrange*c.Lagrange, no modify, standard node based.' ELSE IF(MaxNodesPerElement==3) THEN - WRITE(myComputationalNodeNumber,*) & + WRITE(myComputationNodeNumber,*) & & ' y. l.simplex(2)*l.simplex, no modify, standard node based.' ELSE IF(MaxNodesPerElement==6) THEN - WRITE(myComputationalNodeNumber,*) & + WRITE(myComputationNodeNumber,*) & & ' y. q.simplex(2)*q.simplex, no modify, standard node based.' ELSE IF(MaxNodesPerElement==10) THEN - WRITE(myComputationalNodeNumber,*) & + WRITE(myComputationNodeNumber,*) & & ' y. c.simplex(2)*c.simplex, no modify, standard node based.' END IF ELSE IF(J==3) THEN IF(MaxNodesPerElement==4) THEN - WRITE(myComputationalNodeNumber,*) & + WRITE(myComputationNodeNumber,*) & & ' z. l.Lagrange*l.Lagrange, no modify, standard node based.' ELSE IF(MaxNodesPerElement==9) THEN - WRITE(myComputationalNodeNumber,*) & + WRITE(myComputationNodeNumber,*) & & ' z. q.Lagrange*q.Lagrange, no modify, standard node based.' ELSE IF(MaxNodesPerElement==16) THEN - WRITE(myComputationalNodeNumber,*) & + WRITE(myComputationNodeNumber,*) & & ' z. c.Lagrange*c.Lagrange, no modify, standard node based.' ELSE IF(MaxNodesPerElement==3) THEN - WRITE(myComputationalNodeNumber,*) & + WRITE(myComputationNodeNumber,*) & & ' z. l.simplex(2)*l.simplex, no modify, standard node based.' ELSE IF(MaxNodesPerElement==6) THEN - WRITE(myComputationalNodeNumber,*) & + WRITE(myComputationNodeNumber,*) & & ' z. q.simplex(2)*q.simplex, no modify, standard node based.' ELSE IF(MaxNodesPerElement==10) THEN - WRITE(myComputationalNodeNumber,*) & + WRITE(myComputationNodeNumber,*) & & ' z. c.simplex(2)*c.simplex, no modify, standard node based.' END IF END IF ELSE IF(MaxNodesPerElement==4) THEN - WRITE(myComputationalNodeNumber,*) & + WRITE(myComputationNodeNumber,*) & & ' ',J,'. l.Lagrange*l.Lagrange, no modify, standard node based.' ELSE IF(MaxNodesPerElement==9) THEN - WRITE(myComputationalNodeNumber,*) & + WRITE(myComputationNodeNumber,*) & & ' ',J,'. q.Lagrange*q.Lagrange, no modify, standard node based.' ELSE IF(MaxNodesPerElement==16) THEN - WRITE(myComputationalNodeNumber,*) & + WRITE(myComputationNodeNumber,*) & & ' ',J,'. c.Lagrange*c.Lagrange, no modify, standard node based.' ELSE IF(MaxNodesPerElement==3) THEN - WRITE(myComputationalNodeNumber,*) & + WRITE(myComputationNodeNumber,*) & & ' ',J,'. l.simplex(2)*l.simplex, no modify, standard node based.' ELSE IF(MaxNodesPerElement==6) THEN - WRITE(myComputationalNodeNumber,*) & + WRITE(myComputationNodeNumber,*) & & ' ',J,'. q.simplex(2)*q.simplex, no modify, standard node based.' ELSE IF(MaxNodesPerElement==10) THEN - WRITE(myComputationalNodeNumber,*) & + WRITE(myComputationNodeNumber,*) & & ' ',J,'. c.simplex(2)*c.simplex, no modify, standard node based.' END IF END IF @@ -456,105 +456,105 @@ SUBROUTINE REACTION_DIFFUSION_IO_WRITE_CMGUI(REGION, EQUATIONS_SET_GLOBAL_NUMBER IF(I==1)THEN IF(J==1) THEN IF(MaxNodesPerElement==8) THEN - WRITE(myComputationalNodeNumber,*) & + WRITE(myComputationNodeNumber,*) & & ' x. l.Lagrange*l.Lagrange*l.Lagrange, no modify, standard node based.' ELSE IF(MaxNodesPerElement==27) THEN - WRITE(myComputationalNodeNumber,*) & + WRITE(myComputationNodeNumber,*) & & ' x. q.Lagrange*q.Lagrange*q.Lagrange, no modify, standard node based.' ELSE IF(MaxNodesPerElement==64) THEN - WRITE(myComputationalNodeNumber,*) & + WRITE(myComputationNodeNumber,*) & & ' x. c.Lagrange*c.Lagrange*c.Lagrange, no modify, standard node based.' ELSE IF(MaxNodesPerElement==4) THEN - WRITE(myComputationalNodeNumber,*) & + WRITE(myComputationNodeNumber,*) & & ' x. l.simplex(2;3)*l.simplex*l.simplex, no modify, standard node based.' ELSE IF(MaxNodesPerElement==10) THEN - WRITE(myComputationalNodeNumber,*) & + WRITE(myComputationNodeNumber,*) & & ' x. q.simplex(2;3)*q.simplex*q.simplex, no modify, standard node based.' ELSE IF(MaxNodesPerElement==20) THEN - WRITE(myComputationalNodeNumber,*) & + WRITE(myComputationNodeNumber,*) & & ' x. c.simplex(2;3)*c.simplex*c.simplex, no modify, standard node based.' END IF ELSE IF(J==2) THEN IF(MaxNodesPerElement==8) THEN - WRITE(myComputationalNodeNumber,*) & + WRITE(myComputationNodeNumber,*) & & ' y. l.Lagrange*l.Lagrange*l.Lagrange, no modify, standard node based.' ELSE IF(MaxNodesPerElement==27) THEN - WRITE(myComputationalNodeNumber,*) & + WRITE(myComputationNodeNumber,*) & & ' y. q.Lagrange*q.Lagrange*q.Lagrange, no modify, standard node based.' ELSE IF(MaxNodesPerElement==64) THEN - WRITE(myComputationalNodeNumber,*) & + WRITE(myComputationNodeNumber,*) & & ' y. c.Lagrange*c.Lagrange*c.Lagrange, no modify, standard node based.' ELSE IF(MaxNodesPerElement==4) THEN - WRITE(myComputationalNodeNumber,*) & + WRITE(myComputationNodeNumber,*) & & ' y. l.simplex(2;3)*l.simplex*l.simplex, no modify, standard node based.' ELSE IF(MaxNodesPerElement==10) THEN - WRITE(myComputationalNodeNumber,*) & + WRITE(myComputationNodeNumber,*) & & ' y. q.simplex(2;3)*q.simplex*q.simplex, no modify, standard node based.' ELSE IF(MaxNodesPerElement==20) THEN - WRITE(myComputationalNodeNumber,*) & + WRITE(myComputationNodeNumber,*) & & ' y. c.simplex(2;3)*c.simplex*c.simplex, no modify, standard node based.' END IF ELSE IF(J==3) THEN IF(MaxNodesPerElement==8) THEN - WRITE(myComputationalNodeNumber,*) & + WRITE(myComputationNodeNumber,*) & & ' z. l.Lagrange*l.Lagrange*l.Lagrange, no modify, standard node based.' ELSE IF(MaxNodesPerElement==27) THEN - WRITE(myComputationalNodeNumber,*) & + WRITE(myComputationNodeNumber,*) & & ' z. q.Lagrange*q.Lagrange*q.Lagrange, no modify, standard node based.' ELSE IF(MaxNodesPerElement==64) THEN - WRITE(myComputationalNodeNumber,*) & + WRITE(myComputationNodeNumber,*) & & ' z. c.Lagrange*c.Lagrange*c.Lagrange, no modify, standard node based.' ELSE IF(MaxNodesPerElement==4) THEN - WRITE(myComputationalNodeNumber,*) & + WRITE(myComputationNodeNumber,*) & & ' z. l.simplex(2;3)*l.simplex*l.simplex, no modify, standard node based.' ELSE IF(MaxNodesPerElement==10) THEN - WRITE(myComputationalNodeNumber,*) & + WRITE(myComputationNodeNumber,*) & & ' z. q.simplex(2;3)*q.simplex*q.simplex, no modify, standard node based.' ELSE IF(MaxNodesPerElement==20) THEN - WRITE(myComputationalNodeNumber,*) & + WRITE(myComputationNodeNumber,*) & & ' z. c.simplex(2;3)*c.simplex*c.simplex, no modify, standard node based.' END IF END IF ELSE IF(MaxNodesPerElement==8) THEN - WRITE(myComputationalNodeNumber,*) & + WRITE(myComputationNodeNumber,*) & & ' ',J,'. l.Lagrange*l.Lagrange*l.Lagrange, no modify, standard node based.' ELSE IF(MaxNodesPerElement==27) THEN - WRITE(myComputationalNodeNumber,*) & + WRITE(myComputationNodeNumber,*) & & ' ',J,'. q.Lagrange*q.Lagrange*q.Lagrange, no modify, standard node based.' ELSE IF(MaxNodesPerElement==64) THEN - WRITE(myComputationalNodeNumber,*) & + WRITE(myComputationNodeNumber,*) & & ' ',J,'. c.Lagrange*c.Lagrange*c.Lagrange, no modify, standard node based.' ELSE IF(MaxNodesPerElement==4) THEN - WRITE(myComputationalNodeNumber,*) & + WRITE(myComputationNodeNumber,*) & & ' ',J,'. l.simplex(2;3)*l.simplex*l.simplex, no modify, standard node based.' ELSE IF(MaxNodesPerElement==10) THEN - WRITE(myComputationalNodeNumber,*) & + WRITE(myComputationNodeNumber,*) & & ' ',J,'. q.simplex(2;3)*q.simplex*q.simplex, no modify, standard node based.' ELSE IF(MaxNodesPerElement==20) THEN - WRITE(myComputationalNodeNumber,*) & + WRITE(myComputationNodeNumber,*) & & ' ',J,'. c.simplex(2;3)*c.simplex*c.simplex, no modify, standard node based.' END IF END IF END IF WRITE(INTG_STRING,'(I0)') MaxNodesPerElement - WRITE(myComputationalNodeNumber,*) ' #Nodes= ',TRIM(INTG_STRING) + WRITE(myComputationNodeNumber,*) ' #Nodes= ',TRIM(INTG_STRING) DO K = 1,MaxNodesPerElement WRITE(INTG_STRING,'(I0)'),K - WRITE(myComputationalNodeNumber,*) ' ',TRIM(INTG_STRING),'. #Values=1' - WRITE(myComputationalNodeNumber,*) ' Value indices: 1' - WRITE(myComputationalNodeNumber,*) ' Scale factor indices: ',TRIM(INTG_STRING) + WRITE(myComputationNodeNumber,*) ' ',TRIM(INTG_STRING),'. #Values=1' + WRITE(myComputationNodeNumber,*) ' Value indices: 1' + WRITE(myComputationNodeNumber,*) ' Scale factor indices: ',TRIM(INTG_STRING) END DO END DO !J loop END DO !I loop IF(.NOT.ALLOCATED(ElementNodes)) ALLOCATE(ElementNodes(NumberOfElements,MaxNodesPerElement)) IF(.NOT.ALLOCATED(ElementNodesScales)) ALLOCATE(ElementNodesScales(NumberOfElements,MaxNodesPerElement)) DO I=1,NumberOfElements - ELEMENT_GLOBAL_NUMBER=COMPUTATIONAL_DOMAIN%DECOMPOSITION%TOPOLOGY%ELEMENTS%ELEMENTS(K)%GLOBAL_NUMBER + ELEMENT_GLOBAL_NUMBER=COMPUTATION_DOMAIN%DECOMPOSITION%TOPOLOGY%ELEMENTS%ELEMENTS(K)%GLOBAL_NUMBER DO J=1,MaxNodesPerElement - NODE_LOCAL_NUMBER=COMPUTATIONAL_DOMAIN%TOPOLOGY%ELEMENTS%ELEMENTS(I)%ELEMENT_NODES(J) - NODE_GLOBAL_NUMBER=COMPUTATIONAL_DOMAIN%MAPPINGS%NODES%LOCAL_TO_GLOBAL_MAP(NODE_LOCAL_NUMBER) + NODE_LOCAL_NUMBER=COMPUTATION_DOMAIN%TOPOLOGY%ELEMENTS%ELEMENTS(I)%ELEMENT_NODES(J) + NODE_GLOBAL_NUMBER=COMPUTATION_DOMAIN%MAPPINGS%NODES%LOCAL_TO_GLOBAL_MAP(NODE_LOCAL_NUMBER) ElementNodes(I,J)=NODE_GLOBAL_NUMBER ElementNodesScales(I,J)=1.0000000000000000E+00 END DO @@ -562,14 +562,14 @@ SUBROUTINE REACTION_DIFFUSION_IO_WRITE_CMGUI(REGION, EQUATIONS_SET_GLOBAL_NUMBER DO K=1,NumberOfElements - ELEMENT_GLOBAL_NUMBER=COMPUTATIONAL_DOMAIN%DECOMPOSITION%TOPOLOGY%ELEMENTS%ELEMENTS(K)%GLOBAL_NUMBER + ELEMENT_GLOBAL_NUMBER=COMPUTATION_DOMAIN%DECOMPOSITION%TOPOLOGY%ELEMENTS%ELEMENTS(K)%GLOBAL_NUMBER IF (BasisType==1) THEN WRITE(INTG_STRING,'(I0)'),ELEMENT_GLOBAL_NUMBER - WRITE(myComputationalNodeNumber,*) 'Element: ', TRIM(INTG_STRING),' 0 0' - WRITE(myComputationalNodeNumber,*) ' Nodes:' - WRITE(myComputationalNodeNumber,*) ' ', ElementNodes(K,1:MaxNodesPerElement) - WRITE(myComputationalNodeNumber,*) ' Scale factors:' - WRITE(myComputationalNodeNumber,*) ' ',ElementNodesScales(K,1:MaxNodesPerElement) + WRITE(myComputationNodeNumber,*) 'Element: ', TRIM(INTG_STRING),' 0 0' + WRITE(myComputationNodeNumber,*) ' Nodes:' + WRITE(myComputationNodeNumber,*) ' ', ElementNodes(K,1:MaxNodesPerElement) + WRITE(myComputationNodeNumber,*) ' Scale factors:' + WRITE(myComputationNodeNumber,*) ' ',ElementNodesScales(K,1:MaxNodesPerElement) ELSEIF(BasisType==2) THEN IF(.NOT.ALLOCATED(SimplexOutputHelp)) ALLOCATE(SimplexOutputHelp(MaxNodesPerElement)) @@ -584,14 +584,14 @@ SUBROUTINE REACTION_DIFFUSION_IO_WRITE_CMGUI(REGION, EQUATIONS_SET_GLOBAL_NUMBER SimplexOutputHelp(4)=ElementNodes(K,3) END IF WRITE(INTG_STRING,'(I0)') ELEMENT_GLOBAL_NUMBER - WRITE(myComputationalNodeNumber,*) 'Element: ', TRIM(INTG_STRING),' 0 0' - WRITE(myComputationalNodeNumber,*) ' Nodes:' - WRITE(myComputationalNodeNumber,*) ' ', SimplexOutputHelp - WRITE(myComputationalNodeNumber,*) ' Scale factors:' - WRITE(myComputationalNodeNumber,*) ' ',ElementNodesScales(K,1:MaxNodesPerElement) + WRITE(myComputationNodeNumber,*) 'Element: ', TRIM(INTG_STRING),' 0 0' + WRITE(myComputationNodeNumber,*) ' Nodes:' + WRITE(myComputationNodeNumber,*) ' ', SimplexOutputHelp + WRITE(myComputationNodeNumber,*) ' Scale factors:' + WRITE(myComputationNodeNumber,*) ' ',ElementNodesScales(K,1:MaxNodesPerElement) END IF ENDDO - CLOSE(myComputationalNodeNumber) + CLOSE(myComputationNodeNumber) EXITS("REACTION_DIFFUSION_IO_WRITE_CMGUI") RETURN diff --git a/src/reaction_diffusion_equation_routines.f90 b/src/reaction_diffusion_equation_routines.f90 index 9eaaa1f3..eda5b326 100755 --- a/src/reaction_diffusion_equation_routines.f90 +++ b/src/reaction_diffusion_equation_routines.f90 @@ -26,7 +26,7 @@ !> Auckland, the University of Oxford and King's College, London. !> All Rights Reserved. !> -!> Contributor(s): Chris Bradley +!> Contributor(s): Vijay Rajagopal,Chris Bradley !> !> Alternatively, the contents of this file may be used under the terms of !> either the GNU General Public License Version 2 or later (the "GPL"), or @@ -47,7 +47,7 @@ MODULE REACTION_DIFFUSION_EQUATION_ROUTINES USE BaseRoutines USE BASIS_ROUTINES USE BOUNDARY_CONDITIONS_ROUTINES - USE ComputationEnvironment + USE ComputationRoutines USE Constants USE CONTROL_LOOP_ROUTINES USE ControlLoopAccessRoutines @@ -1529,7 +1529,7 @@ SUBROUTINE REACTION_DIFFUSION_POST_SOLVE_OUTPUT_DATA(CONTROL_LOOP,SOLVER,err,err REAL(DP) :: CURRENT_TIME,TIME_INCREMENT INTEGER(INTG) :: EQUATIONS_SET_IDX,CURRENT_LOOP_ITERATION,OUTPUT_FREQUENCY - INTEGER(INTG) :: myComputationalNodeNumber + INTEGER(INTG) :: myComputationNodeNumber CHARACTER(28) :: FILE CHARACTER(28) :: OUTPUT_FILE @@ -1558,20 +1558,20 @@ SUBROUTINE REACTION_DIFFUSION_POST_SOLVE_OUTPUT_DATA(CONTROL_LOOP,SOLVER,err,err CURRENT_LOOP_ITERATION=CONTROL_LOOP%TIME_LOOP%ITERATION_NUMBER OUTPUT_FREQUENCY=CONTROL_LOOP%TIME_LOOP%OUTPUT_NUMBER - myComputationalNodeNumber = ComputationalEnvironment_NodeNumberGet(err,error) + myComputationNodeNumber = ComputationEnvironment_NodeNumberGet(err,error) IF(OUTPUT_FREQUENCY>0) THEN IF(MOD(CURRENT_LOOP_ITERATION,OUTPUT_FREQUENCY)==0) THEN IF(CONTROL_LOOP%TIME_LOOP%CURRENT_TIME<=CONTROL_LOOP%TIME_LOOP%STOP_TIME) THEN IF(SOLVER_MAPPING%NUMBER_OF_EQUATIONS_SETS.EQ.1) THEN IF(CURRENT_LOOP_ITERATION<10) THEN WRITE(OUTPUT_FILE,'("TIME_STEP_SPEC_1.part",I2.2,".000",I0)') & - & myComputationalNodeNumber, CURRENT_LOOP_ITERATION + & myComputationNodeNumber, CURRENT_LOOP_ITERATION ELSE IF(CURRENT_LOOP_ITERATION<100) THEN WRITE(OUTPUT_FILE,'("TIME_STEP_SPEC_1.part",I2.2,".00",I0)') & - & myComputationalNodeNumber,CURRENT_LOOP_ITERATION + & myComputationNodeNumber,CURRENT_LOOP_ITERATION ELSE IF(CURRENT_LOOP_ITERATION<1000) THEN WRITE(OUTPUT_FILE,'("TIME_STEP_SPEC_1.part",I2.2,".0",I0)') & - & myComputationalNodeNumber,CURRENT_LOOP_ITERATION + & myComputationNodeNumber,CURRENT_LOOP_ITERATION ELSE IF(CURRENT_LOOP_ITERATION<10000) THEN WRITE(OUTPUT_FILE,'("TIME_STEP_SPEC_1.part",I2.2,".",I0)') & & CURRENT_LOOP_ITERATION @@ -1579,16 +1579,16 @@ SUBROUTINE REACTION_DIFFUSION_POST_SOLVE_OUTPUT_DATA(CONTROL_LOOP,SOLVER,err,err ELSE IF(CURRENT_LOOP_ITERATION<10) THEN WRITE(OUTPUT_FILE, '("TIME_STEP_SPEC_",I0,".part",I2.2,".000",I0)') & - & equations_set_idx,myComputationalNodeNumber,CURRENT_LOOP_ITERATION + & equations_set_idx,myComputationNodeNumber,CURRENT_LOOP_ITERATION ELSE IF(CURRENT_LOOP_ITERATION<100) THEN WRITE(OUTPUT_FILE, '("TIME_STEP_SPEC_",I0,".part",I2.2,".00",I0)') & - & equations_set_idx,myComputationalNodeNumber,CURRENT_LOOP_ITERATION + & equations_set_idx,myComputationNodeNumber,CURRENT_LOOP_ITERATION ELSE IF(CURRENT_LOOP_ITERATION<1000) THEN WRITE(OUTPUT_FILE, '("TIME_STEP_SPEC_",I0,".part",I2.2,".0",I0)') & - & equations_set_idx,myComputationalNodeNumber,CURRENT_LOOP_ITERATION + & equations_set_idx,myComputationNodeNumber,CURRENT_LOOP_ITERATION ELSE IF(CURRENT_LOOP_ITERATION<10000) THEN WRITE(OUTPUT_FILE, '("TIME_STEP_SPEC_",I0,".part",I2.2,".",I0)') & - & equations_set_idx,myComputationalNodeNumber,CURRENT_LOOP_ITERATION + & equations_set_idx,myComputationNodeNumber,CURRENT_LOOP_ITERATION END IF ENDIF WRITE(*,*) OUTPUT_FILE diff --git a/src/solver_mapping_routines.f90 b/src/solver_mapping_routines.f90 index 750d9021..4b01decd 100755 --- a/src/solver_mapping_routines.f90 +++ b/src/solver_mapping_routines.f90 @@ -26,7 +26,7 @@ !> Auckland, the University of Oxford and King's College, London. !> All Rights Reserved. !> -!> Contributor(s): +!> Contributor(s): Chris Bradley !> !> Alternatively, the contents of this file may be used under the terms of !> either the GNU General Public License Version 2 or later (the "GPL"), or @@ -46,7 +46,7 @@ MODULE SOLVER_MAPPING_ROUTINES USE BaseRoutines USE BOUNDARY_CONDITIONS_ROUTINES - USE ComputationEnvironment + USE ComputationRoutines USE DISTRIBUTED_MATRIX_VECTOR USE EquationsAccessRoutines USE DOMAIN_MAPPINGS @@ -319,7 +319,7 @@ SUBROUTINE SOLVER_MAPPING_CALCULATE(SOLVER_MAPPING,ERR,ERROR,*) ! for each rank. ! !Calculate the row mappings. - myrank=computationalEnvironment%myComputationalNodeNumber + myrank=computationEnvironment%myComputationNodeNumber NUMBER_OF_GLOBAL_SOLVER_ROWS=0 NUMBER_OF_LOCAL_SOLVER_ROWS=0 !Add in the rows from any equations sets that have been added to the solver equations @@ -327,10 +327,10 @@ SUBROUTINE SOLVER_MAPPING_CALCULATE(SOLVER_MAPPING,ERR,ERROR,*) ! !Allocate and initialise the rank lists. ALLOCATE(RANK_GLOBAL_ROWS_LISTS(SOLVER_MAPPING%NUMBER_OF_EQUATIONS_SETS+SOLVER_MAPPING% & - & NUMBER_OF_INTERFACE_CONDITIONS,0:computationalEnvironment%numberOfComputationalNodes-1),STAT=ERR) + & NUMBER_OF_INTERFACE_CONDITIONS,0:computationEnvironment%numberOfComputationNodes-1),STAT=ERR) IF(ERR/=0) CALL FlagError("Could not allocate rank global rows lists.",ERR,ERROR,*999) CALL SolverDofCouplings_Initialise(rowCouplings,err,error,*999) - DO rank=0,computationalEnvironment%numberOfComputationalNodes-1 + DO rank=0,computationEnvironment%numberOfComputationNodes-1 equations_idx=0 DO equations_set_idx=1,SOLVER_MAPPING%NUMBER_OF_EQUATIONS_SETS equations_idx=equations_idx+1 @@ -346,7 +346,7 @@ SUBROUTINE SOLVER_MAPPING_CALCULATE(SOLVER_MAPPING,ERR,ERROR,*) CALL LIST_CREATE_START(RANK_GLOBAL_ROWS_LISTS(equations_idx,rank)%PTR,ERR,ERROR,*999) CALL LIST_DATA_TYPE_SET(RANK_GLOBAL_ROWS_LISTS(equations_idx,rank)%PTR,LIST_INTG_TYPE,ERR,ERROR,*999) CALL LIST_INITIAL_SIZE_SET(RANK_GLOBAL_ROWS_LISTS(equations_idx,rank)%PTR,INT(vectorMapping% & - & numberOfGlobalRows/computationalEnvironment%numberOfComputationalNodes,INTG), & + & numberOfGlobalRows/computationEnvironment%numberOfComputationNodes,INTG), & & ERR,ERROR,*999) CALL LIST_DATA_DIMENSION_SET(RANK_GLOBAL_ROWS_LISTS(equations_idx,rank)%PTR,4,ERR,ERROR,*999) CALL LIST_KEY_DIMENSION_SET(RANK_GLOBAL_ROWS_LISTS(equations_idx,rank)%PTR,1,ERR,ERROR,*999) @@ -369,7 +369,7 @@ SUBROUTINE SOLVER_MAPPING_CALCULATE(SOLVER_MAPPING,ERR,ERROR,*) CALL LIST_CREATE_START(RANK_GLOBAL_ROWS_LISTS(equations_idx,rank)%PTR,ERR,ERROR,*999) CALL LIST_DATA_TYPE_SET(RANK_GLOBAL_ROWS_LISTS(equations_idx,rank)%PTR,LIST_INTG_TYPE,ERR,ERROR,*999) CALL LIST_INITIAL_SIZE_SET(RANK_GLOBAL_ROWS_LISTS(equations_idx,rank)%PTR, & - & INT(INTERFACE_MAPPING%NUMBER_OF_GLOBAL_COLUMNS/computationalEnvironment%numberOfComputationalNodes, & + & INT(INTERFACE_MAPPING%NUMBER_OF_GLOBAL_COLUMNS/computationEnvironment%numberOfComputationNodes, & & INTG),ERR,ERROR,*999) CALL LIST_DATA_DIMENSION_SET(RANK_GLOBAL_ROWS_LISTS(equations_idx,rank)%PTR,4,ERR,ERROR,*999) CALL LIST_KEY_DIMENSION_SET(RANK_GLOBAL_ROWS_LISTS(equations_idx,rank)%PTR,1,ERR,ERROR,*999) @@ -676,8 +676,8 @@ SUBROUTINE SOLVER_MAPPING_CALCULATE(SOLVER_MAPPING,ERR,ERROR,*) ALLOCATE(SOLVER_MAPPING%ROW_DOFS_MAPPING,STAT=ERR) IF(ERR/=0) CALL FlagError("Could not allocate solver mapping row dofs mapping.",ERR,ERROR,*999) !!TODO: what is the real number of domains for a solver??? - CALL DOMAIN_MAPPINGS_MAPPING_INITIALISE(SOLVER_MAPPING%ROW_DOFS_MAPPING,computationalEnvironment% & - & numberOfComputationalNodes,ERR,ERROR,*999) + CALL DOMAIN_MAPPINGS_MAPPING_INITIALISE(SOLVER_MAPPING%ROW_DOFS_MAPPING,computationEnvironment% & + & numberOfComputationNodes,ERR,ERROR,*999) ROW_DOMAIN_MAPPING=>SOLVER_MAPPING%ROW_DOFS_MAPPING ALLOCATE(ROW_DOMAIN_MAPPING%GLOBAL_TO_LOCAL_MAP(NUMBER_OF_GLOBAL_SOLVER_ROWS),STAT=ERR) IF(ERR/=0) CALL FlagError("Could not allocate row dofs mapping global to local map.",ERR,ERROR,*999) @@ -788,7 +788,7 @@ SUBROUTINE SOLVER_MAPPING_CALCULATE(SOLVER_MAPPING,ERR,ERROR,*) IF(err/=0) CALL FlagError("Could not allocate dummy DOF coupling values.",err,error,*999) dummyDofCoupling%numberOfDofs=1 !Loop over the ranks to ensure that the lowest ranks have the lowest numbered solver variables - DO rank=0,computationalEnvironment%numberOfComputationalNodes-1 + DO rank=0,computationEnvironment%numberOfComputationNodes-1 NUMBER_OF_LOCAL_SOLVER_ROWS=0 !Calculate the solver row <-> equations row & interface row mappings. @@ -1226,9 +1226,9 @@ SUBROUTINE SOLVER_MAPPING_CALCULATE(SOLVER_MAPPING,ERR,ERROR,*) !dof_type is 1 for domain local DOFs and 2 for ghost DOFs ALLOCATE(RANK_GLOBAL_COLS_LISTS(2,SOLVER_MAPPING%NUMBER_OF_EQUATIONS_SETS+SOLVER_MAPPING% & & NUMBER_OF_INTERFACE_CONDITIONS,SOLVER_MAPPING%VARIABLES_LIST(solver_matrix_idx)%NUMBER_OF_VARIABLES, & - & 0:computationalEnvironment%numberOfComputationalNodes-1),STAT=ERR) + & 0:computationEnvironment%numberOfComputationNodes-1),STAT=ERR) IF(ERR/=0) CALL FlagError("Could not allocate rank global columns lists.",ERR,ERROR,*999) - DO rank=0,computationalEnvironment%numberOfComputationalNodes-1 + DO rank=0,computationEnvironment%numberOfComputationNodes-1 DO solver_variable_idx=1,SOLVER_MAPPING%VARIABLES_LIST(solver_matrix_idx)%NUMBER_OF_VARIABLES DO equations_idx=1,SOLVER_MAPPING%NUMBER_OF_EQUATIONS_SETS+SOLVER_MAPPING%NUMBER_OF_INTERFACE_CONDITIONS DO dof_type=1,2 @@ -1870,13 +1870,13 @@ SUBROUTINE SOLVER_MAPPING_CALCULATE(SOLVER_MAPPING,ERR,ERROR,*) IF(ERR/=0) CALL FlagError("Could not allocate solver col to equations sets map column dofs mapping.",ERR,ERROR,*999) !!TODO: what is the real number of domains for a solver??? CALL DOMAIN_MAPPINGS_MAPPING_INITIALISE(SOLVER_MAPPING%SOLVER_COL_TO_EQUATIONS_COLS_MAP(solver_matrix_idx)% & - & COLUMN_DOFS_MAPPING,computationalEnvironment%numberOfComputationalNodes,ERR,ERROR,*999) + & COLUMN_DOFS_MAPPING,computationEnvironment%numberOfComputationNodes,ERR,ERROR,*999) COL_DOMAIN_MAPPING=>SOLVER_MAPPING%SOLVER_COL_TO_EQUATIONS_COLS_MAP(solver_matrix_idx)%COLUMN_DOFS_MAPPING ALLOCATE(COL_DOMAIN_MAPPING%GLOBAL_TO_LOCAL_MAP(NUMBER_OF_GLOBAL_SOLVER_DOFS),STAT=ERR) IF(ERR/=0) CALL FlagError("Could not allocate column dofs mapping global to local.",ERR,ERROR,*999) COL_DOMAIN_MAPPING%NUMBER_OF_GLOBAL=NUMBER_OF_GLOBAL_SOLVER_DOFS ALLOCATE(VARIABLE_RANK_PROCESSED(SOLVER_MAPPING%VARIABLES_LIST(solver_matrix_idx)%NUMBER_OF_VARIABLES, & - & 0:computationalEnvironment%numberOfComputationalNodes-1),STAT=ERR) + & 0:computationEnvironment%numberOfComputationNodes-1),STAT=ERR) IF(ERR/=0) CALL FlagError("Could not allocate variable rank processed.",ERR,ERROR,*999) VARIABLE_RANK_PROCESSED=.FALSE. !Calculate the column mappings @@ -2260,7 +2260,7 @@ SUBROUTINE SOLVER_MAPPING_CALCULATE(SOLVER_MAPPING,ERR,ERROR,*) DOF_MAP(solver_variable_idx)%PTR=0 ENDDO !solver_variable_idx - ALLOCATE(solver_local_dof(0:computationalEnvironment%numberOfComputationalNodes-1),STAT=ERR) + ALLOCATE(solver_local_dof(0:computationEnvironment%numberOfComputationNodes-1),STAT=ERR) IF(ERR/=0) CALL FlagError("Could not allocate solver local dof array.",ERR,ERROR,*999) ! @@ -2271,7 +2271,7 @@ SUBROUTINE SOLVER_MAPPING_CALCULATE(SOLVER_MAPPING,ERR,ERROR,*) solver_global_dof=0 solver_local_dof=0 DO dof_type=1,2 - DO rank=0,computationalEnvironment%numberOfComputationalNodes-1 + DO rank=0,computationEnvironment%numberOfComputationNodes-1 DO solver_variable_idx=1,SOLVER_MAPPING%VARIABLES_LIST(solver_matrix_idx)%NUMBER_OF_VARIABLES diff --git a/src/solver_routines.f90 b/src/solver_routines.f90 index 408cc841..9c1f69b5 100644 --- a/src/solver_routines.f90 +++ b/src/solver_routines.f90 @@ -26,7 +26,7 @@ !> Auckland, the University of Oxford and King's College, London. !> All Rights Reserved. !> -!> Contributor(s): +!> Contributor(s): Chris Bradley !> !> Alternatively, the contents of this file may be used under the terms of !> either the GNU General Public License Version 2 or later (the "GPL"), or @@ -52,7 +52,7 @@ MODULE SOLVER_ROUTINES USE CMISS_CELLML USE CmissPetsc USE CmissPetscTypes - USE ComputationEnvironment + USE ComputationRoutines USE Constants USE DISTRIBUTED_MATRIX_VECTOR USE EquationsAccessRoutines @@ -9807,7 +9807,7 @@ SUBROUTINE SOLVER_LINEAR_DIRECT_CREATE_FINISH(LINEAR_DIRECT_SOLVER,ERR,ERROR,*) !Nothing else to do CASE(SOLVER_MUMPS_LIBRARY,SOLVER_SUPERLU_LIBRARY,SOLVER_PASTIX_LIBRARY,SOLVER_LAPACK_LIBRARY) !Set up solver through PETSc - CALL Petsc_KSPCreate(computationalEnvironment%mpiCommunicator,LINEAR_DIRECT_SOLVER%KSP,ERR,ERROR,*999) + CALL Petsc_KSPCreate(computationEnvironment%mpiCommunicator,LINEAR_DIRECT_SOLVER%KSP,ERR,ERROR,*999) !Set any further KSP options from the command line options CALL Petsc_KSPSetFromOptions(LINEAR_DIRECT_SOLVER%KSP,ERR,ERROR,*999) @@ -11060,7 +11060,7 @@ SUBROUTINE SOLVER_LINEAR_ITERATIVE_CREATE_FINISH(LINEAR_ITERATIVE_SOLVER,ERR,ERR CALL FlagError("Solver linking solve is not associated.",ERR,ERROR,*999) ENDIF ELSE - CALL Petsc_KSPCreate(computationalEnvironment%mpiCommunicator,LINEAR_ITERATIVE_SOLVER%KSP,ERR,ERROR,*999) + CALL Petsc_KSPCreate(computationEnvironment%mpiCommunicator,LINEAR_ITERATIVE_SOLVER%KSP,ERR,ERROR,*999) ENDIF !Set the iterative solver type SELECT CASE(LINEAR_ITERATIVE_SOLVER%ITERATIVE_SOLVER_TYPE) @@ -15893,7 +15893,7 @@ SUBROUTINE Solver_QuasiNewtonLinesearchCreateFinish(LINESEARCH_SOLVER,ERR,ERROR, ENDIF ENDDO !interface_idx !Create the PETSc SNES solver - CALL Petsc_SnesCreate(computationalEnvironment%mpiCommunicator,LINESEARCH_SOLVER%snes,ERR,ERROR,*999) + CALL Petsc_SnesCreate(computationEnvironment%mpiCommunicator,LINESEARCH_SOLVER%snes,ERR,ERROR,*999) !Set the nonlinear solver type to be a Quasi-Newton line search solver CALL Petsc_SnesSetType(LINESEARCH_SOLVER%snes,PETSC_SNESQN,ERR,ERROR,*999) !Following routines don't work for petsc version < 3.5. @@ -17075,7 +17075,7 @@ SUBROUTINE Solver_QuasiNewtonTrustRegionCreateFinish(TRUSTREGION_SOLVER,ERR,ERRO END SELECT CALL SOLVER_MATRICES_CREATE_FINISH(SOLVER_MATRICES,ERR,ERROR,*999) !Create the PETSc SNES solver - CALL Petsc_SnesCreate(computationalEnvironment%mpiCommunicator,TRUSTREGION_SOLVER%snes,ERR,ERROR,*999) + CALL Petsc_SnesCreate(computationEnvironment%mpiCommunicator,TRUSTREGION_SOLVER%snes,ERR,ERROR,*999) !Set the nonlinear solver type to be a Quasi-Newton trust region solver CALL Petsc_SnesSetType(TRUSTREGION_SOLVER%snes,PETSC_SNESNEWTONTR,ERR,ERROR,*999) !Set the nonlinear function @@ -18667,7 +18667,7 @@ SUBROUTINE SOLVER_NEWTON_LINESEARCH_CREATE_FINISH(LINESEARCH_SOLVER,ERR,ERROR,*) ENDIF ENDDO !interface_idx !Create the PETSc SNES solver - CALL Petsc_SnesCreate(computationalEnvironment%mpiCommunicator,LINESEARCH_SOLVER%snes,ERR,ERROR,*999) + CALL Petsc_SnesCreate(computationEnvironment%mpiCommunicator,LINESEARCH_SOLVER%snes,ERR,ERROR,*999) !Set the nonlinear solver type to be a Newton line search solver CALL Petsc_SnesSetType(LINESEARCH_SOLVER%snes,PETSC_SNESNEWTONLS,ERR,ERROR,*999) @@ -19832,7 +19832,7 @@ SUBROUTINE SOLVER_NEWTON_TRUSTREGION_CREATE_FINISH(TRUSTREGION_SOLVER,ERR,ERROR, END SELECT CALL SOLVER_MATRICES_CREATE_FINISH(SOLVER_MATRICES,ERR,ERROR,*999) !Create the PETSc SNES solver - CALL Petsc_SnesCreate(computationalEnvironment%mpiCommunicator,TRUSTREGION_SOLVER%snes,ERR,ERROR,*999) + CALL Petsc_SnesCreate(computationEnvironment%mpiCommunicator,TRUSTREGION_SOLVER%snes,ERR,ERROR,*999) !Set the nonlinear solver type to be a Newton trust region solver CALL Petsc_SnesSetType(TRUSTREGION_SOLVER%snes,PETSC_SNESNEWTONTR,ERR,ERROR,*999) !Set the solver as the SNES application context diff --git a/src/types.f90 b/src/types.f90 index a42ca135..1f9b0398 100644 --- a/src/types.f90 +++ b/src/types.f90 @@ -26,7 +26,7 @@ !> Auckland, the University of Oxford and King's College, London. !> All Rights Reserved. !> -!> Contributor(s): +!> Contributor(s): Chris Bradley !> !> Alternatively, the contents of this file may be used under the terms of !> either the GNU General Public License Version 2 or later (the "GPL"), or @@ -1093,8 +1093,8 @@ MODULE Types INTEGER(INTG) :: numberOfDataPoints !>NOTE: ",A)') "It doesn't make any sense to use more than 2 computational nodes for this example?" +! IF (NumberOfComputationNodes .gt. 2) +! WRITE(*,'(">>NOTE: ",A)') "It doesn't make any sense to use more than 2 computation nodes for this example?" ! STOP ! ENDIF @@ -248,7 +248,7 @@ PROGRAM CELLMLINTEGRATIONFORTRANEXAMPLE CALL cmfe_Decomposition_CreateStart(DecompositionUserNumber,Mesh,Decomposition,Err) !Set the decomposition to be a general decomposition with the specified number of domains CALL cmfe_Decomposition_TypeSet(Decomposition,CMFE_DECOMPOSITION_CALCULATED_TYPE,Err) - CALL cmfe_Decomposition_NumberOfDomainsSet(Decomposition,NumberOfComputationalNodes,Err) + CALL cmfe_Decomposition_NumberOfDomainsSet(Decomposition,NumberOfComputationNodes,Err) !Finish the decomposition CALL cmfe_Decomposition_CreateFinish(Decomposition,Err) @@ -384,7 +384,7 @@ PROGRAM CELLMLINTEGRATIONFORTRANEXAMPLE !Set the Stimulus all nodes? DO node_idx=1,NUMBER_OF_ELEMENTS+1 CALL cmfe_Decomposition_NodeDomainGet(Decomposition,node_idx,1,NodeDomain,Err) - IF(NodeDomain==ComputationalNodeNumber) THEN + IF(NodeDomain==ComputationNodeNumber) THEN CALL cmfe_Field_ParameterSetUpdateNode(CellMLParametersField,CMFE_FIELD_U_VARIABLE_TYPE,CMFE_FIELD_VALUES_SET_TYPE,1,1, & & node_idx,stimcomponent,STIM_VALUE,Err) ENDIF @@ -396,7 +396,7 @@ PROGRAM CELLMLINTEGRATIONFORTRANEXAMPLE ! !Loop over the nodes ! DO node_idx=1,LastNodeNumber ! CALL cmfe_Decomposition_NodeDomainGet(Decomposition,node_idx,1,NodeDomain,Err) -! IF(NodeDomain==ComputationalNodeNumber) THEN +! IF(NodeDomain==ComputationNodeNumber) THEN ! CALL cmfe_Field_ParameterSetGetNode(GeometricField,CMFE_FIELD_U_VARIABLE_TYPE,CMFE_FIELD_VALUES_SET_TYPE,1,1,node_idx,1, & ! & X,Err) ! CALL cmfe_Field_ParameterSetGetNode(GeometricField,CMFE_FIELD_U_VARIABLE_TYPE,CMFE_FIELD_VALUES_SET_TYPE,1,1,node_idx,2, & @@ -488,11 +488,11 @@ PROGRAM CELLMLINTEGRATIONFORTRANEXAMPLE CALL cmfe_BoundaryConditions_Initialise(BoundaryConditions,Err) CALL cmfe_SolverEquations_BoundaryConditionsCreateStart(SolverEquations,BoundaryConditions,Err) !Set the first node to 0.0 and the last node to 1.0 - IF(FirstNodeDomain==ComputationalNodeNumber) THEN + IF(FirstNodeDomain==ComputationNodeNumber) THEN !CALL cmfe_BoundaryConditions_SetNode(BoundaryConditions,DependentField,CMFE_FIELD_U_VARIABLE_TYPE,1,1,FirstNodeNumber,1, & ! & CMFE_BOUNDARY_CONDITION_FIXED,0.0_CMISSRP,Err) ENDIF - IF(LastNodeDomain==ComputationalNodeNumber) THEN + IF(LastNodeDomain==ComputationNodeNumber) THEN !CALL cmfe_BoundaryConditions_SetNode(BoundaryConditions,DependentField,CMFE_FIELD_U_VARIABLE_TYPE,1,1,LastNodeNumber,1, & ! & CMFE_BOUNDARY_CONDITION_FIXED,1.0_CMISSRP,Err) ENDIF @@ -506,7 +506,7 @@ PROGRAM CELLMLINTEGRATIONFORTRANEXAMPLE !Set the Stimulus at node 1 DO node_idx=1,NUMBER_OF_ELEMENTS+1 CALL cmfe_Decomposition_NodeDomainGet(Decomposition,node_idx,1,NodeDomain,Err) - IF(NodeDomain==ComputationalNodeNumber) THEN + IF(NodeDomain==ComputationNodeNumber) THEN CALL cmfe_Field_ParameterSetUpdateNode(CellMLParametersField,CMFE_FIELD_U_VARIABLE_TYPE,CMFE_FIELD_VALUES_SET_TYPE,1,1, & & node_idx,stimcomponent,0.0_CMISSRP,Err) ENDIF diff --git a/tests/CellML/Monodomain.f90 b/tests/CellML/Monodomain.f90 index a89b230c..a8ef4804 100644 --- a/tests/CellML/Monodomain.f90 +++ b/tests/CellML/Monodomain.f90 @@ -139,7 +139,7 @@ PROGRAM MONODOMAINEXAMPLE !Generic CMISS variables - INTEGER(CMISSIntg) :: NumberOfComputationalNodes,ComputationalNodeNumber + INTEGER(CMISSIntg) :: NumberOfComputationNodes,ComputationNodeNumber INTEGER(CMISSIntg) :: EquationsSetIndex,CellMLIndex INTEGER(CMISSIntg) :: FirstNodeNumber,LastNodeNumber INTEGER(CMISSIntg) :: FirstNodeDomain,LastNodeDomain,NodeDomain @@ -180,9 +180,9 @@ PROGRAM MONODOMAINEXAMPLE !Trap errors CALL cmfe_ErrorHandlingModeSet(CMFE_ERRORS_TRAP_ERROR,Err) - !Get the computational nodes information - CALL cmfe_ComputationalNumberOfNodesGet(NumberOfComputationalNodes,Err) - CALL cmfe_ComputationalNodeNumberGet(ComputationalNodeNumber,Err) + !Get the computation nodes information + CALL cmfe_ComputationNumberOfNodesGet(NumberOfComputationNodes,Err) + CALL cmfe_ComputationNodeNumberGet(ComputationNodeNumber,Err) !CALL cmfe_OutputSetOn("Monodomain",Err) @@ -250,7 +250,7 @@ PROGRAM MONODOMAINEXAMPLE CALL cmfe_Decomposition_CreateStart(DecompositionUserNumber,Mesh,Decomposition,Err) !Set the decomposition to be a general decomposition with the specified number of domains CALL cmfe_Decomposition_TypeSet(Decomposition,CMFE_DECOMPOSITION_CALCULATED_TYPE,Err) - CALL cmfe_Decomposition_NumberOfDomainsSet(Decomposition,NumberOfComputationalNodes,Err) + CALL cmfe_Decomposition_NumberOfDomainsSet(Decomposition,NumberOfComputationNodes,Err) !Finish the decomposition CALL cmfe_Decomposition_CreateFinish(Decomposition,Err) @@ -397,7 +397,7 @@ PROGRAM MONODOMAINEXAMPLE !Set the Stimulus at half the bottom nodes DO node_idx=1,NUMBER_OF_ELEMENTS/2 CALL cmfe_Decomposition_NodeDomainGet(Decomposition,node_idx,1,NodeDomain,Err) - IF(NodeDomain==ComputationalNodeNumber) THEN + IF(NodeDomain==ComputationNodeNumber) THEN CALL cmfe_Field_ParameterSetUpdateNode(CellMLParametersField,CMFE_FIELD_U_VARIABLE_TYPE,CMFE_FIELD_VALUES_SET_TYPE,1,1, & & node_idx,stimcomponent,STIM_VALUE,Err) ENDIF @@ -409,7 +409,7 @@ PROGRAM MONODOMAINEXAMPLE !Loop over the nodes DO node_idx=1,LastNodeNumber CALL cmfe_Decomposition_NodeDomainGet(Decomposition,node_idx,1,NodeDomain,Err) - IF(NodeDomain==ComputationalNodeNumber) THEN + IF(NodeDomain==ComputationNodeNumber) THEN CALL cmfe_Field_ParameterSetGetNode(GeometricField,CMFE_FIELD_U_VARIABLE_TYPE,CMFE_FIELD_VALUES_SET_TYPE,1,1,node_idx,1, & & X,Err) CALL cmfe_Field_ParameterSetGetNode(GeometricField,CMFE_FIELD_U_VARIABLE_TYPE,CMFE_FIELD_VALUES_SET_TYPE,1,1,node_idx,2, & @@ -500,11 +500,11 @@ PROGRAM MONODOMAINEXAMPLE CALL cmfe_BoundaryConditions_Initialise(BoundaryConditions,Err) CALL cmfe_SolverEquations_BoundaryConditionsCreateStart(SolverEquations,BoundaryConditions,Err) !Set the first node to 0.0 and the last node to 1.0 - IF(FirstNodeDomain==ComputationalNodeNumber) THEN + IF(FirstNodeDomain==ComputationNodeNumber) THEN !CALL cmfe_BoundaryConditions_SetNode(BoundaryConditions,DependentField,CMFE_FIELD_U_VARIABLE_TYPE,1,1,FirstNodeNumber,1, & ! & CMFE_BOUNDARY_CONDITION_FIXED,0.0_CMISSRP,Err) ENDIF - IF(LastNodeDomain==ComputationalNodeNumber) THEN + IF(LastNodeDomain==ComputationNodeNumber) THEN !CALL cmfe_BoundaryConditions_SetNode(BoundaryConditions,DependentField,CMFE_FIELD_U_VARIABLE_TYPE,1,1,LastNodeNumber,1, & ! & CMFE_BOUNDARY_CONDITION_FIXED,1.0_CMISSRP,Err) ENDIF @@ -518,7 +518,7 @@ PROGRAM MONODOMAINEXAMPLE !Set the Stimulus at node 1 DO node_idx=1,NUMBER_OF_ELEMENTS/2 CALL cmfe_Decomposition_NodeDomainGet(Decomposition,node_idx,1,NodeDomain,Err) - IF(NodeDomain==ComputationalNodeNumber) THEN + IF(NodeDomain==ComputationNodeNumber) THEN CALL cmfe_Field_ParameterSetUpdateNode(CellMLParametersField,CMFE_FIELD_U_VARIABLE_TYPE,CMFE_FIELD_VALUES_SET_TYPE,1,1, & & node_idx,stimcomponent,0.0_CMISSRP,Err) ENDIF diff --git a/tests/ClassicalField/AnalyticHelmholtz.f90 b/tests/ClassicalField/AnalyticHelmholtz.f90 index 34eb7922..ae6c2363 100644 --- a/tests/ClassicalField/AnalyticHelmholtz.f90 +++ b/tests/ClassicalField/AnalyticHelmholtz.f90 @@ -281,7 +281,7 @@ SUBROUTINE ANALYTICHELMHOLTZ_GENERIC(NUMBER_GLOBAL_X_ELEMENTS,NUMBER_GLOBAL_Y_EL NUMBER_OF_DOMAINS=1 - !Broadcast the number of elements in the X & Y directions and the number of partitions to the other computational nodes + !Broadcast the number of elements in the X & Y directions and the number of partitions to the other computation nodes CALL MPI_BCAST(NUMBER_GLOBAL_X_ELEMENTS,1,MPI_INTEGER,0,MPI_COMM_WORLD,MPI_IERROR) CALL MPI_BCAST(NUMBER_GLOBAL_Y_ELEMENTS,1,MPI_INTEGER,0,MPI_COMM_WORLD,MPI_IERROR) CALL MPI_BCAST(NUMBER_GLOBAL_Z_ELEMENTS,1,MPI_INTEGER,0,MPI_COMM_WORLD,MPI_IERROR) diff --git a/tests/ClassicalField/AnalyticLaplace.f90 b/tests/ClassicalField/AnalyticLaplace.f90 index 0deec29a..91522b43 100644 --- a/tests/ClassicalField/AnalyticLaplace.f90 +++ b/tests/ClassicalField/AnalyticLaplace.f90 @@ -381,7 +381,7 @@ SUBROUTINE ANALYTICLAPLACE_GENERIC(NUMBER_GLOBAL_X_ELEMENTS,NUMBER_GLOBAL_Y_ELEM NUMBER_OF_DOMAINS=1 - !Broadcast the number of elements in the X & Y directions and the number of partitions to the other computational nodes + !Broadcast the number of elements in the X & Y directions and the number of partitions to the other computation nodes CALL MPI_BCAST(NUMBER_GLOBAL_X_ELEMENTS,1,MPI_INTEGER,0,MPI_COMM_WORLD,MPI_IERROR) CALL MPI_BCAST(NUMBER_GLOBAL_Y_ELEMENTS,1,MPI_INTEGER,0,MPI_COMM_WORLD,MPI_IERROR) CALL MPI_BCAST(NUMBER_GLOBAL_Z_ELEMENTS,1,MPI_INTEGER,0,MPI_COMM_WORLD,MPI_IERROR) diff --git a/tests/ClassicalField/AnalyticNonlinearPoisson.f90 b/tests/ClassicalField/AnalyticNonlinearPoisson.f90 index 3e96d89f..a40f8769 100644 --- a/tests/ClassicalField/AnalyticNonlinearPoisson.f90 +++ b/tests/ClassicalField/AnalyticNonlinearPoisson.f90 @@ -116,7 +116,7 @@ PROGRAM NONLINEARPOISSONEXAMPLE INTEGER(CMISSIntg) :: EquationsSetIndex INTEGER(CMISSIntg) :: Err - INTEGER(CMISSIntg) :: NumberOfComputationalNodes,ComputationalNodeNumber + INTEGER(CMISSIntg) :: NumberOfComputationNodes,ComputationNodeNumber #ifdef WIN32 !Quickwin type @@ -179,9 +179,9 @@ PROGRAM NONLINEARPOISSONEXAMPLE !Output to a file CALL cmfe_OutputSetOn("NonlinearPoisson",Err) - !Get the computational nodes information - CALL cmfe_ComputationalNumberOfNodesGet(NumberOfComputationalNodes,Err) - CALL cmfe_ComputationalNodeNumberGet(ComputationalNodeNumber,Err) + !Get the computation nodes information + CALL cmfe_ComputationNumberOfNodesGet(NumberOfComputationNodes,Err) + CALL cmfe_ComputationNodeNumberGet(ComputationNodeNumber,Err) !Start the creation of a new RC coordinate system CALL cmfe_CoordinateSystem_Initialise(CoordinateSystem,Err) @@ -268,7 +268,7 @@ PROGRAM NONLINEARPOISSONEXAMPLE CALL cmfe_Decomposition_CreateStart(DecompositionUserNumber,Mesh,Decomposition,Err) !Set the decomposition to be a general decomposition with the specified number of domains CALL cmfe_Decomposition_TypeSet(Decomposition,CMFE_DECOMPOSITION_CALCULATED_TYPE,Err) - CALL cmfe_Decomposition_NumberOfDomainsSet(Decomposition,NumberOfComputationalNodes,Err) + CALL cmfe_Decomposition_NumberOfDomainsSet(Decomposition,NumberOfComputationNodes,Err) !Finish the decomposition CALL cmfe_Decomposition_CreateFinish(Decomposition,Err) diff --git a/tests/ClassicalField/Laplace.f90 b/tests/ClassicalField/Laplace.f90 index c4ff1b80..b84b501f 100644 --- a/tests/ClassicalField/Laplace.f90 +++ b/tests/ClassicalField/Laplace.f90 @@ -119,7 +119,7 @@ PROGRAM LAPLACEEXAMPLE !Generic CMISS variables - INTEGER(CMISSIntg) :: NumberOfComputationalNodes,ComputationalNodeNumber + INTEGER(CMISSIntg) :: NumberOfComputationNodes,ComputationNodeNumber INTEGER(CMISSIntg) :: EquationsSetIndex INTEGER(CMISSIntg) :: FirstNodeNumber,LastNodeNumber INTEGER(CMISSIntg) :: FirstNodeDomain,LastNodeDomain @@ -183,9 +183,9 @@ PROGRAM LAPLACEEXAMPLE CALL cmfe_OutputSetOn(Filename,Err) - !Get the computational nodes information - CALL cmfe_ComputationalNumberOfNodesGet(NumberOfComputationalNodes,Err) - CALL cmfe_ComputationalNodeNumberGet(ComputationalNodeNumber,Err) + !Get the computation nodes information + CALL cmfe_ComputationNumberOfNodesGet(NumberOfComputationNodes,Err) + CALL cmfe_ComputationNodeNumberGet(ComputationNodeNumber,Err) !Start the creation of a new RC coordinate system CALL cmfe_CoordinateSystem_Initialise(CoordinateSystem,Err) @@ -273,7 +273,7 @@ PROGRAM LAPLACEEXAMPLE CALL cmfe_Decomposition_CreateStart(DecompositionUserNumber,Mesh,Decomposition,Err) !Set the decomposition to be a general decomposition with the specified number of domains CALL cmfe_Decomposition_TypeSet(Decomposition,CMFE_DECOMPOSITION_CALCULATED_TYPE,Err) - CALL cmfe_Decomposition_NumberOfDomainsSet(Decomposition,NumberOfComputationalNodes,Err) + CALL cmfe_Decomposition_NumberOfDomainsSet(Decomposition,NumberOfComputationNodes,Err) !Finish the decomposition CALL cmfe_Decomposition_CreateFinish(Decomposition,Err) @@ -394,11 +394,11 @@ PROGRAM LAPLACEEXAMPLE CALL cmfe_Nodes_NumberOfNodesGet(Nodes,LastNodeNumber,Err) CALL cmfe_Decomposition_NodeDomainGet(Decomposition,FirstNodeNumber,1,FirstNodeDomain,Err) CALL cmfe_Decomposition_NodeDomainGet(Decomposition,LastNodeNumber,1,LastNodeDomain,Err) - IF(FirstNodeDomain==ComputationalNodeNumber) THEN + IF(FirstNodeDomain==ComputationNodeNumber) THEN CALL cmfe_BoundaryConditions_SetNode(BoundaryConditions,DependentField,CMFE_FIELD_U_VARIABLE_TYPE,1,1,FirstNodeNumber,1, & & CMFE_BOUNDARY_CONDITION_FIXED,0.0_CMISSRP,Err) ENDIF - IF(LastNodeDomain==ComputationalNodeNumber) THEN + IF(LastNodeDomain==ComputationNodeNumber) THEN CALL cmfe_BoundaryConditions_SetNode(BoundaryConditions,DependentField,CMFE_FIELD_U_VARIABLE_TYPE,1,1,LastNodeNumber,1, & & CMFE_BOUNDARY_CONDITION_FIXED,1.0_CMISSRP,Err) ENDIF diff --git a/tests/FieldML_IO/cube.f90 b/tests/FieldML_IO/cube.f90 index e8b7b595..fa1ff835 100644 --- a/tests/FieldML_IO/cube.f90 +++ b/tests/FieldML_IO/cube.f90 @@ -121,15 +121,15 @@ SUBROUTINE ReadCube(worldRegion, inputFilename, region, mesh, geometricField, & TYPE(cmfe_DecompositionType) :: decomposition TYPE(cmfe_NodesType) :: nodes TYPE(cmfe_FieldMLIOType) :: fieldmlInfo - INTEGER(CMISSIntg) :: numberOfComputationalNodes, computationalNodeNumber + INTEGER(CMISSIntg) :: numberOfComputationNodes, computationNodeNumber INTEGER(CMISSIntg) :: err err = 0 - ! Get computational nodes information + ! Get computation nodes information - CALL cmfe_ComputationalNumberOfNodesGet(numberOfComputationalNodes, err) - CALL cmfe_ComputationalNodeNumberGet(computationalNodeNumber, err) + CALL cmfe_ComputationNumberOfNodesGet(numberOfComputationNodes, err) + CALL cmfe_ComputationNodeNumberGet(computationNodeNumber, err) ! Initialise FieldML and parse input file @@ -178,7 +178,7 @@ SUBROUTINE ReadCube(worldRegion, inputFilename, region, mesh, geometricField, & CALL cmfe_Decomposition_Initialise(decomposition, err) CALL cmfe_Decomposition_CreateStart(AUTO_USER_NUMBER(), mesh, decomposition, err) CALL cmfe_Decomposition_TypeSet(decomposition, CMFE_DECOMPOSITION_ALL_TYPE, err) - CALL cmfe_Decomposition_NumberOfDomainsSet(decomposition, numberOfComputationalNodes, err) + CALL cmfe_Decomposition_NumberOfDomainsSet(decomposition, numberOfComputationNodes, err) CALL cmfe_Decomposition_CreateFinish(decomposition, err) ! Define Geometric Field diff --git a/tests/FieldML_IO/fieldml_io.f90 b/tests/FieldML_IO/fieldml_io.f90 index 7fbfcad2..170f1871 100644 --- a/tests/FieldML_IO/fieldml_io.f90 +++ b/tests/FieldML_IO/fieldml_io.f90 @@ -53,7 +53,7 @@ PROGRAM IRON_TEST_FIELDML_IO ! Generic CMISS variables - INTEGER(CMISSIntg) :: numberOfComputationalNodes, computationalNodeNumber + INTEGER(CMISSIntg) :: numberOfComputationNodes, computationNodeNumber INTEGER(CMISSIntg) :: err CALL INITIALISE_TESTS() @@ -63,10 +63,10 @@ PROGRAM IRON_TEST_FIELDML_IO CALL cmfe_Initialise(worldCoordinateSystem, worldRegion, err) CALL cmfe_ErrorHandlingModeSet(CMFE_ERRORS_TRAP_ERROR, err) - ! Get computational nodes information + ! Get computation nodes information - CALL cmfe_ComputationalNumberOfNodesGet(numberOfComputationalNodes, err) - CALL cmfe_ComputationalNodeNumberGet(computationalNodeNumber, err) + CALL cmfe_ComputationNumberOfNodesGet(numberOfComputationNodes, err) + CALL cmfe_ComputationNodeNumberGet(computationNodeNumber, err) CALL TestFieldMLIOCube(worldRegion) CALL TestFieldMLArguments(worldRegion) diff --git a/tests/FiniteElasticity/Cantilever.f90 b/tests/FiniteElasticity/Cantilever.f90 index 22184bc8..be9ef1ca 100644 --- a/tests/FiniteElasticity/Cantilever.f90 +++ b/tests/FiniteElasticity/Cantilever.f90 @@ -98,7 +98,7 @@ PROGRAM CANTILEVEREXAMPLE !Program variables INTEGER(CMISSIntg) :: NumberGlobalXElements,NumberGlobalYElements,NumberGlobalZElements INTEGER(CMISSIntg) :: EquationsSetIndex - INTEGER(CMISSIntg) :: NumberOfComputationalNodes,NumberOfDomains,ComputationalNodeNumber + INTEGER(CMISSIntg) :: NumberOfComputationNodes,NumberOfDomains,ComputationNodeNumber INTEGER(CMISSIntg) :: NodeNumber,NodeDomain,node_idx,component_idx,deriv_idx INTEGER(CMISSIntg),ALLOCATABLE :: LeftSurfaceNodes(:) INTEGER(CMISSIntg) :: LeftNormalXi @@ -208,11 +208,11 @@ PROGRAM CANTILEVEREXAMPLE WRITE(*,'("Elements: ", 3 i3)') NumberGlobalXElements,NumberGlobalYElements,NumberGlobalZElements WRITE(*,'("Scaling type: ", i3)') ScalingType - !Get the number of computational nodes and this computational node number - CALL cmfe_ComputationalNumberOfNodesGet(NumberOfComputationalNodes,Err) - CALL cmfe_ComputationalNodeNumberGet(ComputationalNodeNumber,Err) + !Get the number of computation nodes and this computation node number + CALL cmfe_ComputationNumberOfNodesGet(NumberOfComputationNodes,Err) + CALL cmfe_ComputationNodeNumberGet(ComputationNodeNumber,Err) - NumberOfDomains=NumberOfComputationalNodes + NumberOfDomains=NumberOfComputationNodes !Create a 3D rectangular cartesian coordinate system CALL cmfe_CoordinateSystem_Initialise(CoordinateSystem,Err) @@ -430,7 +430,7 @@ PROGRAM CANTILEVEREXAMPLE DO node_idx=1,SIZE(LeftSurfaceNodes,1) NodeNumber=LeftSurfaceNodes(node_idx) CALL cmfe_Decomposition_NodeDomainGet(Decomposition,NodeNumber,1,NodeDomain,Err) - IF(NodeDomain==ComputationalNodeNumber) THEN + IF(NodeDomain==ComputationNodeNumber) THEN DO component_idx=1,3 CALL cmfe_BoundaryConditions_AddNode(BoundaryConditions,DependentField,CMFE_FIELD_U_VARIABLE_TYPE,1,1,NodeNumber, & & component_idx,CMFE_BOUNDARY_CONDITION_FIXED,0.0_CMISSRP,Err) diff --git a/tests/FiniteElasticity/SimpleShear.f90 b/tests/FiniteElasticity/SimpleShear.f90 index fecaa8d4..73cc83fe 100644 --- a/tests/FiniteElasticity/SimpleShear.f90 +++ b/tests/FiniteElasticity/SimpleShear.f90 @@ -100,7 +100,7 @@ PROGRAM SIMPLESHEAREXAMPLE INTEGER(CMISSIntg) :: NumberGlobalXElements,NumberGlobalYElements,NumberGlobalZElements INTEGER(CMISSIntg) :: EquationsSetIndex - INTEGER(CMISSIntg) :: NumberOfComputationalNodes,NumberOfDomains,ComputationalNodeNumber + INTEGER(CMISSIntg) :: NumberOfComputationNodes,NumberOfDomains,ComputationNodeNumber INTEGER(CMISSIntg) :: NodeNumber,NodeDomain,node_idx INTEGER(CMISSIntg),ALLOCATABLE :: LeftSurfaceNodes(:) INTEGER(CMISSIntg),ALLOCATABLE :: RightSurfaceNodes(:) @@ -158,14 +158,14 @@ PROGRAM SIMPLESHEAREXAMPLE CALL cmfe_OutputSetOn("SimpleShear",Err) - !Get the number of computational nodes and this computational node number - CALL cmfe_ComputationalNumberOfNodesGet(NumberOfComputationalNodes,Err) - CALL cmfe_ComputationalNodeNumberGet(ComputationalNodeNumber,Err) + !Get the number of computation nodes and this computation node number + CALL cmfe_ComputationNumberOfNodesGet(NumberOfComputationNodes,Err) + CALL cmfe_ComputationNodeNumberGet(ComputationNodeNumber,Err) NumberGlobalXElements=2 NumberGlobalYElements=2 NumberGlobalZElements=2 - NumberOfDomains=NumberOfComputationalNodes + NumberOfDomains=NumberOfComputationNodes !Create a 3D rectangular cartesian coordinate system CALL cmfe_CoordinateSystem_Initialise(CoordinateSystem,Err) @@ -396,7 +396,7 @@ PROGRAM SIMPLESHEAREXAMPLE DO node_idx=1,SIZE(TopSurfaceNodes,1) NodeNumber=TopSurfaceNodes(node_idx) CALL cmfe_Decomposition_NodeDomainGet(Decomposition,NodeNumber,1,NodeDomain,Err) - IF(NodeDomain==ComputationalNodeNumber) THEN + IF(NodeDomain==ComputationNodeNumber) THEN ! x-direction CALL cmfe_Field_ParameterSetGetNode(GeometricField,CMFE_FIELD_U_VARIABLE_TYPE,CMFE_FIELD_VALUES_SET_TYPE,1,1,NodeNumber,1,& & VALUE,Err) @@ -419,7 +419,7 @@ PROGRAM SIMPLESHEAREXAMPLE DO node_idx=1,SIZE(BottomSurfaceNodes,1) NodeNumber=BottomSurfaceNodes(node_idx) CALL cmfe_Decomposition_NodeDomainGet(Decomposition,NodeNumber,1,NodeDomain,Err) - IF(NodeDomain==ComputationalNodeNumber) THEN + IF(NodeDomain==ComputationNodeNumber) THEN ! x-direction CALL cmfe_Field_ParameterSetGetNode(GeometricField,CMFE_FIELD_U_VARIABLE_TYPE,CMFE_FIELD_VALUES_SET_TYPE,1,1,NodeNumber,1,& & VALUE,Err) diff --git a/tests/LinearElasticity/CantileverBeam.f90 b/tests/LinearElasticity/CantileverBeam.f90 index ad59c101..f7435318 100644 --- a/tests/LinearElasticity/CantileverBeam.f90 +++ b/tests/LinearElasticity/CantileverBeam.f90 @@ -185,7 +185,7 @@ SUBROUTINE ANALYTIC_LINEAR_ELASTICITY_GENERIC(NumberGlobalXElements,NumberGlobal INTEGER(CMISSIntg) :: FieldGeometryNumberOfComponents,FieldDependentNumberOfComponents,NumberOfElements(3) INTEGER(CMISSIntg) :: MPI_IERROR INTEGER(CMISSIntg) :: EquationsSetIndex,FieldComponentIndex,FieldMaterialNumberOfComponents,NumberOfXi - INTEGER(CMISSIntg) :: NumberOfComputationalNodes,ComputationalNodeNumber + INTEGER(CMISSIntg) :: NumberOfComputationNodes,ComputationNodeNumber !CMISS variables @@ -232,11 +232,11 @@ SUBROUTINE ANALYTIC_LINEAR_ELASTICITY_GENERIC(NumberGlobalXElements,NumberGlobal FieldGeometryNumberOfComponents=NumberOfXi FieldDependentNumberOfComponents=NumberOfXi - !Get the number of computational nodes and this computational node number - CALL cmfe_ComputationalNumberOfNodesGet(NumberOfComputationalNodes,Err) - CALL cmfe_ComputationalNodeNumberGet(ComputationalNodeNumber,Err) + !Get the number of computation nodes and this computation node number + CALL cmfe_ComputationNumberOfNodesGet(NumberOfComputationNodes,Err) + CALL cmfe_ComputationNodeNumberGet(ComputationNodeNumber,Err) - !Broadcast the number of elements in the X,Y and Z directions and the number of partitions to the other computational nodes + !Broadcast the number of elements in the X,Y and Z directions and the number of partitions to the other computation nodes CALL MPI_BCAST(NumberGlobalXElements,1,MPI_INTEGER,0,MPI_COMM_WORLD,MPI_IERROR) CALL MPI_BCAST(NumberGlobalYElements,1,MPI_INTEGER,0,MPI_COMM_WORLD,MPI_IERROR) CALL MPI_BCAST(NumberGlobalZElements,1,MPI_INTEGER,0,MPI_COMM_WORLD,MPI_IERROR) diff --git a/tests/LinearElasticity/Extension.f90 b/tests/LinearElasticity/Extension.f90 index 983ff9e2..f286bdd4 100644 --- a/tests/LinearElasticity/Extension.f90 +++ b/tests/LinearElasticity/Extension.f90 @@ -237,7 +237,7 @@ SUBROUTINE ANALYTIC_LINEAR_ELASTICITY_GENERIC(NumberGlobalXElements,NumberGlobal INTEGER(CMISSIntg) :: FieldGeometryNumberOfComponents,FieldDependentNumberOfComponents,NumberOfElements(3) INTEGER(CMISSIntg) :: MPI_IERROR INTEGER(CMISSIntg) :: EquationsSetIndex,FieldComponentIndex,FieldMaterialNumberOfComponents,NumberOfXi - INTEGER(CMISSIntg) :: NumberOfComputationalNodes,ComputationalNodeNumber + INTEGER(CMISSIntg) :: NumberOfComputationNodes,ComputationNodeNumber !CMISS variables @@ -284,11 +284,11 @@ SUBROUTINE ANALYTIC_LINEAR_ELASTICITY_GENERIC(NumberGlobalXElements,NumberGlobal FieldGeometryNumberOfComponents=NumberOfXi FieldDependentNumberOfComponents=NumberOfXi - !Get the number of computational nodes and this computational node number - CALL cmfe_ComputationalNumberOfNodesGet(NumberOfComputationalNodes,Err) - CALL cmfe_ComputationalNodeNumberGet(ComputationalNodeNumber,Err) + !Get the number of computation nodes and this computation node number + CALL cmfe_ComputationNumberOfNodesGet(NumberOfComputationNodes,Err) + CALL cmfe_ComputationNodeNumberGet(ComputationNodeNumber,Err) - !Broadcast the number of elements in the X,Y and Z directions and the number of partitions to the other computational nodes + !Broadcast the number of elements in the X,Y and Z directions and the number of partitions to the other computation nodes CALL MPI_BCAST(NumberGlobalXElements,1,MPI_INTEGER,0,MPI_COMM_WORLD,MPI_IERROR) CALL MPI_BCAST(NumberGlobalYElements,1,MPI_INTEGER,0,MPI_COMM_WORLD,MPI_IERROR) CALL MPI_BCAST(NumberGlobalZElements,1,MPI_INTEGER,0,MPI_COMM_WORLD,MPI_IERROR) From 4e8040f6d3fa3033d0910558467055491a45d093 Mon Sep 17 00:00:00 2001 From: Chris Bradley Date: Mon, 25 Sep 2017 11:28:38 +1300 Subject: [PATCH 02/13] Tidy up computation routines. Make mpiCommunicator mpiWorldCommunicator and make numberOfComputationNodes and myComputationNodeNumber to be numberOfWorldComputationNodes and myWorldComputationNodeNumber --- src/Navier_Stokes_equations_routines.f90 | 71 +-- src/analytic_analysis_routines.f90 | 40 +- src/base_routines.f90 | 36 +- src/boundary_condition_routines.f90 | 24 +- src/cmiss.f90 | 32 +- src/computation_routines.f90 | 608 ++++++++++++------- src/data_projection_routines.f90 | 46 +- src/distributed_matrix_vector.f90 | 42 +- src/domain_mappings.f90 | 18 +- src/equations_set_routines.f90 | 12 +- src/field_IO_routines.f90 | 228 +++---- src/field_routines.f90 | 14 +- src/fieldml_input_routines.f90 | 6 +- src/fieldml_output_routines.f90 | 6 +- src/finite_elasticity_routines.f90 | 22 +- src/mesh_routines.f90 | 38 +- src/opencmiss_iron.f90 | 31 +- src/reaction_diffusion_IO_routines.f90 | 238 ++++---- src/reaction_diffusion_equation_routines.f90 | 18 +- src/solver_mapping_routines.f90 | 26 +- src/solver_routines.f90 | 12 +- 21 files changed, 878 insertions(+), 690 deletions(-) diff --git a/src/Navier_Stokes_equations_routines.f90 b/src/Navier_Stokes_equations_routines.f90 index 2522dadc..331aeb16 100644 --- a/src/Navier_Stokes_equations_routines.f90 +++ b/src/Navier_Stokes_equations_routines.f90 @@ -12560,7 +12560,7 @@ SUBROUTINE NavierStokes_CalculateBoundaryFlux(equationsSet,coupledEquationsSet,i INTEGER(INTG) :: faceNodeDerivativeIdx, meshComponentNumber INTEGER(INTG) :: normalComponentIdx INTEGER(INTG) :: boundaryID,numberOfBoundaries,boundaryType,coupledNodeNumber,numberOfGlobalBoundaries - INTEGER(INTG) :: MPI_IERROR,numberOfComputationNodes + INTEGER(INTG) :: MPI_IERROR,numberOfWorldComputationNodes INTEGER(INTG) :: i,j,computationNode REAL(DP) :: gaussWeight, normalProjection,elementNormal(3) REAL(DP) :: normalDifference,normalTolerance @@ -12881,22 +12881,22 @@ SUBROUTINE NavierStokes_CalculateBoundaryFlux(equationsSet,coupledEquationsSet,i globalBoundaryArea = 0.0_DP globalBoundaryPressure = 0.0_DP globalBoundaryNormalStress = 0.0_DP - numberOfComputationNodes=computationEnvironment%numberOfComputationNodes - IF(numberOfComputationNodes>1) THEN !use mpi + numberOfWorldComputationNodes=computationEnvironment%numberOfWorldComputationNodes + IF(numberOfWorldComputationNodes>1) THEN !use mpi CALL MPI_ALLREDUCE(localBoundaryFlux,globalBoundaryFlux,10,MPI_DOUBLE_PRECISION,MPI_SUM, & - & computationEnvironment%mpiCommunicator,MPI_IERROR) + & computationEnvironment%mpiWorldCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ALLREDUCE",MPI_IERROR,err,error,*999) CALL MPI_ALLREDUCE(localBoundaryArea,globalBoundaryArea,10,MPI_DOUBLE_PRECISION,MPI_SUM, & - & computationEnvironment%mpiCommunicator,MPI_IERROR) + & computationEnvironment%mpiWorldCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ALLREDUCE",MPI_IERROR,ERR,ERROR,*999) CALL MPI_ALLREDUCE(localBoundaryNormalStress,globalBoundaryNormalStress,10,MPI_DOUBLE_PRECISION,MPI_SUM, & - & computationEnvironment%mpiCommunicator,MPI_IERROR) + & computationEnvironment%mpiWorldCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ALLREDUCE",MPI_IERROR,ERR,ERROR,*999) CALL MPI_ALLREDUCE(localBoundaryPressure,globalBoundaryPressure,10,MPI_DOUBLE_PRECISION,MPI_SUM, & - & computationEnvironment%mpiCommunicator,MPI_IERROR) + & computationEnvironment%mpiWorldCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ALLREDUCE",MPI_IERROR,ERR,ERROR,*999) CALL MPI_ALLREDUCE(numberOfBoundaries,numberOfGlobalBoundaries,1,MPI_INTEGER,MPI_MAX, & - & computationEnvironment%mpiCommunicator,MPI_IERROR) + & computationEnvironment%mpiWorldCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ALLREDUCE",MPI_IERROR,ERR,ERROR,*999) ELSE numberOfGlobalBoundaries = numberOfBoundaries @@ -13179,11 +13179,11 @@ SUBROUTINE NavierStokes_CalculateBoundaryFlux(equationsSet,coupledEquationsSet,i END DO !elementIdx !allocate array for mpi communication - IF(numberOfComputationNodes>1) THEN !use mpi - ALLOCATE(globalConverged(numberOfComputationNodes),STAT=ERR) + IF(numberOfWorldComputationNodes>1) THEN !use mpi + ALLOCATE(globalConverged(numberOfWorldComputationNodes),STAT=ERR) IF(ERR/=0) CALL FlagError("Could not allocate global convergence check array.",ERR,ERROR,*999) CALL MPI_ALLGATHER(convergedFlag,1,MPI_LOGICAL,globalConverged,1,MPI_LOGICAL, & - & computationEnvironment%mpiCommunicator,MPI_IERROR) + & computationEnvironment%mpiWorldCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ALLGATHER",MPI_IERROR,ERR,ERROR,*999) IF(ALL(globalConverged)) THEN convergedFlag = .TRUE. @@ -13253,7 +13253,7 @@ SUBROUTINE NavierStokes_Couple1D0D(controlLoop,solver,err,error,*) TYPE(VARYING_STRING) :: localError INTEGER(INTG) :: nodeNumber,nodeIdx,derivativeIdx,versionIdx,componentIdx,numberOfLocalNodes1D INTEGER(INTG) :: solver1dNavierStokesNumber,solverNumber,MPI_IERROR,timestep,iteration - INTEGER(INTG) :: boundaryNumber,numberOfBoundaries,numberOfComputationNodes + INTEGER(INTG) :: boundaryNumber,numberOfBoundaries,numberOfWorldComputationNodes INTEGER(INTG) :: dependentDof,boundaryConditionType REAL(DP) :: A0_PARAM,E_PARAM,H_PARAM,beta,pCellML,normalWave(2) REAL(DP) :: qPrevious,pPrevious,aPrevious,q1d,a1d,qError,aError,couplingTolerance @@ -13475,13 +13475,13 @@ SUBROUTINE NavierStokes_Couple1D0D(controlLoop,solver,err,error,*) localConverged = .FALSE. END IF ! Need to check that boundaries have converged globally (on all domains) if this is a parallel problem - numberOfComputationNodes=computationEnvironment%numberOfComputationNodes - IF(numberOfComputationNodes>1) THEN !use mpi + numberOfWorldComputationNodes=computationEnvironment%numberOfWorldComputationNodes + IF(numberOfWorldComputationNodes>1) THEN !use mpi !allocate array for mpi communication - ALLOCATE(globalConverged(numberOfComputationNodes),STAT=ERR) + ALLOCATE(globalConverged(numberOfWorldComputationNodes),STAT=ERR) IF(ERR/=0) CALL FlagError("Could not allocate global convergence check array.",ERR,ERROR,*999) CALL MPI_ALLGATHER(localConverged,1,MPI_LOGICAL,globalConverged,1,MPI_LOGICAL, & - & computationEnvironment%mpiCommunicator,MPI_IERROR) + & computationEnvironment%mpiWorldCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ALLGATHER",MPI_IERROR,err,error,*999) IF(ALL(globalConverged)) THEN !CALL WRITE_STRING_VALUE(DIAGNOSTIC_OUTPUT_TYPE,"1D/0D coupling converged; # iterations: ", & @@ -13544,7 +13544,7 @@ SUBROUTINE NavierStokes_Couple3D1D(controlLoop,err,error,*) TYPE(VARYING_STRING) :: localError INTEGER(INTG) :: nodeNumber,nodeIdx,derivativeIdx,versionIdx,componentIdx,numberOfLocalNodes1D INTEGER(INTG) :: solver1dNavierStokesNumber,MPI_IERROR,timestep,iteration - INTEGER(INTG) :: boundaryNumber,boundaryType1D,numberOfBoundaries,numberOfComputationNodes + INTEGER(INTG) :: boundaryNumber,boundaryType1D,numberOfBoundaries,numberOfWorldComputationNodes INTEGER(INTG) :: solver3dNavierStokesNumber,userNodeNumber,localDof,globalDof,computationNode REAL(DP) :: normalWave(2) REAL(DP) :: flow1D,stress1D,flow1DPrevious,stress1DPrevious,flow3D,stress3D,flowError,stressError @@ -13764,12 +13764,13 @@ SUBROUTINE NavierStokes_Couple3D1D(controlLoop,err,error,*) localConverged = .TRUE. END IF ! Need to check that boundaries have converged globally (on all domains) if this is a MPI problem - numberOfComputationNodes=computationEnvironment%numberOfComputationNodes - IF(numberOfComputationNodes>1) THEN !use mpi + numberOfWorldComputationNodes=computationEnvironment%numberOfWorldComputationNodes + IF(numberOfWorldComputationNodes>1) THEN !use mpi !allocate array for mpi communication IF(ERR/=0) CALL FlagError("Could not allocate global convergence check array.",ERR,ERROR,*999) - CALL MPI_ALLREDUCE(localConverged,globalConverged,1,MPI_LOGICAL,MPI_LAND,computationEnvironment%mpiCommunicator,MPI_IERROR) + CALL MPI_ALLREDUCE(localConverged,globalConverged,1,MPI_LOGICAL,MPI_LAND, & + & computationEnvironment%mpiWorldCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ALLREDUCE",MPI_IERROR,ERR,ERROR,*999) IF(globalConverged) THEN CALL WRITE_STRING_VALUE(DIAGNOSTIC_OUTPUT_TYPE,"3D/1D coupling converged; # iterations: ", & @@ -13844,7 +13845,7 @@ SUBROUTINE NavierStokes_CoupleCharacteristics(controlLoop,solver,err,error,*) TYPE(VARYING_STRING) :: localError INTEGER(INTG) :: nodeNumber,nodeIdx,derivativeIdx,versionIdx,componentIdx,i INTEGER(INTG) :: solver1dNavierStokesNumber,solverNumber - INTEGER(INTG) :: branchNumber,numberOfBranches,numberOfComputationNodes,numberOfVersions + INTEGER(INTG) :: branchNumber,numberOfBranches,numberOfWorldComputationNodes,numberOfVersions INTEGER(INTG) :: MPI_IERROR,timestep,iteration,outputIteration REAL(DP) :: couplingTolerance,l2ErrorW(30),wPrevious(2,7),wNavierStokes(2,7),wCharacteristic(2,7),wError(2,7) REAL(DP) :: l2ErrorQ(100),qCharacteristic(7),qNavierStokes(7),wNext(2,7) @@ -14055,13 +14056,13 @@ SUBROUTINE NavierStokes_CoupleCharacteristics(controlLoop,solver,err,error,*) localConverged = .FALSE. END IF ! Need to check that boundaries have converged globally (on all domains) if this is a parallel problem - numberOfComputationNodes=computationEnvironment%numberOfComputationNodes - IF(numberOfComputationNodes>1) THEN !use mpi + numberOfWorldComputationNodes=computationEnvironment%numberOfWorldComputationNodes + IF(numberOfWorldComputationNodes>1) THEN !use mpi !allocate array for mpi communication - ALLOCATE(globalConverged(numberOfComputationNodes),STAT=ERR) + ALLOCATE(globalConverged(numberOfWorldComputationNodes),STAT=ERR) IF(ERR/=0) CALL FlagError("Could not allocate global convergence check array.",ERR,ERROR,*999) CALL MPI_ALLGATHER(localConverged,1,MPI_LOGICAL,globalConverged,1,MPI_LOGICAL, & - & computationEnvironment%mpiCommunicator,MPI_IERROR) + & computationEnvironment%mpiWorldCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ALLGATHER",MPI_IERROR,err,error,*999) IF(ALL(globalConverged)) THEN !CALL WRITE_STRING_VALUE(DIAGNOSTIC_OUTPUT_TYPE,"Navier-Stokes/Characteristic converged; # iterations: ", & @@ -15020,7 +15021,7 @@ SUBROUTINE NavierStokes_CalculateBoundaryFlux3D0D(equationsSet,err,error,*) INTEGER(INTG) :: faceNodeIdx, elementNodeIdx INTEGER(INTG) :: faceNodeDerivativeIdx, meshComponentNumber INTEGER(INTG) :: boundaryID,numberOfBoundaries,boundaryType,coupledNodeNumber,numberOfGlobalBoundaries - INTEGER(INTG) :: MPI_IERROR,numberOfComputationNodes + INTEGER(INTG) :: MPI_IERROR,numberOfWorldComputationNodes INTEGER(INTG) :: computationNode,xiDirection(3),orientation REAL(DP) :: gaussWeight, elementNormal(3) REAL(DP) :: normalDifference,normalTolerance @@ -15253,19 +15254,19 @@ SUBROUTINE NavierStokes_CalculateBoundaryFlux3D0D(equationsSet,err,error,*) globalBoundaryFlux = 0.0_DP globalBoundaryArea = 0.0_DP globalBoundaryPressure = 0.0_DP - numberOfComputationNodes=computationEnvironment%numberOfComputationNodes - IF(numberOfComputationNodes>1) THEN !use mpi + numberOfWorldComputationNodes=computationEnvironment%numberOfWorldComputationNodes + IF(numberOfWorldComputationNodes>1) THEN !use mpi CALL MPI_ALLREDUCE(localBoundaryFlux,globalBoundaryFlux,10,MPI_DOUBLE_PRECISION,MPI_SUM, & - & computationEnvironment%mpiCommunicator,MPI_IERROR) + & computationEnvironment%mpiWorldCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ALLREDUCE",MPI_IERROR,ERR,ERROR,*999) CALL MPI_ALLREDUCE(localBoundaryArea,globalBoundaryArea,10,MPI_DOUBLE_PRECISION,MPI_SUM, & - & computationEnvironment%mpiCommunicator,MPI_IERROR) + & computationEnvironment%mpiWorldCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ALLREDUCE",MPI_IERROR,ERR,ERROR,*999) CALL MPI_ALLREDUCE(localBoundaryPressure,globalBoundaryPressure,10,MPI_DOUBLE_PRECISION,MPI_SUM, & - & computationEnvironment%mpiCommunicator,MPI_IERROR) + & computationEnvironment%mpiWorldCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ALLREDUCE",MPI_IERROR,ERR,ERROR,*999) CALL MPI_ALLREDUCE(numberOfBoundaries,numberOfGlobalBoundaries,1,MPI_INTEGER,MPI_MAX, & - & computationEnvironment%mpiCommunicator,MPI_IERROR) + & computationEnvironment%mpiWorldCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ALLREDUCE",MPI_IERROR,ERR,ERROR,*999) ELSE numberOfGlobalBoundaries = numberOfBoundaries @@ -15409,11 +15410,11 @@ SUBROUTINE NavierStokes_CalculateBoundaryFlux3D0D(equationsSet,err,error,*) END DO !elementIdx !allocate array for mpi communication - IF(numberOfComputationNodes>1) THEN !use mpi - ALLOCATE(globalConverged(numberOfComputationNodes),STAT=ERR) + IF(numberOfWorldComputationNodes>1) THEN !use mpi + ALLOCATE(globalConverged(numberOfWorldComputationNodes),STAT=ERR) IF(ERR/=0) CALL FlagError("Could not allocate global convergence check array.",ERR,ERROR,*999) CALL MPI_ALLGATHER(convergedFlag,1,MPI_LOGICAL,globalConverged,1,MPI_LOGICAL, & - & computationEnvironment%mpiCommunicator,MPI_IERROR) + & computationEnvironment%mpiWorldCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ALLGATHER",MPI_IERROR,ERR,ERROR,*999) IF(ALL(globalConverged)) THEN convergedFlag = .TRUE. diff --git a/src/analytic_analysis_routines.f90 b/src/analytic_analysis_routines.f90 index 873d0950..2e3db391 100755 --- a/src/analytic_analysis_routines.f90 +++ b/src/analytic_analysis_routines.f90 @@ -147,9 +147,9 @@ SUBROUTINE AnalyticAnalysis_Output(FIELD,FILENAME,ERR,ERROR,*) IF(FIELD%DEPENDENT_TYPE==FIELD_DEPENDENT_TYPE) THEN IF(LEN_TRIM(FILENAME)>=1) THEN !!TODO \todo have more general ascii file mechanism - IF(computationEnvironment%numberOfComputationNodes>1) THEN + IF(computationEnvironment%numberOfWorldComputationNodes>1) THEN WRITE(FILE_NAME,'(A,".opanal.",I0)') FILENAME(1:LEN_TRIM(FILENAME)),computationEnvironment% & - & myComputationNodeNumber + & myWorldComputationNodeNumber ELSE FILE_NAME=FILENAME(1:LEN_TRIM(FILENAME))//".opanal" ENDIF @@ -270,7 +270,7 @@ SUBROUTINE AnalyticAnalysis_Output(FIELD,FILENAME,ERR,ERROR,*) !Output RMS errors CALL WRITE_STRING(OUTPUT_ID,"",ERR,ERROR,*999) IF(NUMBER(1)>0) THEN - IF(computationEnvironment%numberOfComputationNodes>1) THEN + IF(computationEnvironment%numberOfWorldComputationNodes>1) THEN !Local elements only CALL WRITE_STRING(OUTPUT_ID,"Local RMS errors:",ERR,ERROR,*999) LOCAL_STRING= & @@ -294,16 +294,16 @@ SUBROUTINE AnalyticAnalysis_Output(FIELD,FILENAME,ERR,ERROR,*) !Global RMS values !Collect the values across the ranks CALL MPI_ALLREDUCE(MPI_IN_PLACE,NUMBER,1,MPI_INTEGER,MPI_SUM, & - & computationEnvironment%mpiCommunicator,MPI_IERROR) + & computationEnvironment%mpiWorldCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ALLREDUCE",MPI_IERROR,ERR,ERROR,*999) CALL MPI_ALLREDUCE(MPI_IN_PLACE,RMS_ERROR_PER,1,MPI_DOUBLE_PRECISION,MPI_SUM, & - & computationEnvironment%mpiCommunicator,MPI_IERROR) + & computationEnvironment%mpiWorldCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ALLREDUCE",MPI_IERROR,ERR,ERROR,*999) CALL MPI_ALLREDUCE(MPI_IN_PLACE,RMS_ERROR_ABS,1,MPI_DOUBLE_PRECISION,MPI_SUM, & - & computationEnvironment%mpiCommunicator,MPI_IERROR) + & computationEnvironment%mpiWorldCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ALLREDUCE",MPI_IERROR,ERR,ERROR,*999) CALL MPI_ALLREDUCE(MPI_IN_PLACE,RMS_ERROR_REL,1,MPI_DOUBLE_PRECISION,MPI_SUM, & - & computationEnvironment%mpiCommunicator,MPI_IERROR) + & computationEnvironment%mpiWorldCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ALLREDUCE",MPI_IERROR,ERR,ERROR,*999) CALL WRITE_STRING(OUTPUT_ID,"Global RMS errors:",ERR,ERROR,*999) LOCAL_STRING= & @@ -400,7 +400,7 @@ SUBROUTINE AnalyticAnalysis_Output(FIELD,FILENAME,ERR,ERROR,*) ENDDO !node_idx !Output RMS errors CALL WRITE_STRING(OUTPUT_ID,"",ERR,ERROR,*999) - IF(computationEnvironment%numberOfComputationNodes>1) THEN + IF(computationEnvironment%numberOfWorldComputationNodes>1) THEN IF(ANY(NUMBER>0)) THEN !Local nodes only CALL WRITE_STRING(OUTPUT_ID,"Local RMS errors:",ERR,ERROR,*999) @@ -438,16 +438,16 @@ SUBROUTINE AnalyticAnalysis_Output(FIELD,FILENAME,ERR,ERROR,*) !Global RMS values !Collect the values across the ranks CALL MPI_ALLREDUCE(MPI_IN_PLACE,NUMBER,8,MPI_INTEGER,MPI_SUM, & - & computationEnvironment%mpiCommunicator,MPI_IERROR) + & computationEnvironment%mpiWorldCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ALLREDUCE",MPI_IERROR,ERR,ERROR,*999) CALL MPI_ALLREDUCE(MPI_IN_PLACE,RMS_ERROR_PER,8,MPI_DOUBLE_PRECISION,MPI_SUM, & - & computationEnvironment%mpiCommunicator,MPI_IERROR) + & computationEnvironment%mpiWorldCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ALLREDUCE",MPI_IERROR,ERR,ERROR,*999) CALL MPI_ALLREDUCE(MPI_IN_PLACE,RMS_ERROR_ABS,8,MPI_DOUBLE_PRECISION,MPI_SUM, & - & computationEnvironment%mpiCommunicator,MPI_IERROR) + & computationEnvironment%mpiWorldCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ALLREDUCE",MPI_IERROR,ERR,ERROR,*999) CALL MPI_ALLREDUCE(MPI_IN_PLACE,RMS_ERROR_REL,8,MPI_DOUBLE_PRECISION,MPI_SUM, & - & computationEnvironment%mpiCommunicator,MPI_IERROR) + & computationEnvironment%mpiWorldCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ALLREDUCE",MPI_IERROR,ERR,ERROR,*999) CALL WRITE_STRING(OUTPUT_ID,"Global RMS errors:",ERR,ERROR,*999) LOCAL_STRING= & @@ -517,7 +517,7 @@ SUBROUTINE AnalyticAnalysis_Output(FIELD,FILENAME,ERR,ERROR,*) ALLOCATE(GHOST_INTEGRAL_ERRORS(6,FIELD_VARIABLE%NUMBER_OF_COMPONENTS),STAT=ERR) IF(ERR/=0) CALL FlagError("Could not allocate ghost integral errors.",ERR,ERROR,*999) CALL ANALYTIC_ANALYSIS_INTEGRAL_ERRORS(FIELD_VARIABLE,INTEGRAL_ERRORS,GHOST_INTEGRAL_ERRORS,ERR,ERROR,*999) - IF(computationEnvironment%numberOfComputationNodes>1) THEN + IF(computationEnvironment%numberOfWorldComputationNodes>1) THEN CALL WRITE_STRING(OUTPUT_ID,"Local Integral errors:",ERR,ERROR,*999) LOCAL_STRING="Component# Numerical Analytic % error Absolute err Relative err" CALL WRITE_STRING(OUTPUT_ID,LOCAL_STRING,ERR,ERROR,*999) @@ -590,7 +590,7 @@ SUBROUTINE AnalyticAnalysis_Output(FIELD,FILENAME,ERR,ERROR,*) ENDDO !component_idx !Collect the values across the ranks CALL MPI_ALLREDUCE(MPI_IN_PLACE,INTEGRAL_ERRORS,6*FIELD_VARIABLE%NUMBER_OF_COMPONENTS,MPI_DOUBLE_PRECISION, & - & MPI_SUM,computationEnvironment%mpiCommunicator,MPI_IERROR) + & MPI_SUM,computationEnvironment%mpiWorldCommunicator,MPI_IERROR) CALL WRITE_STRING(OUTPUT_ID,"Global Integral errors:",ERR,ERROR,*999) LOCAL_STRING="Component# Numerical Analytic % error Absolute err Relative err" CALL WRITE_STRING(OUTPUT_ID,LOCAL_STRING,ERR,ERROR,*999) @@ -1709,7 +1709,7 @@ SUBROUTINE AnalyticAnalysis_RMSErrorGetNode(FIELD,VARIABLE_TYPE,COMPONENT_NUMBER ENDDO !deriv_idx ENDDO !node_idx - IF(computationEnvironment%numberOfComputationNodes>1) THEN + IF(computationEnvironment%numberOfWorldComputationNodes>1) THEN IF(ANY(NUMBER>0)) THEN DO deriv_idx=1,8 IF(NUMBER(deriv_idx)>0) THEN @@ -1724,9 +1724,9 @@ SUBROUTINE AnalyticAnalysis_RMSErrorGetNode(FIELD,VARIABLE_TYPE,COMPONENT_NUMBER ENDDO !deriv_idx !Global RMS values !Collect the values across the ranks - CALL MPI_ALLREDUCE(MPI_IN_PLACE,NUMBER,8,MPI_INTEGER,MPI_SUM,computationEnvironment%mpiCommunicator,MPI_IERROR) + CALL MPI_ALLREDUCE(MPI_IN_PLACE,NUMBER,8,MPI_INTEGER,MPI_SUM,computationEnvironment%mpiWorldCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ALLREDUCE",MPI_IERROR,ERR,ERROR,*999) - CALL MPI_ALLREDUCE(MPI_IN_PLACE,RMS_ERROR,8,MPI_DOUBLE_PRECISION,MPI_SUM,computationEnvironment%mpiCommunicator, & + CALL MPI_ALLREDUCE(MPI_IN_PLACE,RMS_ERROR,8,MPI_DOUBLE_PRECISION,MPI_SUM,computationEnvironment%mpiWorldCommunicator, & & MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ALLREDUCE",MPI_IERROR,ERR,ERROR,*999) DO deriv_idx=1,8 @@ -1838,7 +1838,7 @@ SUBROUTINE AnalyticAnalysis_RMSErrorGetElement(FIELD,VARIABLE_TYPE,COMPONENT_NUM GHOST_RMS_ERROR=GHOST_RMS_ERROR+ERROR_VALUE*ERROR_VALUE ENDDO !element_idx IF(NUMBER>0) THEN - IF(computationEnvironment%numberOfComputationNodes>1) THEN + IF(computationEnvironment%numberOfWorldComputationNodes>1) THEN !Local elements only LOCAL_RMS=SQRT(RMS_ERROR/NUMBER) !Local and ghost elements @@ -1846,10 +1846,10 @@ SUBROUTINE AnalyticAnalysis_RMSErrorGetElement(FIELD,VARIABLE_TYPE,COMPONENT_NUM !Global RMS values !Collect the values across the ranks CALL MPI_ALLREDUCE(MPI_IN_PLACE,NUMBER,1,MPI_INTEGER,MPI_SUM, & - & computationEnvironment%mpiCommunicator,MPI_IERROR) + & computationEnvironment%mpiWorldCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ALLREDUCE",MPI_IERROR,ERR,ERROR,*999) CALL MPI_ALLREDUCE(MPI_IN_PLACE,RMS_ERROR,1,MPI_DOUBLE_PRECISION,MPI_SUM, & - & computationEnvironment%mpiCommunicator,MPI_IERROR) + & computationEnvironment%mpiWorldCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ALLREDUCE",MPI_IERROR,ERR,ERROR,*999) GLOBAL_RMS=SQRT(RMS_ERROR/NUMBER) ENDIF diff --git a/src/base_routines.f90 b/src/base_routines.f90 index 1613c481..95c00b52 100755 --- a/src/base_routines.f90 +++ b/src/base_routines.f90 @@ -146,8 +146,8 @@ MODULE BaseRoutines !Module variables - INTEGER(INTG), SAVE :: myComputationNodeNumber !0) THEN IF(myNodeNumber>=0.AND.myNodeNumber<=numberOfNodes-1) THEN - myComputationNodeNumber=myNodeNumber - numberOfComputationNodes=numberOfNodes + myWorldComputationNodeNumber=myNodeNumber + numberOfWorldComputationNodes=numberOfNodes ELSE CALL FlagError("Invalid node number.",err,error,*999) ENDIF @@ -708,8 +708,8 @@ SUBROUTINE FlagWarningC(string,err,error,*) TYPE(VARYING_STRING), INTENT(OUT) :: error !1) THEN - WRITE(outputString,'(">>WARNING (",I0,"): ",A)') myComputationNodeNumber,string + IF(numberOfWorldComputationNodes>1) THEN + WRITE(outputString,'(">>WARNING (",I0,"): ",A)') myWorldComputationNodeNumber,string ELSE WRITE(outputString,'(">>WARNING: ",A)') string ENDIF @@ -734,8 +734,8 @@ SUBROUTINE FlagWarningVS(string,err,error,*) TYPE(VARYING_STRING), INTENT(OUT) :: error !1) THEN - WRITE(outputString,'(">>WARNING (",I0,"): ",A)') myComputationNodeNumber,CHAR(string) + IF(numberOfWorldComputationNodes>1) THEN + WRITE(outputString,'(">>WARNING (",I0,"): ",A)') myWorldComputationNodeNumber,CHAR(string) ELSE WRITE(outputString,'(">>WARNING: ",A)') CHAR(string) ENDIF @@ -783,8 +783,8 @@ SUBROUTINE BaseRoutinesInitialise(err,error,*) err=0 error="" - myComputationNodeNumber=0 - numberOfComputationNodes=1 + myWorldComputationNodeNumber=0 + numberOfWorldComputationNodes=1 diagnostics=.FALSE. diagnostics1=.FALSE. diagnostics2=.FALSE. @@ -928,8 +928,8 @@ SUBROUTINE DiagnosticsSetOn(diagType,levelList,diagFilename,routineList,err,erro IF(LEN_TRIM(diagFilename)>=1) THEN IF(diagFileOpen) CLOSE(UNIT=DIAGNOSTICS_FILE_UNIT) - IF(numberOfComputationNodes>1) THEN - WRITE(filename,'(A,".diag.",I0)') diagFilename(1:LEN_TRIM(diagFilename)),myComputationNodeNumber + IF(numberOfWorldComputationNodes>1) THEN + WRITE(filename,'(A,".diag.",I0)') diagFilename(1:LEN_TRIM(diagFilename)),myWorldComputationNodeNumber ELSE filename=diagFilename(1:LEN_TRIM(diagFilename))//".diag" ENDIF @@ -1063,8 +1063,8 @@ SUBROUTINE OutputSetOn(echoFilename,err,error,*) IF(echoOutput) THEN CALL FlagError("Write output is already on.",err,error,*999) ELSE - IF(numberOfComputationNodes>1) THEN - WRITE(filename,'(A,".out.",I0)') echoFilename(1:LEN_TRIM(echoFilename)),myComputationNodeNumber + IF(numberOfWorldComputationNodes>1) THEN + WRITE(filename,'(A,".out.",I0)') echoFilename(1:LEN_TRIM(echoFilename)),myWorldComputationNodeNumber ELSE filename=echoFilename(1:LEN_TRIM(echoFilename))//".out" ENDIF @@ -1233,8 +1233,8 @@ SUBROUTINE TimingSetOn(timingType,timingSummaryFlag,timingFilename,routineList,e NULLIFY(routine) IF(LEN_TRIM(timingFilename)>=1) THEN IF(timingFileOpen) CLOSE(UNIT=TIMING_FILE_UNIT) - IF(numberOfComputationNodes>1) THEN - WRITE(filename,'(A,".timing.",I0)') timingFilename(1:LEN_TRIM(timingFilename)),myComputationNodeNumber + IF(numberOfWorldComputationNodes>1) THEN + WRITE(filename,'(A,".timing.",I0)') timingFilename(1:LEN_TRIM(timingFilename)),myWorldComputationNodeNumber ELSE filename=timingFilename(1:LEN_TRIM(timingFilename))//".timing" ENDIF @@ -1389,8 +1389,8 @@ SUBROUTINE WriteError(err,error,*) TYPE(VARYING_STRING) :: localError,localError2 indent=2 - IF(numberOfComputationNodes>1) THEN - WRITE(startString,'(A,A,I0,A,X,I0,A)') indentString(1:indent),"ERROR (",myComputationNodeNumber,"):", & + IF(numberOfWorldComputationNodes>1) THEN + WRITE(startString,'(A,A,I0,A,X,I0,A)') indentString(1:indent),"ERROR (",myWorldComputationNodeNumber,"):", & & ERR,":" startStringLength=LEN_TRIM(startString) ELSE diff --git a/src/boundary_condition_routines.f90 b/src/boundary_condition_routines.f90 index 51c5f06e..069870f9 100755 --- a/src/boundary_condition_routines.f90 +++ b/src/boundary_condition_routines.f90 @@ -222,7 +222,7 @@ SUBROUTINE BOUNDARY_CONDITIONS_CREATE_FINISH(BOUNDARY_CONDITIONS,ERR,ERROR,*) CALL FlagError("Boundary conditions have already been finished.",ERR,ERROR,*999) ELSE IF(ALLOCATED(BOUNDARY_CONDITIONS%BOUNDARY_CONDITIONS_VARIABLES)) THEN - IF(computationEnvironment%numberOfComputationNodes>0) THEN + IF(computationEnvironment%numberOfWorldComputationNodes>0) THEN !Transfer all the boundary conditions to all the computation nodes. !\todo Look at this. DO variable_idx=1,BOUNDARY_CONDITIONS%NUMBER_OF_BOUNDARY_CONDITIONS_VARIABLES @@ -236,10 +236,10 @@ SUBROUTINE BOUNDARY_CONDITIONS_CREATE_FINISH(BOUNDARY_CONDITIONS,ERR,ERROR,*) !\todo This operation is a little expensive as we are doing an unnecessary sum across all the ranks in order to combin !\todo the data from each rank into all ranks. We will see how this goes for now. CALL MPI_ALLREDUCE(MPI_IN_PLACE,BOUNDARY_CONDITION_VARIABLE%DOF_TYPES, & - & SEND_COUNT,MPI_INTEGER,MPI_SUM,computationEnvironment%mpiCommunicator,MPI_IERROR) + & SEND_COUNT,MPI_INTEGER,MPI_SUM,computationEnvironment%mpiWorldCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ALLREDUCE",MPI_IERROR,ERR,ERROR,*999) CALL MPI_ALLREDUCE(MPI_IN_PLACE,BOUNDARY_CONDITION_VARIABLE%CONDITION_TYPES, & - & SEND_COUNT,MPI_INTEGER,MPI_SUM,computationEnvironment%mpiCommunicator,MPI_IERROR) + & SEND_COUNT,MPI_INTEGER,MPI_SUM,computationEnvironment%mpiWorldCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ALLREDUCE",MPI_IERROR,ERR,ERROR,*999) ELSE LOCAL_ERROR="Field variable domain mapping is not associated for variable type "// & @@ -249,10 +249,10 @@ SUBROUTINE BOUNDARY_CONDITIONS_CREATE_FINISH(BOUNDARY_CONDITIONS,ERR,ERROR,*) ! Update the total number of boundary condition types by summing across all nodes CALL MPI_ALLREDUCE(MPI_IN_PLACE,BOUNDARY_CONDITION_VARIABLE%DOF_COUNTS, & - & MAX_BOUNDARY_CONDITION_NUMBER,MPI_INTEGER,MPI_SUM,computationEnvironment%mpiCommunicator,MPI_IERROR) + & MAX_BOUNDARY_CONDITION_NUMBER,MPI_INTEGER,MPI_SUM,computationEnvironment%mpiWorldCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ALLREDUCE",MPI_IERROR,ERR,ERROR,*999) CALL MPI_ALLREDUCE(MPI_IN_PLACE,BOUNDARY_CONDITION_VARIABLE%NUMBER_OF_DIRICHLET_CONDITIONS, & - & 1,MPI_INTEGER,MPI_SUM,computationEnvironment%mpiCommunicator,MPI_IERROR) + & 1,MPI_INTEGER,MPI_SUM,computationEnvironment%mpiWorldCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ALLREDUCE",MPI_IERROR,ERR,ERROR,*999) ! Check that the boundary conditions set are appropriate for equations sets @@ -260,7 +260,7 @@ SUBROUTINE BOUNDARY_CONDITIONS_CREATE_FINISH(BOUNDARY_CONDITIONS,ERR,ERROR,*) !Make sure the required parameter sets are created on all computation nodes and begin updating them CALL MPI_ALLREDUCE(MPI_IN_PLACE,BOUNDARY_CONDITION_VARIABLE%parameterSetRequired, & - & FIELD_NUMBER_OF_SET_TYPES,MPI_LOGICAL,MPI_LOR,computationEnvironment%mpiCommunicator,MPI_IERROR) + & FIELD_NUMBER_OF_SET_TYPES,MPI_LOGICAL,MPI_LOR,computationEnvironment%mpiWorldCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ALLREDUCE",MPI_IERROR,ERR,ERROR,*999) DO parameterSetIdx=1,FIELD_NUMBER_OF_SET_TYPES IF(BOUNDARY_CONDITION_VARIABLE%parameterSetRequired(parameterSetIdx)) THEN @@ -2125,7 +2125,7 @@ SUBROUTINE BoundaryConditions_NeumannMatricesInitialise(boundaryConditionsVariab TYPE(DOMAIN_LINE_TYPE), POINTER :: line TYPE(DOMAIN_FACE_TYPE), POINTER :: face TYPE(LIST_TYPE), POINTER :: columnIndicesList, rowColumnIndicesList - INTEGER(INTG) :: myComputationNodeNumber + INTEGER(INTG) :: myWorldComputationNodeNumber INTEGER(INTG) :: numberOfPointDofs, numberNonZeros, numberRowEntries, neumannConditionNumber, localNeumannConditionIdx INTEGER(INTG) :: neumannIdx, globalDof, localDof, localDofNyy, domainIdx, numberOfDomains, domainNumber, componentNumber INTEGER(INTG) :: nodeIdx, derivIdx, nodeNumber, versionNumber, derivativeNumber, columnNodeNumber, lineIdx, faceIdx, columnDof @@ -2420,11 +2420,11 @@ SUBROUTINE BoundaryConditions_NeumannMatricesInitialise(boundaryConditionsVariab !Set up vector of Neumann point values CALL DISTRIBUTED_VECTOR_CREATE_START(pointDofMapping,boundaryConditionsNeumann%pointValues,err,error,*999) CALL DISTRIBUTED_VECTOR_CREATE_FINISH(boundaryConditionsNeumann%pointValues,err,error,*999) - myComputationNodeNumber=ComputationEnvironment_NodeNumberGet(err,error) + myWorldComputationNodeNumber=ComputationEnvironment_NodeNumberGet(err,error) !Set point values vector from boundary conditions field parameter set DO neumannIdx=1,numberOfPointDofs globalDof=boundaryConditionsNeumann%setDofs(neumannIdx) - IF(rhsVariable%DOMAIN_MAPPING%GLOBAL_TO_LOCAL_MAP(globalDof)%DOMAIN_NUMBER(1)==myComputationNodeNumber) THEN + IF(rhsVariable%DOMAIN_MAPPING%GLOBAL_TO_LOCAL_MAP(globalDof)%DOMAIN_NUMBER(1)==myWorldComputationNodeNumber) THEN localDof=rhsVariable%DOMAIN_MAPPING%GLOBAL_TO_LOCAL_MAP(globalDof)%LOCAL_NUMBER(1) ! Set point DOF vector value localNeumannConditionIdx=boundaryConditionsNeumann%pointDofMapping%GLOBAL_TO_LOCAL_MAP(neumannIdx)%LOCAL_NUMBER(1) @@ -2546,7 +2546,7 @@ SUBROUTINE BoundaryConditions_NeumannIntegrate(rhsBoundaryConditions,err,error,* TYPE(VARYING_STRING), INTENT(OUT) :: error ! \addtogroup CMFE_ErrorHandlingModes OpenCMISS::Iron::ErrorHandlingModes !> \brief Error handling mode parameters - !> \see CMISS + !> \see OpenCMISS !>@{ - INTEGER(INTG), PARAMETER :: CMFE_RETURN_ERROR_CODE = 0 !@} !Module types !Module variables - INTEGER(INTG), SAVE :: cmfe_ErrorHandlingMode !Returns the error handling mode for CMISS \see OPENOpenCMISS::Iron::CMISSErrorHandlingModeGet + !>Returns the error handling mode for OpenCMISS \see OpenCMISS::Iron::cmfe_ErrorHandlingModeGet SUBROUTINE cmfe_ErrorHandlingModeGet_(errorHandlingMode,err,error,*) !Argument variables - INTEGER(INTG), INTENT(OUT) :: errorHandlingMode !Sets the error handling mode for cmiss \see OPENOpenCMISS::Iron::CMISSErrorHandlingModeSet + !>Sets the error handling mode for cmiss \see OpenCMISS::Iron::cmfe_ErrorHandlingModeSet SUBROUTINE cmfe_ErrorHandlingModeSet_(errorHandlingMode,err,error,*) !Argument variables - INTEGER(INTG), INTENT(IN) :: errorHandlingMode !Finalises CMISS. \see OPENOpenCMISS::Iron::CMISSFinalise + !>Finalises OpenCMISS. \see OpenCMISS::Iron::cmfe_Finalise SUBROUTINE cmfe_Finalise_(err,error,*) !Argument variables @@ -217,8 +217,8 @@ SUBROUTINE cmfe_Finalise_(err,error,*) CALL BASES_FINALISE(err,error,*999) !Reset the signal handler CALL cmfe_ResetFatalHandler() - !Finalise computation enviroment - CALL Computation_EnvironmentFinalise(err,error,*999) + !Finalise computation + CALL Computation_Finalise(err,error,*999) !Finalise the base routines CALL BaseRoutinesFinalise(err,error,*999) @@ -233,7 +233,7 @@ END SUBROUTINE cmfe_Finalise_ !!TODO Underscore to avoid name clash. Can be removed upon prefix rename. - !>Initialises CMISS. \see OpenCMISS::Iron::cmfe_Initialise + !>Initialises OpenCMISS. \see OpenCMISS::Iron::cmfe_Initialise SUBROUTINE cmfe_Initialise_(worldRegion,err,error,*) !Argument variables @@ -247,8 +247,8 @@ SUBROUTINE cmfe_Initialise_(worldRegion,err,error,*) cmfe_ErrorHandlingMode = CMFE_OUTPUT_ERROR !Default for now, maybe make CMFE_RETURN_ERROR_CODE the default !Initialise the base routines CALL BaseRoutinesInitialise(err,error,*999) - !Intialise the computation environment - CALL Computation_EnvironmentInitialise(err,error,*999) + !Intialise the computation + CALL Computation_Initialise(err,error,*999) !Setup signal handling CALL cmfe_InitFatalHandler() CALL cmfe_SetFatalHandler() @@ -265,7 +265,7 @@ SUBROUTINE cmfe_Initialise_(worldRegion,err,error,*) CALL PROBLEMS_INITIALISE(err,error,*999) !Write out the CMISS version - IF(computationEnvironment%myComputationNodeNumber==0) THEN + IF(computationEnvironment%myWorldComputationNodeNumber==0) THEN versionString="OpenCMISS(Iron) version "//TRIM(NumberToVString(CMFE_MAJOR_VERSION,"*",err,error)) versionString=versionString//"." versionString=versionString//TRIM(NumberToVString(CMFE_MINOR_VERSION,"*",err,error)) diff --git a/src/computation_routines.f90 b/src/computation_routines.f90 index 9ccfa987..f505edc5 100755 --- a/src/computation_routines.f90 +++ b/src/computation_routines.f90 @@ -73,18 +73,21 @@ MODULE ComputationRoutines !>pointer type to ComputationWorkGroupType TYPE :: ComputationWorkGroupPtrType - TYPE(ComputationWorkGroupType), POINTER :: ptr + TYPE(ComputationWorkGroupType), POINTER :: ptr END TYPE ComputationWorkGroupPtrType !>Contains information on logical working groups TYPE :: ComputationWorkGroupType - INTEGER(INTG) :: numberOfComputationNodes !Contains information on a computation node containing a number of processors TYPE ComputationNodeType INTEGER(INTG) :: numberOfProcessors !Contains information on the computation environment the program is running in. TYPE ComputationEnvironmentType - LOGICAL :: cmissMPIInitialised !Finalise a work group and deallocate all memory + RECURSIVE SUBROUTINE Computation_WorkGroupFinalise(workGroup,err,error,*) + + !Argument Variables + TYPE(ComputationWorkGroupType),POINTER :: workGroup !Add the work sub-group to the parent group based on the computation requirements (called by user) + SUBROUTINE Computation_WorkGroupInitialise(workGroup,err,error,*) + + !Argument Variables + TYPE(ComputationWorkGroupType),POINTER, INTENT(OUT) :: workGroup !parentWorkGroup%subWorkGroups(I)%ptr + ALLOCATE(subGroups(parentWorkGroup%numberOfSubGroups+1)) + DO I=1,parentWorkGroup%numberOfSubGroups + subGroups(I)%ptr=>parentWorkGroup%subGroups(I)%ptr ENDDO - !subWorkGroups(1:parentWorkGroup%numberOfSubWorkGroups)=>parentWorkGroup%subWorkGroups(:) + !subGroups(1:parentWorkGroup%numberOfSubGroups)=>parentWorkGroup%subGroups(:) - IF(ALLOCATED(parentWorkGroup%subWorkGroups)) THEN - DEALLOCATE(parentWorkGroup%subWorkGroups) + IF(ALLOCATED(parentWorkGroup%subGroups)) THEN + DEALLOCATE(parentWorkGroup%subGroups) ENDIF - subWorkGroups(1+parentWorkGroup%numberOfSubWorkGroups)%ptr=>newWorkGroup%ptr - ALLOCATE(parentWorkGroup%subWorkGroups(SIZE(subWorkGroups,1))) - DO I=1,SIZE(subWorkGroups,1) - parentWorkGroup%subWorkGroups(I)%ptr => subWorkGroups(I)%ptr + subGroups(1+parentWorkGroup%numberOfSubGroups)%ptr=>newWorkGroup%ptr + ALLOCATE(parentWorkGroup%subGroups(SIZE(subGroups,1))) + DO I=1,SIZE(subGroups,1) + parentWorkGroup%subGroups(I)%ptr => subGroups(I)%ptr ENDDO - !parentWorkGroup%subWorkGroups(:) => subWorkGroups(:) + !parentWorkGroup%subGroups(:) => subGroups(:) - DEALLOCATE(subWorkGroups) - parentWorkGroup%numberOfSubWorkGroups = 1+parentWorkGroup%numberOfSubWorkGroups + DEALLOCATE(subGroups) + parentWorkGroup%numberOfSubGroups = 1+parentWorkGroup%numberOfSubGroups newWorkGroup%ptr%PARENT => parentWorkGroup tmpParentWorkGroup => parentWorkGroup DO WHILE(ASSOCIATED(tmpParentWorkGroup)) !Update the computation number of its ancestors @@ -219,29 +302,29 @@ END SUBROUTINE Computation_WorkGroupSubGroupAdd !================================================================================================================================ ! - !>Create the highest level work group (Default: GROUP_WORLD) - SUBROUTINE Computation_WorkGroupCreateStart(worldWorkGroup,numberOfComputationNodes,err,error,*) + !>Start the creation of a work group + SUBROUTINE Computation_WorkGroupCreateStart(parentWorkGroup,numberOfComputationNodes,workGroup,err,error,*) !Argument Variables - TYPE(ComputationWorkGroupType),POINTER, INTENT(INOUT) :: worldWorkGroup - INTEGER(INTG),INTENT(IN) :: numberOfComputationNodes + TYPE(ComputationWorkGroupType), POINTER, INTENT(INOUT) :: parentWorkGroup !newWorkGroup%ptr + IF(.NOT.ASSOCIATED(parentWorkGroup)) CALL FlagError('Parent work group is not associated.',err,error,*999) + IF(ASSOCIATED(workGroup)) CALL FlagError("Work group is already associated.",err,error,*999) + IF(numberOfComputationNodes<1.OR.numberOfComputationNodes>parentWorkGroup%numberOfAvailableRanks) THEN + localError="The requested number of computation nodes is invalid. The number of computation nodes must be > 0 and <= "// & + & TRIM(NumberToVString(parentWorkGroup%numberOfAvailableRanks,"*",err,error))//"." + CALL FlagError(localError,err,error,*999) ENDIF + + CALL Computation_WorkGroupInitialise(workGroup,err,error,*999) EXITS("Computation_WorkGroupCreateStart") RETURN @@ -271,19 +354,19 @@ RECURSIVE SUBROUTINE Computation_WorkGroupGenerateCompEnviron(workGroup,availabl ALLOCATE(workGroup%computationEnvironment) !Set size of computation nodes in this communicator - workGroup%computationEnvironment%numberOfComputationNodes = workGroup%numberOfComputationNodes + workGroup%computationEnvironment%numberOfWorldComputationNodes = workGroup%numberOfComputationNodes !Determine my processes rank - CALL MPI_COMM_RANK(computationEnvironment%mpiCommunicator,rank,mpiIError) + CALL MPI_COMM_RANK(computationEnvironment%mpiWorldCommunicator,rank,mpiIError) CALL MPI_ERROR_CHECK("MPI_COMM_RANK",mpiIError,err,error,*999) - workGroup%computationEnvironment%myComputationNodeNumber=rank + workGroup%computationEnvironment%myWorldComputationNodeNumber=rank !Fill in the information for every computation node in this group - ALLOCATE(workGroup%computationEnvironment%computationNodes(workGroup%computationEnvironment%numberOfComputationNodes)) - IF(SIZE(availableRankList,1)-workGroup%computationEnvironment%numberOfComputationNodes < 0) THEN + ALLOCATE(workGroup%computationEnvironment%computationNodes(workGroup%computationEnvironment%numberOfWorldComputationNodes)) + IF(SIZE(availableRankList,1)-workGroup%computationEnvironment%numberOfWorldComputationNodes < 0) THEN CALL FlagError("NOT ENOUGH RANKS",err,error,*999) ENDIF - DO rankIdx=1,workGroup%computationEnvironment%numberOfComputationNodes,1 + DO rankIdx=1,workGroup%computationEnvironment%numberOfWorldComputationNodes,1 workGroup%computationEnvironment%computationNodes(rankIdx) = & & computationEnvironment%computationNodes(availableRankList(rankIdx)) ENDDO !rankIdx @@ -293,7 +376,7 @@ RECURSIVE SUBROUTINE Computation_WorkGroupGenerateCompEnviron(workGroup,availabl CALL MPI_ERROR_CHECK("MPI_COMM_RANK",mpiIError,err,error,*999) CALL MPI_GROUP_INCL(originalGroup,rankIdx-1,availableRankList(1:rankIdx-1),newGroup,mpiIError) !Choose the first I-1 ranks CALL MPI_ERROR_CHECK("MPI_COMM_RANK",mpiIError,err,error,*999) - CALL MPI_COMM_CREATE(MPI_COMM_WORLD,newGroup,workGroup%computationEnvironment%mpiCommunicator,mpiIError) + CALL MPI_COMM_CREATE(MPI_COMM_WORLD,newGroup,workGroup%computationEnvironment%mpiWorldCommunicator,mpiIError) CALL MPI_ERROR_CHECK("MPI_COMM_RANK",mpiIError,err,error,*999) CALL MPI_GROUP_FREE(originalGroup,mpiIError) CALL MPI_ERROR_CHECK("MPI_COMM_RANK",mpiIError,err,error,*999) @@ -301,7 +384,7 @@ RECURSIVE SUBROUTINE Computation_WorkGroupGenerateCompEnviron(workGroup,availabl CALL MPI_ERROR_CHECK("MPI_COMM_RANK",mpiIError,err,error,*999) !Shrink the availableRankList - ALLOCATE(newAvailableRankList(SIZE(availableRankList,1)-workGroup%computationEnvironment%numberOfComputationNodes)) + ALLOCATE(newAvailableRankList(SIZE(availableRankList,1)-workGroup%computationEnvironment%numberOfWorldComputationNodes)) newAvailableRankList(1:SIZE(newAvailableRankList)) = availableRankList(rankIdx:SIZE(availableRankList,1)) DEALLOCATE(availableRankList) ALLOCATE(availableRankList(SIZE(newAvailableRankList,1))) @@ -310,8 +393,8 @@ RECURSIVE SUBROUTINE Computation_WorkGroupGenerateCompEnviron(workGroup,availabl workGroup%computationEnvironmentFinished = .TRUE. !Recursively do this to all its subgroups - DO subGroupIdx=1,workGroup%numberOfSubWorkGroups,1 - CALL Computation_WorkGroupGenerateCompEnviron(workGroup%subWorkGroups(subGroupIdx)%ptr,& + DO subGroupIdx=1,workGroup%numberOfSubGroups,1 + CALL Computation_WorkGroupGenerateCompEnviron(workGroup%subGroups(subGroupIdx)%ptr,& & availableRankList,err,error,*999) ENDDO !subGroupIdx @@ -345,12 +428,12 @@ SUBROUTINE Computation_WorkGroupCreateFinish(worldWorkGroup,err,error,*) worldWorkGroup%computationEnvironmentFinished = .TRUE. !generate the communicators for subgroups if any - ALLOCATE(availableRankList(worldWorkGroup%computationEnvironment%numberOfComputationNodes)) + ALLOCATE(availableRankList(worldWorkGroup%computationEnvironment%numberOfWorldComputationNodes)) DO rankIdx=0,SIZE(availableRankList,1)-1 availableRankList(rankIdx+1) = rankIdx ENDDO !rankIdx - DO subGroupIdx=1,worldWorkGroup%numberOfSubWorkGroups,1 - CALL Computation_WorkGroupGenerateCompEnviron(worldWorkGroup%subWorkGroups(subGroupIdx)%ptr,availableRankList, & + DO subGroupIdx=1,worldWorkGroup%numberOfSubGroups,1 + CALL Computation_WorkGroupGenerateCompEnviron(worldWorkGroup%subGroups(subGroupIdx)%ptr,availableRankList, & & err,error,*999) ENDDO !subGroupIdx @@ -366,7 +449,7 @@ END SUBROUTINE Computation_WorkGroupCreateFinish ! !>Finalises the computation node data structures and deallocates all memory. - SUBROUTINE ComputationEnvironment_ComputationNodeFinalise(computationNode,err,error,*) + SUBROUTINE Computation_ComputationNodeFinalise(computationNode,err,error,*) !Argument Variables TYPE(ComputationNodeType),INTENT(INOUT) :: computationNode !Initialises the computation node data structures. - SUBROUTINE ComputationEnvironment_ComputationNodeInitialise(computationNode,rank,err,error,*) + SUBROUTINE Computation_ComputationNodeInitialise(computationNode,rank,err,error,*) !Argument Variables TYPE(ComputationNodeType), INTENT(OUT) :: computationNode !Finalises the data structure containing the MPI type information for the ComputationNodeType. - SUBROUTINE ComputationEnvironment_ComputationNodeTypeFinalise(err,error,*) + !>Finalises the MPI computation node type data structure and deallocates all memory. + SUBROUTINE Computation_MPIComputationNodeFinalise(mpiComputationNode,err,error,*) !Argument Variables + TYPE(MPIComputationNodeType) :: mpiComputationNode !Initialises the data structure containing the MPI type information for the ComputationNodeType. - SUBROUTINE ComputationEnvironment_ComputationNodeTypeInitialise(computationNode,err,error,*) + SUBROUTINE Computation_MPIComputationNodeInitialise(computationEnvironment,rank,err,error,*) !Argument Variables - TYPE(ComputationNodeType), INTENT(IN) :: computationNode !computationEnvironment%numberOfWorldComputationNodes) THEN + localError="The specified rank of "//TRIM(NumberToVString(rank,"*",err,error))// & + & " is invalid. The rank should be >= 0 and <= "// & + & TRIM(NumberToVString(computationEnvironment%numberOfWorldComputationNodes,"*",err,error))//"." + CALL FlagError(localError,err,error,*999) + ENDIF - mpiComputationNodeTypeData%mpiType=MPI_DATATYPE_NULL + computationEnvironment%mpiComputationNode%mpiType=MPI_DATATYPE_NULL - mpiComputationNodeTypeData%numberOfBlocks=4 - mpiComputationNodeTypeData%types=[MPI_INTEGER,MPI_INTEGER,MPI_INTEGER,MPI_CHARACTER] - mpiComputationNodeTypeData%blockLengths=[1,1,1,MPI_MAX_PROCESSOR_NAME] + computationEnvironment%mpiComputationNode%numberOfBlocks=4 + computationEnvironment%mpiComputationNode%types=[MPI_INTEGER,MPI_INTEGER,MPI_INTEGER,MPI_CHARACTER] + computationEnvironment%mpiComputationNode%blockLengths=[1,1,1,MPI_MAX_PROCESSOR_NAME] - CALL MPI_GET_ADDRESS(computationNode%numberOfProcessors,mpiComputationNodeTypeData%displacements(1),mpiIError) + CALL MPI_GET_ADDRESS(computationEnvironment%computationNodes(rank)%numberOfProcessors, & + & computationEnvironment%mpiComputationNode%displacements(1),mpiIError) CALL MPI_ERROR_CHECK("MPI_GET_ADDRESS",mpiIError,err,error,*999) - CALL MPI_GET_ADDRESS(computationNode%RANK,mpiComputationNodeTypeData%displacements(2),mpiIError) + CALL MPI_GET_ADDRESS(computationEnvironment%computationNodes(rank)%rank, & + & computationEnvironment%mpiComputationNode%displacements(2),mpiIError) CALL MPI_ERROR_CHECK("MPI_GET_ADDRESS",mpiIError,err,error,*999) - CALL MPI_GET_ADDRESS(computationNode%nodeNameLength,mpiComputationNodeTypeData%displacements(3),mpiIError) + CALL MPI_GET_ADDRESS(computationEnvironment%computationNodes(rank)%nodeNameLength, & + & computationEnvironment%mpiComputationNode%displacements(3),mpiIError) CALL MPI_ERROR_CHECK("MPI_GET_ADDRESS",mpiIError,err,error,*999) !CPB 19/02/07 AIX compiler complains about the type of the first parameter i.e., the previous 3 have been integers !and this one is not so cast the type. - CALL MPI_GET_ADDRESS(computationNode%nodeName,mpiComputationNodeTypeData%displacements(4),mpiIError) + CALL MPI_GET_ADDRESS(computationEnvironment%computationNodes(rank)%nodeName, & + & computationEnvironment%mpiComputationNode%displacements(4),mpiIError) CALL MPI_ERROR_CHECK("MPI_GET_ADDRESS",mpiIError,err,error,*999) - DO i=4,1,-1 - mpiComputationNodeTypeData%displacements(I)=mpiComputationNodeTypeData%displacements(I)- & - & mpiComputationNodeTypeData%displacements(1) - ENDDO !i - - CALL MPI_TYPE_CREATE_STRUCT(mpiComputationNodeTypeData%numberOfBlocks,mpiComputationNodeTypeData%blockLengths, & - & mpiComputationNodeTypeData%displacements,mpiComputationNodeTypeData%types, & - & mpiComputationNodeTypeData%mpiType,mpiIError) + DO blockIdx=4,1,-1 + computationEnvironment%mpiComputationNode%displacements(blockIdx)= & + & computationEnvironment%mpiComputationNode%displacements(blockIdx)- & + & computationEnvironment%mpiComputationNode%displacements(1) + ENDDO !blockIdx + + CALL MPI_TYPE_CREATE_STRUCT(computationEnvironment%mpiComputationNode%numberOfBlocks, & + & computationEnvironment%mpiComputationNode%blockLengths, & + & computationEnvironment%mpiComputationNode%displacements, & + & computationEnvironment%mpiComputationNode%types, & + & computationEnvironment%mpiComputationNode%mpiType,mpiIError) CALL MPI_ERROR_CHECK("MPI_TYPE_CREATE_STRUCT",mpiIError,err,error,*999) - CALL MPI_TYPE_COMMIT(mpiComputationNodeTypeData%mpiType, mpiIError) + CALL MPI_TYPE_COMMIT(computationEnvironment%mpiComputationNode%mpiType,mpiIError) CALL MPI_ERROR_CHECK("MPI_TYPE_COMMIT",mpiIError,err,error,*999) - IF(DIAGNOSTICS3) THEN + IF(diagnostics1) THEN CALL WriteString(DIAGNOSTIC_OUTPUT_TYPE,"MPI Computation Node Type Data:",err,error,*999) - CALL WriteStringValue(DIAGNOSTIC_OUTPUT_TYPE," MPI type = ",mpiComputationNodeTypeData%mpiType,err,error,*999) - CALL WriteStringValue(DIAGNOSTIC_OUTPUT_TYPE," Number blocks = ",mpiComputationNodeTypeData%numberOfBlocks,err,error,*999) - CALL WriteStringVector(DIAGNOSTIC_OUTPUT_TYPE,1,1,mpiComputationNodeTypeData%numberOfBlocks,4,4, & - & mpiComputationNodeTypeData%types,'(" Block types =",4(X,I15))','(15X,4(X,I15))',err,error,*999) - CALL WriteStringVector(DIAGNOSTIC_OUTPUT_TYPE,1,1,mpiComputationNodeTypeData%numberOfBlocks,8,8, & - & mpiComputationNodeTypeData%blockLengths,'(" Block lengths =",8(X,I5))','(17X,8(X,I5))',err,error,*999) - CALL WriteStringVector(DIAGNOSTIC_OUTPUT_TYPE,1,1,mpiComputationNodeTypeData%numberOfBlocks,8,8, & - & mpiComputationNodeTypeData%displacements,'(" Displacements =",8(X,I5))','(17X,8(X,I5))',err,error,*999) + CALL WriteStringValue(DIAGNOSTIC_OUTPUT_TYPE," MPI type = ", & + & computationEnvironment%mpiComputationNode%mpiType,err,error,*999) + CALL WriteStringValue(DIAGNOSTIC_OUTPUT_TYPE," Number of blocks = ", & + & computationEnvironment%mpiComputationNode%numberOfBlocks,err,error,*999) + CALL WriteStringVector(DIAGNOSTIC_OUTPUT_TYPE,1,1,computationEnvironment%mpiComputationNode%numberOfBlocks,4,4, & + & computationEnvironment%mpiComputationNode%types,'(" Block types =",4(X,I15))','(15X,4(X,I15))',err,error,*999) + CALL WriteStringVector(DIAGNOSTIC_OUTPUT_TYPE,1,1,computationEnvironment%mpiComputationNode%numberOfBlocks,8,8, & + & computationEnvironment%mpiComputationNode%blockLengths,'(" Block lengths =",8(X,I5))','(17X,8(X,I5))',err,error,*999) + CALL WriteStringVector(DIAGNOSTIC_OUTPUT_TYPE,1,1,computationEnvironment%mpiComputationNode%numberOfBlocks,8,8, & + & computationEnvironment%mpiComputationNode%displacements,'(" Displacements =",8(X,I5))','(17X,8(X,I5))',err,error,*999) ENDIF - EXITS("ComputationEnvironment_ComputationNodeTypeInitialise") + EXITS("Computation_MPIComputationNodeInitialise") RETURN -999 CALL ComputationEnvironment_ComputationNodeTypeFinalise(err,error,*998) -998 ERRORS("ComputationEnvironment_ComputationNodeTypeInitialise",err,error) - EXITS("ComputationEnvironment_ComputationNodeTypeInitialise") +999 CALL Computation_MPIComputationNodeFinalise(computationEnvironment%mpiComputationNode,dummyErr,dummyError,*998) +998 ERRORS("Computation_MPIComputationNodeInitialise",err,error) + EXITS("Computation_MPIComputationNodeInitialise") RETURN 1 - END SUBROUTINE ComputationEnvironment_ComputationNodeTypeInitialise + END SUBROUTINE Computation_MPIComputationNodeInitialise ! !================================================================================================================================= ! !>Finalises the computation environment data structures and deallocates all memory. - SUBROUTINE Computation_EnvironmentFinalise(err,error,*) + SUBROUTINE Computation_ComputationEnvironmentFinalise(computationEnvironment,err,error,*) !Argument Variables + TYPE(ComputationEnvironmentType) :: computationEnvironment !Initialises the computation environment data structures. - SUBROUTINE Computation_EnvironmentInitialise(err,error,*) + SUBROUTINE Computation_ComputationEnvironmentInitialise(computationEnvironment,err,error,*) !Argument Variables + TYPE(ComputationEnvironmentType) :: computationEnvironment !Finalises the computation data structures and deallocates all memory. + SUBROUTINE Computation_Finalise(err,error,*) - EXITS("Computation_EnvironmentInitialise") + !Argument Variables + INTEGER(INTG), INTENT(OUT) :: err !Initialises the computation data structures. + SUBROUTINE Computation_Initialise(err,error,*) + + !Argument Variables + INTEGER(INTG), INTENT(OUT) :: err !1) THEN + IF(numberOfWorldComputationNodes>1) THEN !Use MPI !Allocate arrays for MPI communication ALLOCATE(globalToLocalNumberOfClosestCandidates(numberOfDataPoints),STAT=err) IF(err/=0) CALL FlagError("Could not allocate global to local number of closest elements.",err,error,*999) - ALLOCATE(globalNumberOfClosestCandidates(numberOfComputationNodes),STAT=err) + ALLOCATE(globalNumberOfClosestCandidates(numberOfWorldComputationNodes),STAT=err) IF(err/=0) CALL FlagError("Could not allocate global number of closest candidates.",err,error,*999) - ALLOCATE(globalMPIDisplacements(numberOfComputationNodes),STAT=err) + ALLOCATE(globalMPIDisplacements(numberOfWorldComputationNodes),STAT=err) IF(err/=0) CALL FlagError("Could not allocate global MPI displacements.",err,error,*999) - ALLOCATE(globalNumberOfProjectedPoints(numberOfComputationNodes),STAT=err) + ALLOCATE(globalNumberOfProjectedPoints(numberOfWorldComputationNodes),STAT=err) IF(err/=0) CALL FlagError("Could not allocate all number of projected points.",err,error,*999) ALLOCATE(projectionExitTag(numberOfDataPoints),STAT=err) IF(err/=0) CALL FlagError("Could not allocate projected.",err,error,*999) @@ -1686,7 +1686,7 @@ SUBROUTINE DataProjection_DataPointsProjectionEvaluate(dataProjection,projection IF(err/=0) CALL FlagError("Could not allocate sorting indices 2.",err,error,*999) !gather and distribute the number of closest elements from all computation nodes CALL MPI_ALLGATHER(numberOfClosestCandidates,1,MPI_INTEGER,globalNumberOfClosestCandidates,1,MPI_INTEGER, & - & computationEnvironment%mpiCommunicator,MPIIError) + & computationEnvironment%mpiWorldCommunicator,MPIIError) CALL MPI_ERROR_CHECK("MPI_ALLGATHER",MPIIError,err,error,*999) !Sum all number of closest candidates from all computation nodes totalNumberOfClosestCandidates=SUM(globalNumberOfClosestCandidates,1) @@ -1704,14 +1704,14 @@ SUBROUTINE DataProjection_DataPointsProjectionEvaluate(dataProjection,projection CALL MPI_ERROR_CHECK("MPI_TYPE_COMMIT",MPIIError,err,error,*999) !Create displacement vectors for MPI_ALLGATHERV globalMPIDisplacements(1)=0 - DO computationNodeIdx=1,(numberOfComputationNodes-1) + DO computationNodeIdx=1,(numberOfWorldComputationNodes-1) globalMPIDisplacements(computationNodeIdx+1)=globalMPIDisplacements(computationNodeIdx)+ & & globalNumberOfClosestCandidates(computationNodeIdx) ENDDO !computationNodeIdx !Share closest element distances between all domains CALL MPI_ALLGATHERV(closestDistances(1,1),numberOfClosestCandidates,MPIClosestDistances, & & globalClosestDistances,globalNumberOfClosestCandidates,globalMPIDisplacements, & - & MPIClosestDistances,computationEnvironment%mpiCommunicator,MPIIError) + & MPIClosestDistances,computationEnvironment%mpiWorldCommunicator,MPIIError) CALL MPI_ERROR_CHECK("MPI_ALLGATHERV",MPIIError,err,error,*999) reducedNumberOfCLosestCandidates=MIN(dataProjection%numberOfClosestElements,totalNumberOfClosestCandidates) projectedDistance(2,:)=myComputationNode @@ -1818,47 +1818,47 @@ SUBROUTINE DataProjection_DataPointsProjectionEvaluate(dataProjection,projection END SELECT !Find the shortest projected distance in all domains CALL MPI_ALLREDUCE(MPI_IN_PLACE,projectedDistance,numberOfDataPoints,MPI_2DOUBLE_PRECISION,MPI_MINLOC, & - & computationEnvironment%mpiCommunicator,MPIIError) + & computationEnvironment%mpiWorldCommunicator,MPIIError) CALL MPI_ERROR_CHECK("MPI_ALLREDUCE",MPIIError,err,error,*999) !Sort the computation node/rank from 0 to number of computation node CALL Sorting_BubbleIndexSort(projectedDistance(2,:),sortingIndices2,err,error,*999) - DO computationNodeIdx=0,(numberOfComputationNodes-1) + DO computationNodeIdx=0,(numberOfWorldComputationNodes-1) globalNumberOfProjectedPoints(computationNodeIdx+1)=COUNT(ABS(projectedDistance(2,:)- & & REAL(computationNodeIdx))1 + ENDIF !numberOfWorldComputationNodes>1 !Compute full elemental xi IF(dataProjection%numberOfXi==dataProjection%numberOfElementXi) THEN DO dataPointIdx=1,numberOfDataPoints @@ -4691,7 +4691,7 @@ SUBROUTINE DataProjection_ResultAnalysisOutput(dataProjection,filename,err,error TYPE(VARYING_STRING), INTENT(OUT) :: error !=1) THEN - IF(numberOfComputationNodes>1) THEN - WRITE(analFilename,('(A,A,I0)')) filename(1:filenameLength),".opdataproj.",myComputationNodeNumber + IF(numberOfWorldComputationNodes>1) THEN + WRITE(analFilename,('(A,A,I0)')) filename(1:filenameLength),".opdataproj.",myWorldComputationNodeNumber ELSE analFilename=filename(1:filenameLength)//".opdataproj" ENDIF diff --git a/src/distributed_matrix_vector.f90 b/src/distributed_matrix_vector.f90 index 27f1c425..f43ba74e 100755 --- a/src/distributed_matrix_vector.f90 +++ b/src/distributed_matrix_vector.f90 @@ -2713,7 +2713,7 @@ SUBROUTINE DISTRIBUTED_MATRIX_PETSC_CREATE_FINISH(PETSC_MATRIX,ERR,ERROR,*) !Set up the matrix ALLOCATE(PETSC_MATRIX%DATA_DP(PETSC_MATRIX%DATA_SIZE),STAT=ERR) IF(ERR/=0) CALL FlagError("Could not allocate PETSc matrix data.",ERR,ERROR,*999) - CALL Petsc_MatCreateDense(computationEnvironment%mpiCommunicator,PETSC_MATRIX%M,PETSC_MATRIX%N, & + CALL Petsc_MatCreateDense(computationEnvironment%mpiWorldCommunicator,PETSC_MATRIX%M,PETSC_MATRIX%N, & & PETSC_MATRIX%GLOBAL_M,PETSC_MATRIX%GLOBAL_N,PETSC_MATRIX%DATA_DP,PETSC_MATRIX%MATRIX,ERR,ERROR,*999) CASE(DISTRIBUTED_MATRIX_DIAGONAL_STORAGE_TYPE) PETSC_MATRIX%NUMBER_NON_ZEROS=PETSC_MATRIX%M @@ -2733,7 +2733,7 @@ SUBROUTINE DISTRIBUTED_MATRIX_PETSC_CREATE_FINISH(PETSC_MATRIX,ERR,ERROR,*) PETSC_MATRIX%DIAGONAL_NUMBER_NON_ZEROS=1 PETSC_MATRIX%OFFDIAGONAL_NUMBER_NON_ZEROS=0 !Create the PETsc AIJ matrix - CALL Petsc_MatCreateAIJ(computationEnvironment%mpiCommunicator,PETSC_MATRIX%M,PETSC_MATRIX%N, & + CALL Petsc_MatCreateAIJ(computationEnvironment%mpiWorldCommunicator,PETSC_MATRIX%M,PETSC_MATRIX%N, & & PETSC_MATRIX%GLOBAL_M,PETSC_MATRIX%GLOBAL_N,PETSC_NULL_INTEGER,PETSC_MATRIX%DIAGONAL_NUMBER_NON_ZEROS, & & PETSC_NULL_INTEGER,PETSC_MATRIX%OFFDIAGONAL_NUMBER_NON_ZEROS,PETSC_MATRIX%MATRIX,ERR,ERROR,*999) CASE(DISTRIBUTED_MATRIX_COLUMN_MAJOR_STORAGE_TYPE) @@ -2744,7 +2744,7 @@ SUBROUTINE DISTRIBUTED_MATRIX_PETSC_CREATE_FINISH(PETSC_MATRIX,ERR,ERROR,*) IF(ALLOCATED(PETSC_MATRIX%DIAGONAL_NUMBER_NON_ZEROS)) THEN IF(ALLOCATED(PETSC_MATRIX%OFFDIAGONAL_NUMBER_NON_ZEROS)) THEN !Create the PETSc AIJ matrix - CALL Petsc_MatCreateAIJ(computationEnvironment%mpiCommunicator,PETSC_MATRIX%M,PETSC_MATRIX%N, & + CALL Petsc_MatCreateAIJ(computationEnvironment%mpiWorldCommunicator,PETSC_MATRIX%M,PETSC_MATRIX%N, & & PETSC_MATRIX%GLOBAL_M,PETSC_MATRIX%GLOBAL_N,PETSC_NULL_INTEGER,PETSC_MATRIX%DIAGONAL_NUMBER_NON_ZEROS, & & PETSC_NULL_INTEGER,PETSC_MATRIX%OFFDIAGONAL_NUMBER_NON_ZEROS,PETSC_MATRIX%MATRIX,ERR,ERROR,*999) !Set matrix options @@ -7675,7 +7675,7 @@ SUBROUTINE DISTRIBUTED_VECTOR_PETSC_CREATE_FINISH(PETSC_VECTOR,ERR,ERROR,*) IF(ASSOCIATED(DOMAIN_MAPPING)) THEN !Create the PETSc vector PETSC_VECTOR%DATA_SIZE=PETSC_VECTOR%N - CALL Petsc_VecCreateMPI(computationEnvironment%mpiCommunicator,PETSC_VECTOR%N,PETSC_VECTOR%GLOBAL_N, & + CALL Petsc_VecCreateMPI(computationEnvironment%mpiWorldCommunicator,PETSC_VECTOR%N,PETSC_VECTOR%GLOBAL_N, & & PETSC_VECTOR%VECTOR,ERR,ERROR,*999) !Set up the Local to Global Mappings DO i=1,PETSC_VECTOR%N @@ -8230,7 +8230,7 @@ SUBROUTINE DISTRIBUTED_VECTOR_UPDATE_START(DISTRIBUTED_VECTOR,ERR,ERROR,*) & DISTRIBUTED_VECTOR%CMISS%TRANSFERS(domain_idx)%RECEIVE_BUFFER_SIZE,MPI_INTEGER, & & DISTRIBUTED_VECTOR%DOMAIN_MAPPING%ADJACENT_DOMAINS(domain_idx)%DOMAIN_NUMBER, & & DISTRIBUTED_VECTOR%CMISS%TRANSFERS(domain_idx)%RECEIVE_TAG_NUMBER, & - & computationEnvironment%mpiCommunicator, & + & computationEnvironment%mpiWorldCommunicator, & & DISTRIBUTED_VECTOR%CMISS%TRANSFERS(domain_idx)%MPI_RECEIVE_REQUEST,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_IRECV",MPI_IERROR,ERR,ERROR,*999) IF(DIAGNOSTICS5) THEN @@ -8243,7 +8243,7 @@ SUBROUTINE DISTRIBUTED_VECTOR_UPDATE_START(DISTRIBUTED_VECTOR,ERR,ERROR,*) CALL WRITE_STRING_VALUE(DIAGNOSTIC_OUTPUT_TYPE," Receive tag = ",DISTRIBUTED_VECTOR% & & CMISS%TRANSFERS(domain_idx)%RECEIVE_TAG_NUMBER,ERR,ERROR,*999) CALL WRITE_STRING_VALUE(DIAGNOSTIC_OUTPUT_TYPE," Receive comm = ", & - & computationEnvironment%mpiCommunicator,ERR,ERROR,*999) + & computationEnvironment%mpiWorldCommunicator,ERR,ERROR,*999) CALL WRITE_STRING_VALUE(DIAGNOSTIC_OUTPUT_TYPE," Receive request = ",DISTRIBUTED_VECTOR% & & CMISS%TRANSFERS(domain_idx)%MPI_RECEIVE_REQUEST,ERR,ERROR,*999) ENDIF @@ -8252,7 +8252,7 @@ SUBROUTINE DISTRIBUTED_VECTOR_UPDATE_START(DISTRIBUTED_VECTOR,ERR,ERROR,*) & DISTRIBUTED_VECTOR%CMISS%TRANSFERS(domain_idx)%RECEIVE_BUFFER_SIZE,MPI_REAL, & & DISTRIBUTED_VECTOR%DOMAIN_MAPPING%ADJACENT_DOMAINS(domain_idx)%DOMAIN_NUMBER, & & DISTRIBUTED_VECTOR%CMISS%TRANSFERS(domain_idx)%RECEIVE_TAG_NUMBER, & - & computationEnvironment%mpiCommunicator, & + & computationEnvironment%mpiWorldCommunicator, & & DISTRIBUTED_VECTOR%CMISS%TRANSFERS(domain_idx)%MPI_RECEIVE_REQUEST,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_IRECV",MPI_IERROR,ERR,ERROR,*999) IF(DIAGNOSTICS5) THEN @@ -8265,7 +8265,7 @@ SUBROUTINE DISTRIBUTED_VECTOR_UPDATE_START(DISTRIBUTED_VECTOR,ERR,ERROR,*) CALL WRITE_STRING_VALUE(DIAGNOSTIC_OUTPUT_TYPE," Receive tag = ",DISTRIBUTED_VECTOR% & & CMISS%TRANSFERS(domain_idx)%RECEIVE_TAG_NUMBER,ERR,ERROR,*999) CALL WRITE_STRING_VALUE(DIAGNOSTIC_OUTPUT_TYPE," Receive comm = ", & - & computationEnvironment%mpiCommunicator,ERR,ERROR,*999) + & computationEnvironment%mpiWorldCommunicator,ERR,ERROR,*999) CALL WRITE_STRING_VALUE(DIAGNOSTIC_OUTPUT_TYPE," Receive request = ",DISTRIBUTED_VECTOR% & & CMISS%TRANSFERS(domain_idx)%MPI_RECEIVE_REQUEST,ERR,ERROR,*999) ENDIF @@ -8274,7 +8274,7 @@ SUBROUTINE DISTRIBUTED_VECTOR_UPDATE_START(DISTRIBUTED_VECTOR,ERR,ERROR,*) & DISTRIBUTED_VECTOR%CMISS%TRANSFERS(domain_idx)%RECEIVE_BUFFER_SIZE,MPI_DOUBLE_PRECISION, & & DISTRIBUTED_VECTOR%DOMAIN_MAPPING%ADJACENT_DOMAINS(domain_idx)%DOMAIN_NUMBER, & & DISTRIBUTED_VECTOR%CMISS%TRANSFERS(domain_idx)%RECEIVE_TAG_NUMBER, & - & computationEnvironment%mpiCommunicator, & + & computationEnvironment%mpiWorldCommunicator, & & DISTRIBUTED_VECTOR%CMISS%TRANSFERS(domain_idx)%MPI_RECEIVE_REQUEST,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_IRECV",MPI_IERROR,ERR,ERROR,*999) IF(DIAGNOSTICS5) THEN @@ -8287,7 +8287,7 @@ SUBROUTINE DISTRIBUTED_VECTOR_UPDATE_START(DISTRIBUTED_VECTOR,ERR,ERROR,*) CALL WRITE_STRING_VALUE(DIAGNOSTIC_OUTPUT_TYPE," Receive tag = ",DISTRIBUTED_VECTOR% & & CMISS%TRANSFERS(domain_idx)%RECEIVE_TAG_NUMBER,ERR,ERROR,*999) CALL WRITE_STRING_VALUE(DIAGNOSTIC_OUTPUT_TYPE," Receive comm = ", & - & computationEnvironment%mpiCommunicator,ERR,ERROR,*999) + & computationEnvironment%mpiWorldCommunicator,ERR,ERROR,*999) CALL WRITE_STRING_VALUE(DIAGNOSTIC_OUTPUT_TYPE," Receive request = ",DISTRIBUTED_VECTOR% & & CMISS%TRANSFERS(domain_idx)%MPI_RECEIVE_REQUEST,ERR,ERROR,*999) ENDIF @@ -8296,7 +8296,7 @@ SUBROUTINE DISTRIBUTED_VECTOR_UPDATE_START(DISTRIBUTED_VECTOR,ERR,ERROR,*) & DISTRIBUTED_VECTOR%CMISS%TRANSFERS(domain_idx)%RECEIVE_BUFFER_SIZE,MPI_LOGICAL, & & DISTRIBUTED_VECTOR%DOMAIN_MAPPING%ADJACENT_DOMAINS(domain_idx)%DOMAIN_NUMBER, & & DISTRIBUTED_VECTOR%CMISS%TRANSFERS(domain_idx)%RECEIVE_TAG_NUMBER, & - & computationEnvironment%mpiCommunicator, & + & computationEnvironment%mpiWorldCommunicator, & & DISTRIBUTED_VECTOR%CMISS%TRANSFERS(domain_idx)%MPI_RECEIVE_REQUEST,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_IRECV",MPI_IERROR,ERR,ERROR,*999) IF(DIAGNOSTICS5) THEN @@ -8309,7 +8309,7 @@ SUBROUTINE DISTRIBUTED_VECTOR_UPDATE_START(DISTRIBUTED_VECTOR,ERR,ERROR,*) CALL WRITE_STRING_VALUE(DIAGNOSTIC_OUTPUT_TYPE," Receive tag = ",DISTRIBUTED_VECTOR% & & CMISS%TRANSFERS(domain_idx)%RECEIVE_TAG_NUMBER,ERR,ERROR,*999) CALL WRITE_STRING_VALUE(DIAGNOSTIC_OUTPUT_TYPE," Receive comm = ", & - & computationEnvironment%mpiCommunicator,ERR,ERROR,*999) + & computationEnvironment%mpiWorldCommunicator,ERR,ERROR,*999) CALL WRITE_STRING_VALUE(DIAGNOSTIC_OUTPUT_TYPE," Receive request = ",DISTRIBUTED_VECTOR% & & CMISS%TRANSFERS(domain_idx)%MPI_RECEIVE_REQUEST,ERR,ERROR,*999) ENDIF @@ -8331,7 +8331,7 @@ SUBROUTINE DISTRIBUTED_VECTOR_UPDATE_START(DISTRIBUTED_VECTOR,ERR,ERROR,*) & DISTRIBUTED_VECTOR%CMISS%TRANSFERS(domain_idx)%SEND_BUFFER_SIZE,MPI_INTEGER, & & DISTRIBUTED_VECTOR%DOMAIN_MAPPING%ADJACENT_DOMAINS(domain_idx)%DOMAIN_NUMBER, & & DISTRIBUTED_VECTOR%CMISS%TRANSFERS(domain_idx)%SEND_TAG_NUMBER, & - & computationEnvironment%mpiCommunicator, & + & computationEnvironment%mpiWorldCommunicator, & & DISTRIBUTED_VECTOR%CMISS%TRANSFERS(domain_idx)%MPI_SEND_REQUEST,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ISEND",MPI_IERROR,ERR,ERROR,*999) IF(DIAGNOSTICS5) THEN @@ -8344,7 +8344,7 @@ SUBROUTINE DISTRIBUTED_VECTOR_UPDATE_START(DISTRIBUTED_VECTOR,ERR,ERROR,*) CALL WRITE_STRING_VALUE(DIAGNOSTIC_OUTPUT_TYPE," Send tag = ",DISTRIBUTED_VECTOR% & & CMISS%TRANSFERS(domain_idx)%SEND_TAG_NUMBER,ERR,ERROR,*999) CALL WRITE_STRING_VALUE(DIAGNOSTIC_OUTPUT_TYPE," Send comm = ", & - & computationEnvironment%mpiCommunicator,ERR,ERROR,*999) + & computationEnvironment%mpiWorldCommunicator,ERR,ERROR,*999) CALL WRITE_STRING_VALUE(DIAGNOSTIC_OUTPUT_TYPE," Send request = ",DISTRIBUTED_VECTOR% & & CMISS%TRANSFERS(domain_idx)%MPI_SEND_REQUEST,ERR,ERROR,*999) ENDIF @@ -8353,7 +8353,7 @@ SUBROUTINE DISTRIBUTED_VECTOR_UPDATE_START(DISTRIBUTED_VECTOR,ERR,ERROR,*) & DISTRIBUTED_VECTOR%CMISS%TRANSFERS(domain_idx)%SEND_BUFFER_SIZE,MPI_REAL, & & DISTRIBUTED_VECTOR%DOMAIN_MAPPING%ADJACENT_DOMAINS(domain_idx)%DOMAIN_NUMBER, & & DISTRIBUTED_VECTOR%CMISS%TRANSFERS(domain_idx)%SEND_TAG_NUMBER, & - & computationEnvironment%mpiCommunicator, & + & computationEnvironment%mpiWorldCommunicator, & & DISTRIBUTED_VECTOR%CMISS%TRANSFERS(domain_idx)%MPI_SEND_REQUEST,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ISEND",MPI_IERROR,ERR,ERROR,*999) IF(DIAGNOSTICS5) THEN @@ -8366,7 +8366,7 @@ SUBROUTINE DISTRIBUTED_VECTOR_UPDATE_START(DISTRIBUTED_VECTOR,ERR,ERROR,*) CALL WRITE_STRING_VALUE(DIAGNOSTIC_OUTPUT_TYPE," Send tag = ",DISTRIBUTED_VECTOR% & & CMISS%TRANSFERS(domain_idx)%SEND_TAG_NUMBER,ERR,ERROR,*999) CALL WRITE_STRING_VALUE(DIAGNOSTIC_OUTPUT_TYPE," Send comm = ", & - & computationEnvironment%mpiCommunicator,ERR,ERROR,*999) + & computationEnvironment%mpiWorldCommunicator,ERR,ERROR,*999) CALL WRITE_STRING_VALUE(DIAGNOSTIC_OUTPUT_TYPE," Send request = ",DISTRIBUTED_VECTOR% & & CMISS%TRANSFERS(domain_idx)%MPI_SEND_REQUEST,ERR,ERROR,*999) ENDIF @@ -8375,7 +8375,7 @@ SUBROUTINE DISTRIBUTED_VECTOR_UPDATE_START(DISTRIBUTED_VECTOR,ERR,ERROR,*) & DISTRIBUTED_VECTOR%CMISS%TRANSFERS(domain_idx)%SEND_BUFFER_SIZE,MPI_DOUBLE_PRECISION, & & DISTRIBUTED_VECTOR%DOMAIN_MAPPING%ADJACENT_DOMAINS(domain_idx)%DOMAIN_NUMBER, & & DISTRIBUTED_VECTOR%CMISS%TRANSFERS(domain_idx)%SEND_TAG_NUMBER, & - & computationEnvironment%mpiCommunicator, & + & computationEnvironment%mpiWorldCommunicator, & & DISTRIBUTED_VECTOR%CMISS%TRANSFERS(domain_idx)%MPI_SEND_REQUEST,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ISEND",MPI_IERROR,ERR,ERROR,*999) IF(DIAGNOSTICS5) THEN @@ -8387,8 +8387,8 @@ SUBROUTINE DISTRIBUTED_VECTOR_UPDATE_START(DISTRIBUTED_VECTOR,ERR,ERROR,*) & ADJACENT_DOMAINS(domain_idx)%DOMAIN_NUMBER,ERR,ERROR,*999) CALL WRITE_STRING_VALUE(DIAGNOSTIC_OUTPUT_TYPE," Send tag = ",DISTRIBUTED_VECTOR% & & CMISS%TRANSFERS(domain_idx)%SEND_TAG_NUMBER,ERR,ERROR,*999) - CALL WRITE_STRING_VALUE(DIAGNOSTIC_OUTPUT_TYPE," Send comm = ",computationEnvironment%mpiCommunicator, & - & ERR,ERROR,*999) + CALL WRITE_STRING_VALUE(DIAGNOSTIC_OUTPUT_TYPE," Send comm = ",computationEnvironment% & + & mpiWorldCommunicator,ERR,ERROR,*999) CALL WRITE_STRING_VALUE(DIAGNOSTIC_OUTPUT_TYPE," Send request = ",DISTRIBUTED_VECTOR% & & CMISS%TRANSFERS(domain_idx)%MPI_SEND_REQUEST,ERR,ERROR,*999) ENDIF @@ -8397,7 +8397,7 @@ SUBROUTINE DISTRIBUTED_VECTOR_UPDATE_START(DISTRIBUTED_VECTOR,ERR,ERROR,*) & DISTRIBUTED_VECTOR%CMISS%TRANSFERS(domain_idx)%SEND_BUFFER_SIZE,MPI_LOGICAL, & & DISTRIBUTED_VECTOR%DOMAIN_MAPPING%ADJACENT_DOMAINS(domain_idx)%DOMAIN_NUMBER, & & DISTRIBUTED_VECTOR%CMISS%TRANSFERS(domain_idx)%SEND_TAG_NUMBER, & - & computationEnvironment%mpiCommunicator, & + & computationEnvironment%mpiWorldCommunicator, & & DISTRIBUTED_VECTOR%CMISS%TRANSFERS(domain_idx)%MPI_SEND_REQUEST,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ISEND",MPI_IERROR,ERR,ERROR,*999) IF(DIAGNOSTICS5) THEN @@ -8410,7 +8410,7 @@ SUBROUTINE DISTRIBUTED_VECTOR_UPDATE_START(DISTRIBUTED_VECTOR,ERR,ERROR,*) CALL WRITE_STRING_VALUE(DIAGNOSTIC_OUTPUT_TYPE," Send tag = ",DISTRIBUTED_VECTOR% & & CMISS%TRANSFERS(domain_idx)%SEND_TAG_NUMBER,ERR,ERROR,*999) CALL WRITE_STRING_VALUE(DIAGNOSTIC_OUTPUT_TYPE," Send comm = ", & - & computationEnvironment%mpiCommunicator,ERR,ERROR,*999) + & computationEnvironment%mpiWorldCommunicator,ERR,ERROR,*999) CALL WRITE_STRING_VALUE(DIAGNOSTIC_OUTPUT_TYPE," Send request = ",DISTRIBUTED_VECTOR% & & CMISS%TRANSFERS(domain_idx)%MPI_SEND_REQUEST,ERR,ERROR,*999) ENDIF diff --git a/src/domain_mappings.f90 b/src/domain_mappings.f90 index d8759a83..8fb51b61 100755 --- a/src/domain_mappings.f90 +++ b/src/domain_mappings.f90 @@ -159,7 +159,7 @@ SUBROUTINE DOMAIN_MAPPINGS_GLOBAL_TO_LOCAL_GET(DOMAIN_MAPPING,GLOBAL_NUMBER,LOCA IF(ASSOCIATED(DOMAIN_MAPPING)) THEN IF(GLOBAL_NUMBER>=1.AND.GLOBAL_NUMBER<=DOMAIN_MAPPING%NUMBER_OF_GLOBAL) THEN IF(DOMAIN_MAPPING%GLOBAL_TO_LOCAL_MAP(GLOBAL_NUMBER)%DOMAIN_NUMBER(1)== & - & computationEnvironment%myComputationNodeNumber) THEN + & computationEnvironment%myWorldComputationNodeNumber) THEN LOCAL_NUMBER=DOMAIN_MAPPING%GLOBAL_TO_LOCAL_MAP(GLOBAL_NUMBER)%LOCAL_NUMBER(1) LOCAL_EXISTS=.TRUE. ENDIF @@ -192,7 +192,7 @@ SUBROUTINE DOMAIN_MAPPINGS_LOCAL_FROM_GLOBAL_CALCULATE(DOMAIN_MAPPING,ERR,ERROR, TYPE(VARYING_STRING), INTENT(OUT) :: ERROR !0) THEN TOTAL_NUMBER_OF_ADJACENT_DOMAINS=TOTAL_NUMBER_OF_ADJACENT_DOMAINS+1 - IF(domain_no==myComputationNodeNumber) NUMBER_OF_ADJACENT_DOMAINS=NUMBER_OF_ADJACENT_DOMAINS+1 + IF(domain_no==myWorldComputationNodeNumber) NUMBER_OF_ADJACENT_DOMAINS=NUMBER_OF_ADJACENT_DOMAINS+1 ENDIF ENDIF ENDDO !domain_no2 @@ -335,7 +335,7 @@ SUBROUTINE DOMAIN_MAPPINGS_LOCAL_FROM_GLOBAL_CALCULATE(DOMAIN_MAPPING,ERR,ERROR, DO domain_idx=1,DOMAIN_MAPPING%NUMBER_OF_ADJACENT_DOMAINS CALL DOMAIN_MAPPINGS_ADJACENT_DOMAIN_INITIALISE(DOMAIN_MAPPING%ADJACENT_DOMAINS(domain_idx),ERR,ERROR,*999) domain_no= & - & DOMAIN_MAPPING%ADJACENT_DOMAINS_LIST(DOMAIN_MAPPING%ADJACENT_DOMAINS_PTR(myComputationNodeNumber)+domain_idx-1) + & DOMAIN_MAPPING%ADJACENT_DOMAINS_LIST(DOMAIN_MAPPING%ADJACENT_DOMAINS_PTR(myWorldComputationNodeNumber)+domain_idx-1) DOMAIN_MAPPING%ADJACENT_DOMAINS(domain_idx)%DOMAIN_NUMBER=domain_no ADJACENT_DOMAIN_MAP(domain_no)=domain_idx NULLIFY(GHOST_SEND_LISTS(domain_idx)%PTR) @@ -368,7 +368,7 @@ SUBROUTINE DOMAIN_MAPPINGS_LOCAL_FROM_GLOBAL_CALCULATE(DOMAIN_MAPPING,ERR,ERROR, domain_no=DOMAIN_MAPPING%GLOBAL_TO_LOCAL_MAP(global_number)%DOMAIN_NUMBER(domain_idx) local_type=DOMAIN_MAPPING%GLOBAL_TO_LOCAL_MAP(global_number)%LOCAL_TYPE(domain_idx) IF(local_type/=DOMAIN_LOCAL_GHOST) THEN - IF(domain_no==myComputationNodeNumber) SEND_GLOBAL=.TRUE. + IF(domain_no==myWorldComputationNodeNumber) SEND_GLOBAL=.TRUE. IF(RECEIVE_FROM_DOMAIN==-1) THEN RECEIVE_FROM_DOMAIN=domain_no ELSE @@ -390,7 +390,7 @@ SUBROUTINE DOMAIN_MAPPINGS_LOCAL_FROM_GLOBAL_CALCULATE(DOMAIN_MAPPING,ERR,ERROR, domain_no=DOMAIN_MAPPING%GLOBAL_TO_LOCAL_MAP(global_number)%DOMAIN_NUMBER(domain_idx) local_number=DOMAIN_MAPPING%GLOBAL_TO_LOCAL_MAP(global_number)%LOCAL_NUMBER(domain_idx) local_type=DOMAIN_MAPPING%GLOBAL_TO_LOCAL_MAP(global_number)%LOCAL_TYPE(domain_idx) - IF(domain_no==myComputationNodeNumber) THEN + IF(domain_no==myWorldComputationNodeNumber) THEN DOMAIN_MAPPING%LOCAL_TO_GLOBAL_MAP(local_number)=global_number SELECT CASE(DOMAIN_MAPPING%GLOBAL_TO_LOCAL_MAP(global_number)%LOCAL_TYPE(domain_idx)) CASE(DOMAIN_LOCAL_INTERNAL) diff --git a/src/equations_set_routines.f90 b/src/equations_set_routines.f90 index 24702e6a..a10803a7 100644 --- a/src/equations_set_routines.f90 +++ b/src/equations_set_routines.f90 @@ -6305,7 +6305,7 @@ SUBROUTINE EQUATIONS_SET_BOUNDARY_CONDITIONS_INCREMENT(EQUATIONS_SET,BOUNDARY_CO TYPE(BOUNDARY_CONDITIONS_DIRICHLET_TYPE), POINTER :: DIRICHLET_BOUNDARY_CONDITIONS TYPE(BOUNDARY_CONDITIONS_PRESSURE_INCREMENTED_TYPE), POINTER :: PRESSURE_INCREMENTED_BOUNDARY_CONDITIONS INTEGER(INTG) :: variable_idx,variable_type,dirichlet_idx,dirichlet_dof_idx,neumann_point_dof - INTEGER(INTG) :: condition_idx, condition_global_dof, condition_local_dof, myComputationNodeNumber + INTEGER(INTG) :: condition_idx, condition_global_dof, condition_local_dof, myWorldComputationNodeNumber REAL(DP), POINTER :: FULL_LOADS(:),CURRENT_LOADS(:), PREV_LOADS(:) REAL(DP) :: FULL_LOAD, CURRENT_LOAD, NEW_LOAD, PREV_LOAD TYPE(VARYING_STRING) :: localError @@ -6320,7 +6320,7 @@ SUBROUTINE EQUATIONS_SET_BOUNDARY_CONDITIONS_INCREMENT(EQUATIONS_SET,BOUNDARY_CO NULLIFY(PREV_LOADS) NULLIFY(CURRENT_LOADS) - myComputationNodeNumber=ComputationEnvironment_NodeNumberGet(err,error) + myWorldComputationNodeNumber=ComputationEnvironment_NodeNumberGet(err,error) !Take the stored load, scale it down appropriately then apply to the unknown variables IF(ASSOCIATED(EQUATIONS_SET)) THEN @@ -6367,7 +6367,7 @@ SUBROUTINE EQUATIONS_SET_BOUNDARY_CONDITIONS_INCREMENT(EQUATIONS_SET,BOUNDARY_CO & BOUNDARY_CONDITION_MOVED_WALL_INCREMENTED) !Convert dof index to local index IF(DOMAIN_MAPPING%GLOBAL_TO_LOCAL_MAP(dirichlet_dof_idx)%DOMAIN_NUMBER(1)== & - & myComputationNodeNumber) THEN + & myWorldComputationNodeNumber) THEN dirichlet_dof_idx=DOMAIN_MAPPING%GLOBAL_TO_LOCAL_MAP(dirichlet_dof_idx)%LOCAL_NUMBER(1) IF(0=NUMBER_OF_EXNODE_FILES) EXIT ENDIF - !IF(MASTER_COMPUTATION_NUMBER/=myComputationNodeNumber) PRINT * , idx_exnode + !IF(MASTER_COMPUTATION_NUMBER/=myWorldComputationNodeNumber) PRINT * , idx_exnode !goto the start of mesh part - IF(MASTER_COMPUTATION_NUMBER==myComputationNodeNumber) THEN + IF(MASTER_COMPUTATION_NUMBER==myWorldComputationNodeNumber) THEN IF(FILE_END) THEN FILE_ID=1030+idx_exnode @@ -1290,10 +1290,10 @@ SUBROUTINE FIELD_IO_CREATE_FIELDS(NAME, REGION, DECOMPOSITION, FIELD_VALUES_SET_ !broadcasting total_number_of_devs CALL MPI_BCAST(total_number_of_devs,1,MPI_INTEGER,MASTER_COMPUTATION_NUMBER, & - & computationEnvironment%mpiCommunicator,MPI_IERROR) + & computationEnvironment%mpiWorldCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_BCAST",MPI_IERROR,ERR,ERROR,*999) - IF(MASTER_COMPUTATION_NUMBER/=myComputationNodeNumber) THEN + IF(MASTER_COMPUTATION_NUMBER/=myWorldComputationNodeNumber) THEN CALL REALLOCATE( LIST_DEV, total_number_of_devs, & & "Could not allocate memory for nodal derivative index in non-master node", ERR, ERROR, *999 ) ENDIF @@ -1303,15 +1303,15 @@ SUBROUTINE FIELD_IO_CREATE_FIELDS(NAME, REGION, DECOMPOSITION, FIELD_VALUES_SET_ !broadcasting total_number_of_comps CALL MPI_BCAST(LIST_DEV_POS,total_number_of_comps,MPI_INTEGER,MASTER_COMPUTATION_NUMBER, & - & computationEnvironment%mpiCommunicator,MPI_IERROR) + & computationEnvironment%mpiWorldCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_BCAST",MPI_IERROR,ERR,ERROR,*999) !broadcasting total_number_of_devs CALL MPI_BCAST(LIST_DEV,total_number_of_devs,MPI_INTEGER,MASTER_COMPUTATION_NUMBER, & - & computationEnvironment%mpiCommunicator,MPI_IERROR) + & computationEnvironment%mpiWorldCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_BCAST",MPI_IERROR,ERR,ERROR,*999) !goto the start of mesh part - IF(MASTER_COMPUTATION_NUMBER==myComputationNodeNumber) THEN + IF(MASTER_COMPUTATION_NUMBER==myWorldComputationNodeNumber) THEN !have not touched the end IF((.NOT.FILE_END).AND.SECTION_START.AND.NODE_SECTION) THEN @@ -1363,17 +1363,17 @@ SUBROUTINE FIELD_IO_CREATE_FIELDS(NAME, REGION, DECOMPOSITION, FIELD_VALUES_SET_ IF(VERIFY(CMISS_KEYWORD_NODE, LINE)/=0) NODE_SECTION=.FALSE. ENDIF ENDIF !FILE_END==.FALSE..AND.SECTION_START=.TRUE..AND.NODE_SECTION=.TRUE. - ENDIF !(MASTER_COMPUTATION_NUMBER==myComputationNodeNumber) + ENDIF !(MASTER_COMPUTATION_NUMBER==myWorldComputationNodeNumber) !broadcasting total_number_of_devs CALL MPI_BCAST(LIST_DEV_VALUE,total_number_of_devs,MPI_REAL8,MASTER_COMPUTATION_NUMBER, & - & computationEnvironment%mpiCommunicator,MPI_IERROR) + & computationEnvironment%mpiWorldCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_BCAST",MPI_IERROR,ERR,ERROR,*999) CALL MPI_BCAST(NODAL_USER_NUMBER,1,MPI_INTEGER,MASTER_COMPUTATION_NUMBER, & - & computationEnvironment%mpiCommunicator,MPI_IERROR) + & computationEnvironment%mpiWorldCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_BCAST",MPI_IERROR,ERR,ERROR,*999) - !IF(MASTER_COMPUTATION_NUMBER/=myComputationNodeNumber) THEN + !IF(MASTER_COMPUTATION_NUMBER/=myWorldComputationNodeNumber) THEN print *, "user number:" print *, NODAL_USER_NUMBER print *, LIST_DEV_VALUE @@ -1509,7 +1509,7 @@ SUBROUTINE FIELD_IO_FIELDS_IMPORT(NAME, METHOD, REGION, MESH, MESH_USER_NUMBER, INTEGER(INTG), INTENT(OUT) :: ERR !Read the global mesh into one computation node first and then broadcasting to others nodes SUBROUTINE FIELD_IO_IMPORT_GLOBAL_MESH(NAME, REGION, MESH, MESH_USER_NUMBER, MASTER_COMPUTATION_NUMBER, & - & myComputationNodeNumber, &!USER_NODAL_NUMBER_MAP_GLOBAL_NODAL_NUMBER, + & myWorldComputationNodeNumber, &!USER_NODAL_NUMBER_MAP_GLOBAL_NODAL_NUMBER, &MESH_COMPONENTS_OF_FIELD_COMPONENTS, & & COMPONENTS_IN_FIELDS, NUMBER_OF_FIELDS, NUMBER_OF_EXNODE_FILES, ERR, ERROR, *) !Argument variables @@ -1619,7 +1619,7 @@ SUBROUTINE FIELD_IO_IMPORT_GLOBAL_MESH(NAME, REGION, MESH, MESH_USER_NUMBER, MAS TYPE(REGION_TYPE), POINTER :: REGION !Write the header of a group elements using FORTRAN SUBROUTINE FieldIO_ExportElementalGroupHeaderFortran( global_number, MAX_NODE_COMP_INDEX,NUM_OF_SCALING_FACTOR_SETS, & - & LIST_COMP_SCALE, myComputationNodeNumber, elementalInfoSet, sessionHandle, ERR,ERROR, *) + & LIST_COMP_SCALE, myWorldComputationNodeNumber, elementalInfoSet, sessionHandle, ERR,ERROR, *) !Argument variables INTEGER(INTG), INTENT(IN) :: global_number !elementalInfoSet%COMPONENTS(comp_idx)%PTR%DOMAIN !get the domain index for this variable component according to my own computional node number local_number = FindMyLocalDomainNumber( componentDomain%MAPPINGS%ELEMENTS%GLOBAL_TO_LOCAL_MAP( global_number ),& - & myComputationNodeNumber ) + & myWorldComputationNodeNumber ) GROUP_LOCAL_NUMBER(comp_idx)=local_number !use local domain information find the out the maximum number of derivatives DOMAIN_ELEMENTS=>componentDomain%TOPOLOGY%ELEMENTS @@ -3444,13 +3444,13 @@ END SUBROUTINE FieldIO_ExportElementalGroupHeaderFortran ! SUBROUTINE FIELD_IO_EXPORT_ELEMENT_SCALE_FACTORS( sessionHandle, components, componentScales, globalNumber, & - & myComputationNodeNumber, ERR, ERROR, * ) + & myWorldComputationNodeNumber, ERR, ERROR, * ) !Argument variables INTEGER(INTG) :: sessionHandle TYPE(FIELD_IO_COMPONENT_INFO_SET), INTENT(INOUT) :: components ! component%DOMAIN%TOPOLOGY%ELEMENTS domainNodes => component%DOMAIN%TOPOLOGY%NODES @@ -3558,13 +3558,13 @@ END SUBROUTINE FIELD_IO_EXPORT_ELEMENT_SCALE_FACTORS ! !>Write all the elemental information from LOCAL_PROCESS_NODAL_INFO_SET to exelem files - SUBROUTINE FIELD_IO_EXPORT_ELEMENTS_INTO_LOCAL_FILE(ELEMENTAL_INFO_SET, NAME, myComputationNodeNumber, & + SUBROUTINE FIELD_IO_EXPORT_ELEMENTS_INTO_LOCAL_FILE(ELEMENTAL_INFO_SET, NAME, myWorldComputationNodeNumber, & & ERR, ERROR, *) - !the reason that myComputationNodeNumber is used in the argument is for future extension + !the reason that myWorldComputationNodeNumber is used in the argument is for future extension !Argument variables TYPE(FIELD_IO_INFO_SET), INTENT(INOUT) :: ELEMENTAL_INFO_SET !component%DOMAIN%TOPOLOGY%ELEMENTS !get the domain index for this variable component according to my own computional node number local_number = FindMyLocalDomainNumber( DOMAIN_MAPPING_ELEMENTS%GLOBAL_TO_LOCAL_MAP( global_number ), & - & myComputationNodeNumber ) + & myWorldComputationNodeNumber ) !use local domain information find the out the maximum number of derivatives BASIS => DOMAIN_ELEMENTS%ELEMENTS( local_number )%BASIS @@ -3861,7 +3861,7 @@ SUBROUTINE FIELD_IO_EXPORT_ELEMENTS_INTO_LOCAL_FILE(ELEMENTAL_INFO_SET, NAME, my ENDIF CALL FIELD_IO_EXPORT_ELEMENT_SCALE_FACTORS( sessionHandle, components, & - & LIST_COMP_SCALE, global_number, myComputationNodeNumber, ERR, ERROR, *999 ) + & LIST_COMP_SCALE, global_number, myWorldComputationNodeNumber, ERR, ERROR, *999 ) ENDDO !elem_idx @@ -3887,10 +3887,10 @@ END SUBROUTINE FIELD_IO_EXPORT_ELEMENTS_INTO_LOCAL_FILE ! !>Sort the Elemental_info_set according to the type of field variable components - SUBROUTINE FIELD_IO_ELEMENTAL_INFO_SET_SORT(ELEMENTAL_INFO_SET, myComputationNodeNumber, ERR,ERROR,*) + SUBROUTINE FIELD_IO_ELEMENTAL_INFO_SET_SORT(ELEMENTAL_INFO_SET, myWorldComputationNodeNumber, ERR,ERROR,*) !Argument variables TYPE(FIELD_IO_INFO_SET), INTENT(INOUT) :: ELEMENTAL_INFO_SET !& & ELEMENTAL_INFO_SET%COMPONENT_INFO_SET(nn1)%PTR%COMPONENTS(component_idx)%PTR% & & DOMAIN%TOPOLOGY%ELEMENTS @@ -3991,7 +3991,7 @@ SUBROUTINE FIELD_IO_ELEMENTAL_INFO_SET_SORT(ELEMENTAL_INFO_SET, myComputationNod !get the domain index for this variable component according to my own computional node number !local number of nn2'th node in the damain assoicated with component(component_idx) local_number2 = FindMyLocalDomainNumber( DOMAIN_MAPPING_ELEMENTS%GLOBAL_TO_LOCAL_MAP( global_number2 ), & - & myComputationNodeNumber ) + & myWorldComputationNodeNumber ) DOMAIN_ELEMENTS2=>& & ELEMENTAL_INFO_SET%COMPONENT_INFO_SET(nn2)%PTR%COMPONENTS(component_idx)%PTR% & & DOMAIN%TOPOLOGY%ELEMENTS @@ -4281,7 +4281,7 @@ END SUBROUTINE FieldIO_ElementalInfoSetAttachLocalProcess ! TYPE(VARYING_STRING), INTENT(OUT) :: ERROR !Sort nodal information according to the type of field variable component - SUBROUTINE FIELD_IO_NODAL_INFO_SET_SORT(NODAL_INFO_SET, myComputationNodeNumber, ERR,ERROR,*) + SUBROUTINE FIELD_IO_NODAL_INFO_SET_SORT(NODAL_INFO_SET, myWorldComputationNodeNumber, ERR,ERROR,*) !Argument variables TYPE(FIELD_IO_INFO_SET), INTENT(INOUT) :: NODAL_INFO_SET !Write the header of a group nodes using FORTRAIN !SUBROUTINE FIELD_IO_IMPORT_NODAL_GROUP_HEADER_FORTRAN(NODAL_INFO_SET, LOCAL_NODAL_NUMBER, MAX_NUM_OF_NODAL_DERIVATIVES, & - !&myComputationNodeNumber, FILE_ID, ERR,ERROR, *) + !&myWorldComputationNodeNumber, FILE_ID, ERR,ERROR, *) ! !Argument variables ! TYPE(FIELD_IO_INFO_SET), INTENT(INOUT) :: NODAL_INFO_SET !NODAL_INFO_SET%COMPONENT_INFO_SET(LOCAL_NODAL_NUMBER)%& ! &COMPONENTS(comp_idx)%PTR%DOMAIN%MAPPINGS%NODES ! !get the domain index for this variable component according to my own computional node number - ! local_number = FindMyLocalDomainNumber( DOMAIN_MAPPING_NODES%GLOBAL_TO_LOCAL_MAP(global_number), myComputationNodeNumber ) + ! local_number = FindMyLocalDomainNumber( DOMAIN_MAPPING_NODES%GLOBAL_TO_LOCAL_MAP(global_number), myWorldComputationNodeNumber ) ! !use local domain information find the out the maximum number of derivatives ! DOMAIN_NODES=>NODAL_INFO_SET%COMPONENT_INFO_SET(LOCAL_NODAL_NUMBER)%COMPONENTS(comp_idx)%PTR%DOMAIN%TOPOLOGY%NODES ! MAX_NUM_OF_NODAL_DERIVATIVES=MAX(DOMAIN_NODES%NODES(local_number)%NUMBER_OF_DERIVATIVES,MAX_NUM_OF_NODAL_DERIVATIVES) @@ -5091,7 +5091,7 @@ END FUNCTION FIELD_IO_GET_COMPONENT_INFO_LABEL ! DOMAIN_MAPPING_NODES=>NODAL_INFO_SET%COMPONENT_INFO_SET(LOCAL_NODAL_NUMBER)%COMPONENTS(comp_idx)%PTR%& ! &DOMAIN%MAPPINGS%NODES ! !get the domain index for this variable component according to my own computional node number - ! local_number = FindMyLocalDomainNumber( DOMAIN_MAPPING_NODES%GLOBAL_TO_LOCAL_MAP(global_number), myComputationNodeNumber ) + ! local_number = FindMyLocalDomainNumber( DOMAIN_MAPPING_NODES%GLOBAL_TO_LOCAL_MAP(global_number), myWorldComputationNodeNumber ) ! !use local domain information find the out the maximum number of derivatives ! DOMAIN_NODES=>NODAL_INFO_SET%COMPONENT_INFO_SET(LOCAL_NODAL_NUMBER)%COMPONENTS(comp_idx)%PTR%DOMAIN%TOPOLOGY%NODES ! !get the nodal partial derivatives @@ -5137,12 +5137,12 @@ END FUNCTION FIELD_IO_GET_COMPONENT_INFO_LABEL !>Write the header of a group nodes using FORTRAIN SUBROUTINE FIELD_IO_EXPORT_NODAL_GROUP_HEADER_FORTRAN(fieldInfoSet, global_number, MAX_NUM_OF_NODAL_DERIVATIVES, & - &myComputationNodeNumber, sessionHandle, paddingInfo, ERR,ERROR, *) + &myWorldComputationNodeNumber, sessionHandle, paddingInfo, ERR,ERROR, *) !Argument variables TYPE(FIELD_IO_COMPONENT_INFO_SET), INTENT(IN) :: fieldInfoSet INTEGER(INTG), INTENT(IN) :: global_number INTEGER(INTG), INTENT(INOUT) :: MAX_NUM_OF_NODAL_DERIVATIVES !Write all the nodal information from NODAL_INFO_SET to local exnode files - SUBROUTINE FIELD_IO_EXPORT_NODES_INTO_LOCAL_FILE(NODAL_INFO_SET, NAME, myComputationNodeNumber,ERR, ERROR, *) - !the reason that myComputationNodeNumber is used in the argument is for future extension + SUBROUTINE FIELD_IO_EXPORT_NODES_INTO_LOCAL_FILE(NODAL_INFO_SET, NAME, myWorldComputationNodeNumber,ERR, ERROR, *) + !the reason that myWorldComputationNodeNumber is used in the argument is for future extension !Argument variables TYPE(FIELD_IO_INFO_SET), INTENT(INOUT):: NODAL_INFO_SET !Collect nodal information from each MPI process - SUBROUTINE FieldIO_NodelInfoSetAttachLocalProcess(NODAL_INFO_SET, FIELDS, myComputationNodeNumber, ERR,ERROR,*) + SUBROUTINE FieldIO_NodelInfoSetAttachLocalProcess(NODAL_INFO_SET, FIELDS, myWorldComputationNodeNumber, ERR,ERROR,*) !Argument variables TYPE(FIELD_IO_INFO_SET), INTENT(INOUT):: NODAL_INFO_SET !FIELD%VARIABLES(variable_idx)%COMPONENTS(component_idx) - variable_local_ny=1+VARIABLE_LOCAL_DOFS_OFFSETS(myComputationNodeNumber) + variable_local_ny=1+VARIABLE_LOCAL_DOFS_OFFSETS(myWorldComputationNodeNumber) !Allocate and set up global to local domain map for variable mapping IF(ASSOCIATED(FIELD_VARIABLE_DOFS_MAPPING)) THEN variable_global_ny=1+VARIABLE_GLOBAL_DOFS_OFFSET @@ -10828,7 +10828,7 @@ SUBROUTINE FIELD_MAPPINGS_CALCULATE(FIELD,ERR,ERROR,*) DO component_idx=1,FIELD%VARIABLES(variable_idx)%NUMBER_OF_COMPONENTS FIELD_COMPONENT=>FIELD%VARIABLES(variable_idx)%COMPONENTS(component_idx) element_ny=element_ny+1 - variable_local_ny=element_ny+VARIABLE_LOCAL_DOFS_OFFSETS(myComputationNodeNumber) + variable_local_ny=element_ny+VARIABLE_LOCAL_DOFS_OFFSETS(myWorldComputationNodeNumber) element_nyy=element_nyy+1 !Setup dof to parameter map FIELD%VARIABLES(variable_idx)%DOF_TO_PARAM_MAP%DOF_TYPE(1,variable_local_ny)=FIELD_ELEMENT_DOF_TYPE @@ -10935,7 +10935,7 @@ SUBROUTINE FIELD_MAPPINGS_CALCULATE(FIELD,ERR,ERROR,*) FIELD_COMPONENT=>FIELD%VARIABLES(variable_idx)%COMPONENTS(component_idx) DOMAIN=>FIELD_COMPONENT%DOMAIN node_ny=node_ny+1 - variable_local_ny=node_ny+VARIABLE_LOCAL_DOFS_OFFSETS(myComputationNodeNumber) + variable_local_ny=node_ny+VARIABLE_LOCAL_DOFS_OFFSETS(myWorldComputationNodeNumber) node_nyy=node_nyy+1 version_idx=DOMAIN%TOPOLOGY%DOFS%DOF_INDEX(1,ny) derivative_idx=DOMAIN%TOPOLOGY%DOFS%DOF_INDEX(2,ny) @@ -11036,7 +11036,7 @@ SUBROUTINE FIELD_MAPPINGS_CALCULATE(FIELD,ERR,ERROR,*) FIELD_COMPONENT=>FIELD%VARIABLES(variable_idx)%COMPONENTS(component_idx) DOMAIN=>FIELD_COMPONENT%DOMAIN element_ny=element_ny+1 - variable_local_ny=element_ny+VARIABLE_LOCAL_DOFS_OFFSETS(myComputationNodeNumber) + variable_local_ny=element_ny+VARIABLE_LOCAL_DOFS_OFFSETS(myWorldComputationNodeNumber) node_nyy=node_nyy+1 !Setup dof to parameter map FIELD%VARIABLES(variable_idx)%DOF_TO_PARAM_MAP%DOF_TYPE(1,variable_local_ny)=FIELD_GAUSS_POINT_DOF_TYPE diff --git a/src/fieldml_input_routines.f90 b/src/fieldml_input_routines.f90 index 0322f565..a68b76e2 100755 --- a/src/fieldml_input_routines.f90 +++ b/src/fieldml_input_routines.f90 @@ -1261,7 +1261,7 @@ SUBROUTINE FieldmlInput_FieldNodalParametersUpdate( FIELDML_INFO, EVALUATOR_NAME INTEGER(INTG), TARGET :: OFFSETS(2), SIZES(2) REAL(C_DOUBLE), ALLOCATABLE, TARGET :: BUFFER(:) INTEGER(INTG) :: READER - INTEGER(INTG) :: myComputationNodeNumber,nodeDomain,meshComponentNumber + INTEGER(INTG) :: myWorldComputationNodeNumber,nodeDomain,meshComponentNumber ENTERS( "FieldmlInput_FieldNodalParametersUpdate", ERR, ERROR, *999 ) @@ -1312,10 +1312,10 @@ SUBROUTINE FieldmlInput_FieldNodalParametersUpdate( FIELDML_INFO, EVALUATOR_NAME !Default to version 1 of each node derivative (value hardcoded in loop) VERSION_NUMBER = 1 - myComputationNodeNumber = ComputationEnvironment_NodeNumberGet(err,error) + myWorldComputationNodeNumber = ComputationEnvironment_NodeNumberGet(err,error) CALL DECOMPOSITION_MESH_COMPONENT_NUMBER_GET(FIELD%DECOMPOSITION,meshComponentNumber,err,error,*999) CALL DECOMPOSITION_NODE_DOMAIN_GET(FIELD%DECOMPOSITION,NODE_NUMBER,meshComponentNumber,nodeDomain,err,error,*999) - IF(nodeDomain==myComputationNodeNumber) THEN + IF(nodeDomain==myWorldComputationNodeNumber) THEN CALL FIELD_PARAMETER_SET_UPDATE_NODE( FIELD, VARIABLE_TYPE, SET_TYPE, VERSION_NUMBER, & & NO_GLOBAL_DERIV, NODE_NUMBER, COMPONENT_NUMBER, BUFFER( COMPONENT_NUMBER ), ERR, ERROR, *999 ) ENDIF diff --git a/src/fieldml_output_routines.f90 b/src/fieldml_output_routines.f90 index 68cca8a9..a7d0b809 100755 --- a/src/fieldml_output_routines.f90 +++ b/src/fieldml_output_routines.f90 @@ -1532,7 +1532,7 @@ SUBROUTINE FIELDML_OUTPUT_ADD_FIELD_NODE_DOFS( FIELDML_INFO, BASE_NAME, DOF_FORM LOGICAL, ALLOCATABLE :: IS_NODE_BASED(:) TYPE(C_PTR) :: SIZE_POINTER TYPE(VARYING_STRING) :: ARRAY_LOCATION - INTEGER(INTG) :: myComputationNodeNumber,nodeDomain,meshComponentNumber + INTEGER(INTG) :: myWorldComputationNodeNumber,nodeDomain,meshComponentNumber ENTERS( "FIELDML_OUTPUT_ADD_FIELD_NODE_DOFS", ERR, ERROR, *999 ) @@ -1629,10 +1629,10 @@ SUBROUTINE FIELDML_OUTPUT_ADD_FIELD_NODE_DOFS( FIELDML_INFO, BASE_NAME, DOF_FORM !Default to version 1 of each node derivative (value hardcoded in loop) VERSION_NUMBER = 1 - myComputationNodeNumber = ComputationEnvironment_NodeNumberGet(err,error) + myWorldComputationNodeNumber = ComputationEnvironment_NodeNumberGet(err,error) CALL DECOMPOSITION_MESH_COMPONENT_NUMBER_GET(FIELD%DECOMPOSITION,meshComponentNumber,err,error,*999) CALL DECOMPOSITION_NODE_DOMAIN_GET(FIELD%DECOMPOSITION,I,meshComponentNumber,nodeDomain,err,error,*999) - IF(nodeDomain==myComputationNodeNumber) THEN + IF(nodeDomain==myWorldComputationNodeNumber) THEN CALL FIELD_PARAMETER_SET_GET_NODE( FIELD, VARIABLE_TYPE, SET_TYPE, VERSION_NUMBER, & & NO_GLOBAL_DERIV, I, FIELD_COMPONENT_NUMBERS(J), DVALUE, ERR, ERROR, *999 ) ENDIF diff --git a/src/finite_elasticity_routines.f90 b/src/finite_elasticity_routines.f90 index 81036fda..586b1cec 100644 --- a/src/finite_elasticity_routines.f90 +++ b/src/finite_elasticity_routines.f90 @@ -166,7 +166,7 @@ SUBROUTINE FiniteElasticity_BoundaryConditionsAnalyticCalculate(EQUATIONS_SET,BO !BC stuff INTEGER(INTG),ALLOCATABLE :: INNER_SURFACE_NODES(:),OUTER_SURFACE_NODES(:),TOP_SURFACE_NODES(:),BOTTOM_SURFACE_NODES(:) INTEGER(INTG) :: INNER_NORMAL_XI,OUTER_NORMAL_XI,TOP_NORMAL_XI,BOTTOM_NORMAL_XI,MESH_COMPONENT - INTEGER(INTG) :: myComputationNodeNumber, DOMAIN_NUMBER, MPI_IERROR + INTEGER(INTG) :: myWorldComputationNodeNumber, DOMAIN_NUMBER, MPI_IERROR REAL(DP) :: PIN,POUT,LAMBDA,DEFORMED_Z LOGICAL :: X_FIXED,Y_FIXED,NODE_EXISTS, X_OKAY,Y_OKAY TYPE(VARYING_STRING) :: LOCAL_ERROR @@ -175,7 +175,7 @@ SUBROUTINE FiniteElasticity_BoundaryConditionsAnalyticCalculate(EQUATIONS_SET,BO ENTERS("FiniteElasticity_BoundaryConditionsAnalyticCalculate",err,error,*999) - myComputationNodeNumber=ComputationEnvironment_NodeNumberGet(err,error) + myWorldComputationNodeNumber=ComputationEnvironment_NodeNumberGet(err,error) IF(ASSOCIATED(EQUATIONS_SET)) THEN IF(ASSOCIATED(EQUATIONS_SET%ANALYTIC)) THEN @@ -215,7 +215,7 @@ SUBROUTINE FiniteElasticity_BoundaryConditionsAnalyticCalculate(EQUATIONS_SET,BO user_node=INNER_SURFACE_NODES(node_idx) !Need to test if this node is in current decomposition CALL DECOMPOSITION_NODE_DOMAIN_GET(DECOMPOSITION,user_node,1,DOMAIN_NUMBER,err,error,*999) - IF(DOMAIN_NUMBER==myComputationNodeNumber) THEN + IF(DOMAIN_NUMBER==myWorldComputationNodeNumber) THEN !Default to version 1 of each node derivative CALL BOUNDARY_CONDITIONS_SET_NODE(BOUNDARY_CONDITIONS,DEPENDENT_FIELD,FIELD_DELUDELN_VARIABLE_TYPE,1,1, & & user_node,ABS(INNER_NORMAL_XI),BOUNDARY_CONDITION_PRESSURE_INCREMENTED,PIN,err,error,*999) @@ -227,7 +227,7 @@ SUBROUTINE FiniteElasticity_BoundaryConditionsAnalyticCalculate(EQUATIONS_SET,BO user_node=OUTER_SURFACE_NODES(node_idx) !Need to test if this node is in current decomposition CALL DECOMPOSITION_NODE_DOMAIN_GET(DECOMPOSITION,user_node,1,DOMAIN_NUMBER,err,error,*999) - IF(DOMAIN_NUMBER==myComputationNodeNumber) THEN + IF(DOMAIN_NUMBER==myWorldComputationNodeNumber) THEN !Default to version 1 of each node derivative CALL BOUNDARY_CONDITIONS_SET_NODE(BOUNDARY_CONDITIONS,DEPENDENT_FIELD,FIELD_DELUDELN_VARIABLE_TYPE,1,1, & & user_node,ABS(OUTER_NORMAL_XI),BOUNDARY_CONDITION_PRESSURE_INCREMENTED,POUT,err,error,*999) @@ -239,7 +239,7 @@ SUBROUTINE FiniteElasticity_BoundaryConditionsAnalyticCalculate(EQUATIONS_SET,BO user_node=TOP_SURFACE_NODES(node_idx) !Need to test if this node is in current decomposition CALL DECOMPOSITION_NODE_DOMAIN_GET(DECOMPOSITION,user_node,1,DOMAIN_NUMBER,err,error,*999) - IF(DOMAIN_NUMBER==myComputationNodeNumber) THEN + IF(DOMAIN_NUMBER==myWorldComputationNodeNumber) THEN CALL MeshTopology_NodeCheckExists(MESH,1,user_node,NODE_EXISTS,global_node,err,error,*999) IF(.NOT.NODE_EXISTS) CYCLE CALL DOMAIN_MAPPINGS_GLOBAL_TO_LOCAL_GET(NODES_MAPPING,global_node,NODE_EXISTS,local_node,err,error,*999) @@ -257,7 +257,7 @@ SUBROUTINE FiniteElasticity_BoundaryConditionsAnalyticCalculate(EQUATIONS_SET,BO user_node=BOTTOM_SURFACE_NODES(node_idx) !Need to check this node exists in the current domain CALL DECOMPOSITION_NODE_DOMAIN_GET(DECOMPOSITION,user_node,1,DOMAIN_NUMBER,err,error,*999) - IF(DOMAIN_NUMBER==myComputationNodeNumber) THEN + IF(DOMAIN_NUMBER==myWorldComputationNodeNumber) THEN !Default to version 1 of each node derivative CALL BOUNDARY_CONDITIONS_SET_NODE(BOUNDARY_CONDITIONS,DEPENDENT_FIELD,FIELD_U_VARIABLE_TYPE,1,1, & & user_node,ABS(BOTTOM_NORMAL_XI),BOUNDARY_CONDITION_FIXED,0.0_DP,err,error,*999) @@ -270,7 +270,7 @@ SUBROUTINE FiniteElasticity_BoundaryConditionsAnalyticCalculate(EQUATIONS_SET,BO DO node_idx=1,SIZE(BOTTOM_SURFACE_NODES,1) user_node=BOTTOM_SURFACE_NODES(node_idx) CALL DECOMPOSITION_NODE_DOMAIN_GET(DECOMPOSITION,user_node,1,DOMAIN_NUMBER,err,error,*999) - IF(DOMAIN_NUMBER==myComputationNodeNumber) THEN + IF(DOMAIN_NUMBER==myWorldComputationNodeNumber) THEN CALL MeshTopology_NodeCheckExists(MESH,1,user_node,NODE_EXISTS,global_node,err,error,*999) IF(.NOT.NODE_EXISTS) CYCLE CALL DOMAIN_MAPPINGS_GLOBAL_TO_LOCAL_GET(NODES_MAPPING,global_node,NODE_EXISTS,local_node,err,error,*999) @@ -303,9 +303,9 @@ SUBROUTINE FiniteElasticity_BoundaryConditionsAnalyticCalculate(EQUATIONS_SET,BO ENDIF ENDDO !Check it went well - CALL MPI_REDUCE(X_FIXED,X_OKAY,1,MPI_LOGICAL,MPI_LOR,0,computationEnvironment%mpiCommunicator,MPI_IERROR) - CALL MPI_REDUCE(Y_FIXED,Y_OKAY,1,MPI_LOGICAL,MPI_LOR,0,computationEnvironment%mpiCommunicator,MPI_IERROR) - IF(myComputationNodeNumber==0) THEN + CALL MPI_REDUCE(X_FIXED,X_OKAY,1,MPI_LOGICAL,MPI_LOR,0,computationEnvironment%mpiWorldCommunicator,MPI_IERROR) + CALL MPI_REDUCE(Y_FIXED,Y_OKAY,1,MPI_LOGICAL,MPI_LOR,0,computationEnvironment%mpiWorldCommunicator,MPI_IERROR) + IF(myWorldComputationNodeNumber==0) THEN IF(.NOT.(X_OKAY.AND.Y_OKAY)) THEN CALL FlagError("Could not fix nodes to prevent rigid body motion",err,error,*999) ENDIF @@ -422,7 +422,7 @@ SUBROUTINE FiniteElasticity_BoundaryConditionsAnalyticCalculate(EQUATIONS_SET,BO IF(NODE_EXISTS) THEN CALL DECOMPOSITION_NODE_DOMAIN_GET(DECOMPOSITION,user_node, & & DOMAIN_PRESSURE%MESH_COMPONENT_NUMBER,DOMAIN_NUMBER,err,error,*999) - IF(DOMAIN_NUMBER==myComputationNodeNumber) THEN + IF(DOMAIN_NUMBER==myWorldComputationNodeNumber) THEN !\todo: test the domain node mappings pointer properly local_node=DOMAIN_PRESSURE%mappings%nodes%global_to_local_map(global_node)%local_number(1) !Default to version 1 of each node derivative diff --git a/src/mesh_routines.f90 b/src/mesh_routines.f90 index 4c950cc5..baabd2aa 100644 --- a/src/mesh_routines.f90 +++ b/src/mesh_routines.f90 @@ -722,13 +722,13 @@ SUBROUTINE DECOMPOSITION_ELEMENT_DOMAIN_CALCULATE(DECOMPOSITION,ERR,ERROR,*) CALL PARMETIS_PARTMESHKWAY(ELEMENT_DISTANCE,ELEMENT_PTR,ELEMENT_INDICIES,ELEMENT_WEIGHT,WEIGHT_FLAG,NUMBER_FLAG, & & NUMBER_OF_CONSTRAINTS,NUMBER_OF_COMMON_NODES,DECOMPOSITION%NUMBER_OF_DOMAINS,TPWGTS,UBVEC,PARMETIS_OPTIONS, & & DECOMPOSITION%NUMBER_OF_EDGES_CUT,DECOMPOSITION%ELEMENT_DOMAIN(DISPLACEMENTS(my_computation_node_number)+1:), & - & computationEnvironment%mpiCommunicator,ERR,ERROR,*999) + & computationEnvironment%mpiWorldCommunicator,ERR,ERROR,*999) !Transfer all the element domain information to the other computation nodes so that each rank has all the info IF(number_computation_nodes>1) THEN !This should work on a single processor but doesn't for mpich2 under windows. Maybe a bug? Avoid for now. CALL MPI_ALLGATHERV(MPI_IN_PLACE,MAX_NUMBER_ELEMENTS_PER_NODE,MPI_INTEGER,DECOMPOSITION%ELEMENT_DOMAIN, & - & RECEIVE_COUNTS,DISPLACEMENTS,MPI_INTEGER,computationEnvironment%mpiCommunicator,MPI_IERROR) + & RECEIVE_COUNTS,DISPLACEMENTS,MPI_INTEGER,computationEnvironment%mpiWorldCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ALLGATHERV",MPI_IERROR,ERR,ERROR,*999) ENDIF @@ -1163,7 +1163,7 @@ SUBROUTINE DECOMPOSITION_NUMBER_OF_DOMAINS_SET(DECOMPOSITION,NUMBER_OF_DOMAINS,E INTEGER(INTG), INTENT(OUT) :: ERR !DOMAIN%MESH component_idx=DOMAIN%MESH_COMPONENT_NUMBER - myComputationNodeNumber=ComputationEnvironment_NodeNumberGet(ERR,ERROR) + myWorldComputationNodeNumber=ComputationEnvironment_NodeNumberGet(ERR,ERROR) IF(ERR/=0) GOTO 999 !Calculate the local and global numbers and set up the mappings @@ -4409,7 +4409,7 @@ SUBROUTINE DOMAIN_MAPPINGS_NODES_DOFS_CALCULATE(DOMAIN,ERR,ERROR,*) !Local Variables INTEGER(INTG) :: DUMMY_ERR,no_adjacent_element,no_computation_node,no_ghost_node,adjacent_element,ghost_node, & & NUMBER_OF_NODES_PER_DOMAIN,domain_idx,domain_idx2,domain_no,node_idx,derivative_idx,version_idx,ny,NUMBER_OF_DOMAINS, & - & MAX_NUMBER_DOMAINS,NUMBER_OF_GHOST_NODES,myComputationNodeNumber,numberOfComputationNodes,component_idx + & MAX_NUMBER_DOMAINS,NUMBER_OF_GHOST_NODES,myWorldComputationNodeNumber,numberOfWorldComputationNodes,component_idx INTEGER(INTG), ALLOCATABLE :: LOCAL_NODE_NUMBERS(:),LOCAL_DOF_NUMBERS(:),NODE_COUNT(:),NUMBER_INTERNAL_NODES(:), & & NUMBER_BOUNDARY_NODES(:) INTEGER(INTG), ALLOCATABLE :: DOMAINS(:),ALL_DOMAINS(:),GHOST_NODES(:) @@ -4441,9 +4441,9 @@ SUBROUTINE DOMAIN_MAPPINGS_NODES_DOFS_CALCULATE(DOMAIN,ERR,ERROR,*) component_idx=DOMAIN%MESH_COMPONENT_NUMBER MESH_TOPOLOGY=>MESH%TOPOLOGY(component_idx)%PTR - numberOfComputationNodes=ComputationEnvironment_NumberOfNodesGet(ERR,ERROR) + numberOfWorldComputationNodes=ComputationEnvironment_NumberOfNodesGet(ERR,ERROR) IF(ERR/=0) GOTO 999 - myComputationNodeNumber=ComputationEnvironment_NodeNumberGet(ERR,ERROR) + myWorldComputationNodeNumber=ComputationEnvironment_NodeNumberGet(ERR,ERROR) IF(ERR/=0) GOTO 999 !Calculate the local and global numbers and set up the mappings @@ -4677,23 +4677,23 @@ SUBROUTINE DOMAIN_MAPPINGS_NODES_DOFS_CALCULATE(DOMAIN,ERR,ERROR,*) ENDDO !domain_idx !Check decomposition and check that each domain has a node in it. - ALLOCATE(NODE_COUNT(0:numberOfComputationNodes-1),STAT=ERR) + ALLOCATE(NODE_COUNT(0:numberOfWorldComputationNodes-1),STAT=ERR) IF(ERR/=0) CALL FlagError("Could not allocate node count.",ERR,ERROR,*999) NODE_COUNT=0 DO node_idx=1,MESH_TOPOLOGY%NODES%numberOfNodes no_computation_node=DOMAIN%NODE_DOMAIN(node_idx) - IF(no_computation_node>=0.AND.no_computation_node=0.AND.no_computation_nodeStart the creation of a computation work group - SUBROUTINE cmfe_Computation_WorkGroupCreateStart(worldWorkGroup,numberComputationNodes,err) + !>Start the creation of a computation work group under a parent work group + SUBROUTINE cmfe_Computation_WorkGroupCreateStart(parentWorkGroup,numberOfComputationNodes,workGroup,err) !DLLEXPORT(cmfe_Computation_WorkGroupCreateStart) !Argument Variables - TYPE(cmfe_ComputationWorkGroupType), INTENT(INOUT) :: worldWorkGroup - INTEGER(INTG),INTENT(IN) :: numberComputationNodes + TYPE(cmfe_ComputationWorkGroupType), INTENT(INOUT) :: parentWorkGroup !Finish the creation of a computation work group - SUBROUTINE cmfe_Computation_WorkGroupCreateFinish(worldWorkGroup, err) + SUBROUTINE cmfe_Computation_WorkGroupCreateFinish(workGroup,err) !DLLEXPORT(cmfe_Computation_WorkGroupCreateFinish) !Argument Variables - TYPE(cmfe_ComputationWorkGroupType), INTENT(INOUT) :: worldWorkGroup + TYPE(cmfe_ComputationWorkGroupType), INTENT(INOUT) :: workGroup !Set the working group tree in order to performe mesh decomposition - SUBROUTINE cmfe_Decomposition_WorldWorkGroupSet(decomposition, worldWorkGroup, err) + !>Set the decomposition work group + SUBROUTINE cmfe_Decomposition_WorldWorkGroupSet(decomposition,workGroup,err) !DLLEXPORT(cmfe_Decomposition_WorldWorkGroupSet) !Argument Variables - TYPE(cmfe_DecompositionType), INTENT(INOUT) :: decomposition - TYPE(cmfe_ComputationWorkGroupType),INTENT(IN) :: worldWorkGroup + TYPE(cmfe_DecompositionType), INTENT(INOUT) :: decomposition ! REGION%equations_sets%equations_sets(EQUATIONS_SET_GLOBAL_NUMBER)%ptr NULLIFY(SOURCE_FIELD) COMPUTATION_DOMAIN=>REGION%MESHES%MESHES(1) & & %ptr%DECOMPOSITIONS%DECOMPOSITIONS(1)%ptr%DOMAIN(1)%ptr - myComputationNodeNumber = ComputationEnvironment_NodeNumberGet(ERR,ERROR) + myWorldComputationNodeNumber = ComputationEnvironment_NodeNumberGet(ERR,ERROR) NumberOfDimensions = COMPUTATION_DOMAIN%NUMBER_OF_DIMENSIONS NumberOfNodes = COMPUTATION_DOMAIN%TOPOLOGY%NODES%NUMBER_OF_NODES NodesInMeshComponent = REGION%meshes%meshes(1)%ptr%topology(1)%ptr%nodes%numberOfNodes @@ -142,50 +142,50 @@ SUBROUTINE REACTION_DIFFUSION_IO_WRITE_CMGUI(REGION, EQUATIONS_SET_GLOBAL_NUMBER FILENAME="./output/"//NAME//".exnode" - OPEN(UNIT=myComputationNodeNumber, FILE=CHAR(FILENAME),STATUS='unknown') + OPEN(UNIT=myWorldComputationNodeNumber, FILE=CHAR(FILENAME),STATUS='unknown') ! WRITING HEADER INFORMATION - WRITE(myComputationNodeNumber,*) 'Group name: Cell' + WRITE(myWorldComputationNodeNumber,*) 'Group name: Cell' WRITE(INTG_STRING,'(I0)'),NumberOfOutputFields - WRITE(myComputationNodeNumber,*) '#Fields=',TRIM(INTG_STRING) + WRITE(myWorldComputationNodeNumber,*) '#Fields=',TRIM(INTG_STRING) ValueIndex=1 WRITE(INTG_STRING,'(I0)'),NumberOfDimensions - WRITE(myComputationNodeNumber,*) & + WRITE(myWorldComputationNodeNumber,*) & & ' 1) coordinates, coordinate, rectangular cartesian, #Components=',TRIM(INTG_STRING) DO I=1,NumberOfDimensions IF(I==1) THEN WRITE(INTG_STRING,'(I0)'),ValueIndex - WRITE(myComputationNodeNumber,*) ' x. Value index= ',TRIM(INTG_STRING),', #Derivatives= 0' + WRITE(myWorldComputationNodeNumber,*) ' x. Value index= ',TRIM(INTG_STRING),', #Derivatives= 0' ELSE IF(I==2) THEN WRITE(INTG_STRING,'(I0)'),ValueIndex - WRITE(myComputationNodeNumber,*) ' y. Value index= ',TRIM(INTG_STRING),', #Derivatives= 0' + WRITE(myWorldComputationNodeNumber,*) ' y. Value index= ',TRIM(INTG_STRING),', #Derivatives= 0' ELSE WRITE(INTG_STRING,'(I0)'),ValueIndex - WRITE(myComputationNodeNumber,*) ' z. Value index= ',TRIM(INTG_STRING),', #Derivatives= 0' + WRITE(myWorldComputationNodeNumber,*) ' z. Value index= ',TRIM(INTG_STRING),', #Derivatives= 0' END IF ValueIndex=ValueIndex+1 END DO WRITE(INTG_STRING,'(I0)'),NumberOfVariableComponents - WRITE(myComputationNodeNumber,*) ' 2) dependent, field, rectangular cartesian, #Components=', & + WRITE(myWorldComputationNodeNumber,*) ' 2) dependent, field, rectangular cartesian, #Components=', & & TRIM(INTG_STRING) DO I=1,NumberOfVariableComponents WRITE(INTG_STRING,'(I0)'),ValueIndex WRITE(INTG_STRING2,'(I0)'),I - WRITE(myComputationNodeNumber,*) ' ',TRIM(INTG_STRING2),'. Value index= ',TRIM(INTG_STRING), & + WRITE(myWorldComputationNodeNumber,*) ' ',TRIM(INTG_STRING2),'. Value index= ',TRIM(INTG_STRING), & & ', #Derivatives= 0' ValueIndex=ValueIndex+1 END DO IF( OUTPUT_SOURCE ) THEN !Watch out that no numbering conflict occurs with Analytic: 4.) WRITE(INTG_STRING,'(I0)'),NumberOfSourceComponents - WRITE(myComputationNodeNumber,*) ' 3) source, field, rectangular cartesian, #Components=', & + WRITE(myWorldComputationNodeNumber,*) ' 3) source, field, rectangular cartesian, #Components=', & & TRIM(INTG_STRING) DO I=1,NumberOfSourceComponents WRITE(INTG_STRING,'(I0)'),ValueIndex WRITE(INTG_STRING2,'(I0)'),I - WRITE(myComputationNodeNumber,*) ' ',TRIM(INTG_STRING2),'. Value index= ', & + WRITE(myWorldComputationNodeNumber,*) ' ',TRIM(INTG_STRING2),'. Value index= ', & & TRIM(INTG_STRING),', #Derivatives= 0' ValueIndex=ValueIndex+1 END DO @@ -207,17 +207,17 @@ SUBROUTINE REACTION_DIFFUSION_IO_WRITE_CMGUI(REGION, EQUATIONS_SET_GLOBAL_NUMBER NodeUValue=REGION%equations_sets%equations_sets(EQUATIONS_SET_GLOBAL_NUMBER)%ptr%dependent%dependent_field% & & variables(1)%parameter_sets%parameter_sets(1)%ptr%parameters%cmiss%data_dp(I) - WRITE(myComputationNodeNumber,*) ' Node: ',NODE_GLOBAL_NUMBER - WRITE(myComputationNodeNumber,'(" ", es25.16 )')NodeXValue + WRITE(myWorldComputationNodeNumber,*) ' Node: ',NODE_GLOBAL_NUMBER + WRITE(myWorldComputationNodeNumber,'(" ", es25.16 )')NodeXValue IF(NumberOfDimensions==2 .OR. NumberOfDimensions==3) THEN - WRITE(myComputationNodeNumber,'(" ", es25.16 )')NodeYValue + WRITE(myWorldComputationNodeNumber,'(" ", es25.16 )')NodeYValue END IF IF(NumberOfDimensions==3) THEN - WRITE(myComputationNodeNumber,'(" ", es25.16 )')NodeZValue + WRITE(myWorldComputationNodeNumber,'(" ", es25.16 )')NodeZValue END IF - WRITE(myComputationNodeNumber,'(" ", es25.16 )')NodeUValue + WRITE(myWorldComputationNodeNumber,'(" ", es25.16 )')NodeUValue IF( (EQUATIONS_SET%SPECIFICATION(1)==EQUATIONS_SET_CLASSICAL_FIELD_CLASS) & & .AND.(EQUATIONS_SET%SPECIFICATION(2)==EQUATIONS_SET_REACTION_DIFFUSION_EQUATION_TYPE) & @@ -225,11 +225,11 @@ SUBROUTINE REACTION_DIFFUSION_IO_WRITE_CMGUI(REGION, EQUATIONS_SET_GLOBAL_NUMBER !source field IF( OUTPUT_SOURCE ) THEN !NodeSourceValue = SOURCE_INTERPOLATED_POINT(FIELD_U_VARIABLE_TYPE)%ptr%VALUES(1,1) - !WRITE(myComputationNodeNumber,'(" ", es25.16 )')NodeSourceValue + !WRITE(myWorldComputationNodeNumber,'(" ", es25.16 )')NodeSourceValue END IF END IF END DO !nodes I - CLOSE(myComputationNodeNumber) + CLOSE(myWorldComputationNodeNumber) !OUTPUT ELEMENTS IN CURRENT DOMAIN MaxNodesPerElement=COMPUTATION_DOMAIN%TOPOLOGY%ELEMENTS%ELEMENTS(1)%basis%number_of_element_parameters @@ -246,110 +246,110 @@ SUBROUTINE REACTION_DIFFUSION_IO_WRITE_CMGUI(REGION, EQUATIONS_SET_GLOBAL_NUMBER ENDIF CALL WRITE_STRING(GENERAL_OUTPUT_TYPE,"Writing Elements...",ERR,ERROR,*999) FILENAME="./output/"//NAME//".exelem" - OPEN(UNIT=myComputationNodeNumber, FILE=CHAR(FILENAME),STATUS='unknown') - WRITE(myComputationNodeNumber,*) 'Group name: Cell' + OPEN(UNIT=myWorldComputationNodeNumber, FILE=CHAR(FILENAME),STATUS='unknown') + WRITE(myWorldComputationNodeNumber,*) 'Group name: Cell' IF (BasisType==1) THEN !lagrange basis in 1 and 2D WRITE(INTG_STRING,'(I0)'),NumberOfDimensions - WRITE(myComputationNodeNumber,*) 'Shape. Dimension= ',TRIM(INTG_STRING) - WRITE(myComputationNodeNumber,*) '#Scale factor sets= 1' + WRITE(myWorldComputationNodeNumber,*) 'Shape. Dimension= ',TRIM(INTG_STRING) + WRITE(myWorldComputationNodeNumber,*) '#Scale factor sets= 1' IF(NumberOfDimensions==1) THEN WRITE(INTG_STRING,'(I0)'),MaxNodesPerElement - WRITE(myComputationNodeNumber,*) 'q.Lagrange, #Scale factors=',TRIM(INTG_STRING) + WRITE(myWorldComputationNodeNumber,*) 'q.Lagrange, #Scale factors=',TRIM(INTG_STRING) ELSE IF (NumberOfDimensions==2) THEN IF(MaxNodesPerElement==4) THEN WRITE(INTG_STRING,'(I0)'),MaxNodesPerElement - WRITE(myComputationNodeNumber,*) & + WRITE(myWorldComputationNodeNumber,*) & & 'l.Lagrange*l.Lagrange, #Scale factors=',TRIM(INTG_STRING) !linear lagrange ELSE IF(MaxNodesPerElement==9) THEN WRITE(INTG_STRING,'(I0)'),MaxNodesPerElement - WRITE(myComputationNodeNumber,*) & + WRITE(myWorldComputationNodeNumber,*) & & 'q.Lagrange*q.Lagrange, #Scale factors=',TRIM(INTG_STRING) !quadratic lagrange ELSE IF(MaxNodesPerElement==16) THEN WRITE(INTG_STRING,'(I0)'),MaxNodesPerElement - WRITE(myComputationNodeNumber,*) & + WRITE(myWorldComputationNodeNumber,*) & & 'c.Lagrange*c.Lagrange, #Scale factors=',TRIM(INTG_STRING) !cubic lagrange END IF ELSE !three dimensions IF(MaxNodesPerElement==8) THEN WRITE(INTG_STRING,'(I0)'),MaxNodesPerElement - WRITE(myComputationNodeNumber,*) & + WRITE(myWorldComputationNodeNumber,*) & & 'l.Lagrange*l.Lagrange*l.Lagrange, #Scale factors=',TRIM(INTG_STRING) ELSE IF(MaxNodesPerElement==27) THEN WRITE(INTG_STRING,'(I0)'),MaxNodesPerElement - WRITE(myComputationNodeNumber,*) & + WRITE(myWorldComputationNodeNumber,*) & & 'q.Lagrange*q.Lagrange*q.Lagrange, #Scale factors=',TRIM(INTG_STRING) ELSE IF(MaxNodesPerElement==64) THEN WRITE(INTG_STRING,'(I0)'),MaxNodesPerElement - WRITE(myComputationNodeNumber,*) & + WRITE(myWorldComputationNodeNumber,*) & & 'c.Lagrange*c.Lagrange*c.Lagrange, #Scale factors=',TRIM(INTG_STRING) END IF END IF ELSEIF(BasisType==2) THEN IF(NumberOfDimensions==2) THEN - WRITE(myComputationNodeNumber,*) 'Shape. Dimension=', & + WRITE(myWorldComputationNodeNumber,*) 'Shape. Dimension=', & & NumberOfDimensions,', simplex(2)*simplex' IF(MaxNodesPerElement==3) THEN - WRITE(myComputationNodeNumber,*) '#Scale factor sets= 1' + WRITE(myWorldComputationNodeNumber,*) '#Scale factor sets= 1' WRITE(INTG_STRING,'(I0)'),MaxNodesPerElement - WRITE(myComputationNodeNumber,*) & + WRITE(myWorldComputationNodeNumber,*) & & ' l.simplex(2)*l.simplex, #Scale factors= ', TRIM(INTG_STRING) ELSE IF(MaxNodesPerElement==6) THEN - WRITE(myComputationNodeNumber,*) '#Scale factor sets= 1' + WRITE(myWorldComputationNodeNumber,*) '#Scale factor sets= 1' WRITE(INTG_STRING,'(I0)'),MaxNodesPerElement - WRITE(myComputationNodeNumber,*) & + WRITE(myWorldComputationNodeNumber,*) & & ' l.simplex(2)*l.simplex, #Scale factors= ', TRIM(INTG_STRING) ELSE IF (MaxNodesPerElement== 10 ) THEN - WRITE(myComputationNodeNumber,*) '#Scale factor sets= 1' + WRITE(myWorldComputationNodeNumber,*) '#Scale factor sets= 1' WRITE(INTG_STRING,'(I0)'),MaxNodesPerElement - WRITE(myComputationNodeNumber,*) & + WRITE(myWorldComputationNodeNumber,*) & & ' q.simplex(2)*q.simplex, #Scale factors= ', TRIM(INTG_STRING) ENDIF ELSE IF(NumberOfDimensions==3) THEN WRITE(INTG_STRING2,'(I0)'),NumberOfDimensions - WRITE(myComputationNodeNumber,*) & + WRITE(myWorldComputationNodeNumber,*) & & 'Shape. Dimension=',TRIM(INTG_STRING2),', simplex(2;3)*simplex*simplex' IF(MaxNodesPerElement==4) THEN - WRITE(myComputationNodeNumber,*) & + WRITE(myWorldComputationNodeNumber,*) & & '#Scale factor sets= 1' WRITE(INTG_STRING,'(I0)'),MaxNodesPerElement - WRITE(myComputationNodeNumber,*) & + WRITE(myWorldComputationNodeNumber,*) & & ' l.simplex(2;3)*l.simplex*l.simplex, #Scale factors= ', TRIM(INTG_STRING) ELSE IF (MaxNodesPerElement== 10 ) THEN - WRITE(myComputationNodeNumber,*) '#Scale factor sets= 1' + WRITE(myWorldComputationNodeNumber,*) '#Scale factor sets= 1' WRITE(INTG_STRING,'(I0)'),MaxNodesPerElement - WRITE(myComputationNodeNumber,*) & + WRITE(myWorldComputationNodeNumber,*) & & ' q.simplex(2;3)*q.simplex*q.simplex, #Scale factors= ', TRIM(INTG_STRING) ELSE IF(MaxNodesPerElement==20) THEN - WRITE(myComputationNodeNumber,*) '#Scale factor sets= 1' + WRITE(myWorldComputationNodeNumber,*) '#Scale factor sets= 1' WRITE(INTG_STRING,'(I0)'),MaxNodesPerElement - WRITE(myComputationNodeNumber,*) & + WRITE(myWorldComputationNodeNumber,*) & & ' q.simplex(2;3)*q.simplex*q.simplex, #Scale factors= ', TRIM(INTG_STRING) ENDIF ELSE - WRITE(myComputationNodeNumber,*) '#Scale factor sets= 0' + WRITE(myWorldComputationNodeNumber,*) '#Scale factor sets= 0' END IF END IF WRITE(INTG_STRING,'(I0)'),MaxNodesPerElement - WRITE(myComputationNodeNumber,*) '#Nodes= ',TRIM(INTG_STRING) + WRITE(myWorldComputationNodeNumber,*) '#Nodes= ',TRIM(INTG_STRING) WRITE(INTG_STRING,'(I0)'),NumberOfOutputFields - WRITE(myComputationNodeNumber,*) '#Fields= ',TRIM(INTG_STRING) + WRITE(myWorldComputationNodeNumber,*) '#Fields= ',TRIM(INTG_STRING) NumberOfFieldComponents(1) = NumberOfDimensions NumberOfFieldComponents(2) = NumberOfVariableComponents NumberOfFieldComponents(3) = NumberOfSourceComponents DO I=1,NumberOfOutputFields IF(I==1)THEN WRITE(INTG_STRING,'(I0)'),NumberOfDimensions - WRITE(myComputationNodeNumber,*) & + WRITE(myWorldComputationNodeNumber,*) & & ' 1) coordinates, coordinate, rectangular cartesian, #Components= ',TRIM(INTG_STRING) ELSE IF(I==2) THEN WRITE(INTG_STRING,'(I0)'),NumberOfVariableComponents - WRITE(myComputationNodeNumber,*) & + WRITE(myWorldComputationNodeNumber,*) & & ' 2) dependent, field, rectangular cartesian, #Components= ',TRIM(INTG_STRING) ELSE IF(I==3) THEN WRITE(INTG_STRING,'(I0)'),NumberOfSourceComponents - WRITE(myComputationNodeNumber,*) & + WRITE(myWorldComputationNodeNumber,*) & & ' 3) source, field, rectangular cartesian, #Components= ',TRIM(INTG_STRING) END IF @@ -357,98 +357,98 @@ SUBROUTINE REACTION_DIFFUSION_IO_WRITE_CMGUI(REGION, EQUATIONS_SET_GLOBAL_NUMBER IF(NumberOfDimensions==1) THEN IF(I==1)THEN IF(J==1) THEN - WRITE(myComputationNodeNumber,*)' x. l.Lagrange, no modify, standard node based.' + WRITE(myWorldComputationNodeNumber,*)' x. l.Lagrange, no modify, standard node based.' ELSE IF(J==2) THEN - WRITE(myComputationNodeNumber,*)' y. l.Lagrange, no modify, standard node based.' + WRITE(myWorldComputationNodeNumber,*)' y. l.Lagrange, no modify, standard node based.' ELSE IF(J==3) THEN - WRITE(myComputationNodeNumber,*)' z. l.Lagrange, no modify, standard node based.' + WRITE(myWorldComputationNodeNumber,*)' z. l.Lagrange, no modify, standard node based.' END IF ELSE - WRITE(myComputationNodeNumber,*) & + WRITE(myWorldComputationNodeNumber,*) & & ' ',J,'. l.Lagrange, no modify, standard node based.' END IF ELSE IF(NumberOfDimensions==2) THEN IF(I==1)THEN IF(J==1) THEN IF(MaxNodesPerElement==4)THEN - WRITE(myComputationNodeNumber,*) & + WRITE(myWorldComputationNodeNumber,*) & & ' x. l.Lagrange*l.Lagrange, no modify, standard node based.' ELSE IF(MaxNodesPerElement==9) THEN - WRITE(myComputationNodeNumber,*) & + WRITE(myWorldComputationNodeNumber,*) & & ' x. q.Lagrange*q.Lagrange, no modify, standard node based.' ELSE IF(MaxNodesPerElement==16) THEN - WRITE(myComputationNodeNumber,*) & + WRITE(myWorldComputationNodeNumber,*) & & ' x. c.Lagrange*c.Lagrange, no modify, standard node based.' ELSE IF(MaxNodesPerElement==3) THEN - WRITE(myComputationNodeNumber,*) & + WRITE(myWorldComputationNodeNumber,*) & & ' x. l.simplex(2)*l.simplex, no modify, standard node based.' ELSE IF(MaxNodesPerElement==6) THEN - WRITE(myComputationNodeNumber,*) & + WRITE(myWorldComputationNodeNumber,*) & & ' x. q.simplex(2)*q.simplex, no modify, standard node based.' ELSE IF(MaxNodesPerElement==10) THEN - WRITE(myComputationNodeNumber,*) & + WRITE(myWorldComputationNodeNumber,*) & & ' x. c.simplex(2)*c.simplex, no modify, standard node based.' END IF ELSE IF(J==2) THEN IF(MaxNodesPerElement==4) THEN - WRITE(myComputationNodeNumber,*) & + WRITE(myWorldComputationNodeNumber,*) & & ' y. l.Lagrange*l.Lagrange, no modify, standard node based.' ELSE IF(MaxNodesPerElement==9) THEN - WRITE(myComputationNodeNumber,*) & + WRITE(myWorldComputationNodeNumber,*) & & ' y. q.Lagrange*q.Lagrange, no modify, standard node based.' ELSE IF(MaxNodesPerElement==16) THEN - WRITE(myComputationNodeNumber,*) & + WRITE(myWorldComputationNodeNumber,*) & & ' y. c.Lagrange*c.Lagrange, no modify, standard node based.' ELSE IF(MaxNodesPerElement==3) THEN - WRITE(myComputationNodeNumber,*) & + WRITE(myWorldComputationNodeNumber,*) & & ' y. l.simplex(2)*l.simplex, no modify, standard node based.' ELSE IF(MaxNodesPerElement==6) THEN - WRITE(myComputationNodeNumber,*) & + WRITE(myWorldComputationNodeNumber,*) & & ' y. q.simplex(2)*q.simplex, no modify, standard node based.' ELSE IF(MaxNodesPerElement==10) THEN - WRITE(myComputationNodeNumber,*) & + WRITE(myWorldComputationNodeNumber,*) & & ' y. c.simplex(2)*c.simplex, no modify, standard node based.' END IF ELSE IF(J==3) THEN IF(MaxNodesPerElement==4) THEN - WRITE(myComputationNodeNumber,*) & + WRITE(myWorldComputationNodeNumber,*) & & ' z. l.Lagrange*l.Lagrange, no modify, standard node based.' ELSE IF(MaxNodesPerElement==9) THEN - WRITE(myComputationNodeNumber,*) & + WRITE(myWorldComputationNodeNumber,*) & & ' z. q.Lagrange*q.Lagrange, no modify, standard node based.' ELSE IF(MaxNodesPerElement==16) THEN - WRITE(myComputationNodeNumber,*) & + WRITE(myWorldComputationNodeNumber,*) & & ' z. c.Lagrange*c.Lagrange, no modify, standard node based.' ELSE IF(MaxNodesPerElement==3) THEN - WRITE(myComputationNodeNumber,*) & + WRITE(myWorldComputationNodeNumber,*) & & ' z. l.simplex(2)*l.simplex, no modify, standard node based.' ELSE IF(MaxNodesPerElement==6) THEN - WRITE(myComputationNodeNumber,*) & + WRITE(myWorldComputationNodeNumber,*) & & ' z. q.simplex(2)*q.simplex, no modify, standard node based.' ELSE IF(MaxNodesPerElement==10) THEN - WRITE(myComputationNodeNumber,*) & + WRITE(myWorldComputationNodeNumber,*) & & ' z. c.simplex(2)*c.simplex, no modify, standard node based.' END IF END IF ELSE IF(MaxNodesPerElement==4) THEN - WRITE(myComputationNodeNumber,*) & + WRITE(myWorldComputationNodeNumber,*) & & ' ',J,'. l.Lagrange*l.Lagrange, no modify, standard node based.' ELSE IF(MaxNodesPerElement==9) THEN - WRITE(myComputationNodeNumber,*) & + WRITE(myWorldComputationNodeNumber,*) & & ' ',J,'. q.Lagrange*q.Lagrange, no modify, standard node based.' ELSE IF(MaxNodesPerElement==16) THEN - WRITE(myComputationNodeNumber,*) & + WRITE(myWorldComputationNodeNumber,*) & & ' ',J,'. c.Lagrange*c.Lagrange, no modify, standard node based.' ELSE IF(MaxNodesPerElement==3) THEN - WRITE(myComputationNodeNumber,*) & + WRITE(myWorldComputationNodeNumber,*) & & ' ',J,'. l.simplex(2)*l.simplex, no modify, standard node based.' ELSE IF(MaxNodesPerElement==6) THEN - WRITE(myComputationNodeNumber,*) & + WRITE(myWorldComputationNodeNumber,*) & & ' ',J,'. q.simplex(2)*q.simplex, no modify, standard node based.' ELSE IF(MaxNodesPerElement==10) THEN - WRITE(myComputationNodeNumber,*) & + WRITE(myWorldComputationNodeNumber,*) & & ' ',J,'. c.simplex(2)*c.simplex, no modify, standard node based.' END IF END IF @@ -456,95 +456,95 @@ SUBROUTINE REACTION_DIFFUSION_IO_WRITE_CMGUI(REGION, EQUATIONS_SET_GLOBAL_NUMBER IF(I==1)THEN IF(J==1) THEN IF(MaxNodesPerElement==8) THEN - WRITE(myComputationNodeNumber,*) & + WRITE(myWorldComputationNodeNumber,*) & & ' x. l.Lagrange*l.Lagrange*l.Lagrange, no modify, standard node based.' ELSE IF(MaxNodesPerElement==27) THEN - WRITE(myComputationNodeNumber,*) & + WRITE(myWorldComputationNodeNumber,*) & & ' x. q.Lagrange*q.Lagrange*q.Lagrange, no modify, standard node based.' ELSE IF(MaxNodesPerElement==64) THEN - WRITE(myComputationNodeNumber,*) & + WRITE(myWorldComputationNodeNumber,*) & & ' x. c.Lagrange*c.Lagrange*c.Lagrange, no modify, standard node based.' ELSE IF(MaxNodesPerElement==4) THEN - WRITE(myComputationNodeNumber,*) & + WRITE(myWorldComputationNodeNumber,*) & & ' x. l.simplex(2;3)*l.simplex*l.simplex, no modify, standard node based.' ELSE IF(MaxNodesPerElement==10) THEN - WRITE(myComputationNodeNumber,*) & + WRITE(myWorldComputationNodeNumber,*) & & ' x. q.simplex(2;3)*q.simplex*q.simplex, no modify, standard node based.' ELSE IF(MaxNodesPerElement==20) THEN - WRITE(myComputationNodeNumber,*) & + WRITE(myWorldComputationNodeNumber,*) & & ' x. c.simplex(2;3)*c.simplex*c.simplex, no modify, standard node based.' END IF ELSE IF(J==2) THEN IF(MaxNodesPerElement==8) THEN - WRITE(myComputationNodeNumber,*) & + WRITE(myWorldComputationNodeNumber,*) & & ' y. l.Lagrange*l.Lagrange*l.Lagrange, no modify, standard node based.' ELSE IF(MaxNodesPerElement==27) THEN - WRITE(myComputationNodeNumber,*) & + WRITE(myWorldComputationNodeNumber,*) & & ' y. q.Lagrange*q.Lagrange*q.Lagrange, no modify, standard node based.' ELSE IF(MaxNodesPerElement==64) THEN - WRITE(myComputationNodeNumber,*) & + WRITE(myWorldComputationNodeNumber,*) & & ' y. c.Lagrange*c.Lagrange*c.Lagrange, no modify, standard node based.' ELSE IF(MaxNodesPerElement==4) THEN - WRITE(myComputationNodeNumber,*) & + WRITE(myWorldComputationNodeNumber,*) & & ' y. l.simplex(2;3)*l.simplex*l.simplex, no modify, standard node based.' ELSE IF(MaxNodesPerElement==10) THEN - WRITE(myComputationNodeNumber,*) & + WRITE(myWorldComputationNodeNumber,*) & & ' y. q.simplex(2;3)*q.simplex*q.simplex, no modify, standard node based.' ELSE IF(MaxNodesPerElement==20) THEN - WRITE(myComputationNodeNumber,*) & + WRITE(myWorldComputationNodeNumber,*) & & ' y. c.simplex(2;3)*c.simplex*c.simplex, no modify, standard node based.' END IF ELSE IF(J==3) THEN IF(MaxNodesPerElement==8) THEN - WRITE(myComputationNodeNumber,*) & + WRITE(myWorldComputationNodeNumber,*) & & ' z. l.Lagrange*l.Lagrange*l.Lagrange, no modify, standard node based.' ELSE IF(MaxNodesPerElement==27) THEN - WRITE(myComputationNodeNumber,*) & + WRITE(myWorldComputationNodeNumber,*) & & ' z. q.Lagrange*q.Lagrange*q.Lagrange, no modify, standard node based.' ELSE IF(MaxNodesPerElement==64) THEN - WRITE(myComputationNodeNumber,*) & + WRITE(myWorldComputationNodeNumber,*) & & ' z. c.Lagrange*c.Lagrange*c.Lagrange, no modify, standard node based.' ELSE IF(MaxNodesPerElement==4) THEN - WRITE(myComputationNodeNumber,*) & + WRITE(myWorldComputationNodeNumber,*) & & ' z. l.simplex(2;3)*l.simplex*l.simplex, no modify, standard node based.' ELSE IF(MaxNodesPerElement==10) THEN - WRITE(myComputationNodeNumber,*) & + WRITE(myWorldComputationNodeNumber,*) & & ' z. q.simplex(2;3)*q.simplex*q.simplex, no modify, standard node based.' ELSE IF(MaxNodesPerElement==20) THEN - WRITE(myComputationNodeNumber,*) & + WRITE(myWorldComputationNodeNumber,*) & & ' z. c.simplex(2;3)*c.simplex*c.simplex, no modify, standard node based.' END IF END IF ELSE IF(MaxNodesPerElement==8) THEN - WRITE(myComputationNodeNumber,*) & + WRITE(myWorldComputationNodeNumber,*) & & ' ',J,'. l.Lagrange*l.Lagrange*l.Lagrange, no modify, standard node based.' ELSE IF(MaxNodesPerElement==27) THEN - WRITE(myComputationNodeNumber,*) & + WRITE(myWorldComputationNodeNumber,*) & & ' ',J,'. q.Lagrange*q.Lagrange*q.Lagrange, no modify, standard node based.' ELSE IF(MaxNodesPerElement==64) THEN - WRITE(myComputationNodeNumber,*) & + WRITE(myWorldComputationNodeNumber,*) & & ' ',J,'. c.Lagrange*c.Lagrange*c.Lagrange, no modify, standard node based.' ELSE IF(MaxNodesPerElement==4) THEN - WRITE(myComputationNodeNumber,*) & + WRITE(myWorldComputationNodeNumber,*) & & ' ',J,'. l.simplex(2;3)*l.simplex*l.simplex, no modify, standard node based.' ELSE IF(MaxNodesPerElement==10) THEN - WRITE(myComputationNodeNumber,*) & + WRITE(myWorldComputationNodeNumber,*) & & ' ',J,'. q.simplex(2;3)*q.simplex*q.simplex, no modify, standard node based.' ELSE IF(MaxNodesPerElement==20) THEN - WRITE(myComputationNodeNumber,*) & + WRITE(myWorldComputationNodeNumber,*) & & ' ',J,'. c.simplex(2;3)*c.simplex*c.simplex, no modify, standard node based.' END IF END IF END IF WRITE(INTG_STRING,'(I0)') MaxNodesPerElement - WRITE(myComputationNodeNumber,*) ' #Nodes= ',TRIM(INTG_STRING) + WRITE(myWorldComputationNodeNumber,*) ' #Nodes= ',TRIM(INTG_STRING) DO K = 1,MaxNodesPerElement WRITE(INTG_STRING,'(I0)'),K - WRITE(myComputationNodeNumber,*) ' ',TRIM(INTG_STRING),'. #Values=1' - WRITE(myComputationNodeNumber,*) ' Value indices: 1' - WRITE(myComputationNodeNumber,*) ' Scale factor indices: ',TRIM(INTG_STRING) + WRITE(myWorldComputationNodeNumber,*) ' ',TRIM(INTG_STRING),'. #Values=1' + WRITE(myWorldComputationNodeNumber,*) ' Value indices: 1' + WRITE(myWorldComputationNodeNumber,*) ' Scale factor indices: ',TRIM(INTG_STRING) END DO END DO !J loop END DO !I loop @@ -565,11 +565,11 @@ SUBROUTINE REACTION_DIFFUSION_IO_WRITE_CMGUI(REGION, EQUATIONS_SET_GLOBAL_NUMBER ELEMENT_GLOBAL_NUMBER=COMPUTATION_DOMAIN%DECOMPOSITION%TOPOLOGY%ELEMENTS%ELEMENTS(K)%GLOBAL_NUMBER IF (BasisType==1) THEN WRITE(INTG_STRING,'(I0)'),ELEMENT_GLOBAL_NUMBER - WRITE(myComputationNodeNumber,*) 'Element: ', TRIM(INTG_STRING),' 0 0' - WRITE(myComputationNodeNumber,*) ' Nodes:' - WRITE(myComputationNodeNumber,*) ' ', ElementNodes(K,1:MaxNodesPerElement) - WRITE(myComputationNodeNumber,*) ' Scale factors:' - WRITE(myComputationNodeNumber,*) ' ',ElementNodesScales(K,1:MaxNodesPerElement) + WRITE(myWorldComputationNodeNumber,*) 'Element: ', TRIM(INTG_STRING),' 0 0' + WRITE(myWorldComputationNodeNumber,*) ' Nodes:' + WRITE(myWorldComputationNodeNumber,*) ' ', ElementNodes(K,1:MaxNodesPerElement) + WRITE(myWorldComputationNodeNumber,*) ' Scale factors:' + WRITE(myWorldComputationNodeNumber,*) ' ',ElementNodesScales(K,1:MaxNodesPerElement) ELSEIF(BasisType==2) THEN IF(.NOT.ALLOCATED(SimplexOutputHelp)) ALLOCATE(SimplexOutputHelp(MaxNodesPerElement)) @@ -584,14 +584,14 @@ SUBROUTINE REACTION_DIFFUSION_IO_WRITE_CMGUI(REGION, EQUATIONS_SET_GLOBAL_NUMBER SimplexOutputHelp(4)=ElementNodes(K,3) END IF WRITE(INTG_STRING,'(I0)') ELEMENT_GLOBAL_NUMBER - WRITE(myComputationNodeNumber,*) 'Element: ', TRIM(INTG_STRING),' 0 0' - WRITE(myComputationNodeNumber,*) ' Nodes:' - WRITE(myComputationNodeNumber,*) ' ', SimplexOutputHelp - WRITE(myComputationNodeNumber,*) ' Scale factors:' - WRITE(myComputationNodeNumber,*) ' ',ElementNodesScales(K,1:MaxNodesPerElement) + WRITE(myWorldComputationNodeNumber,*) 'Element: ', TRIM(INTG_STRING),' 0 0' + WRITE(myWorldComputationNodeNumber,*) ' Nodes:' + WRITE(myWorldComputationNodeNumber,*) ' ', SimplexOutputHelp + WRITE(myWorldComputationNodeNumber,*) ' Scale factors:' + WRITE(myWorldComputationNodeNumber,*) ' ',ElementNodesScales(K,1:MaxNodesPerElement) END IF ENDDO - CLOSE(myComputationNodeNumber) + CLOSE(myWorldComputationNodeNumber) EXITS("REACTION_DIFFUSION_IO_WRITE_CMGUI") RETURN diff --git a/src/reaction_diffusion_equation_routines.f90 b/src/reaction_diffusion_equation_routines.f90 index eda5b326..05c4525c 100755 --- a/src/reaction_diffusion_equation_routines.f90 +++ b/src/reaction_diffusion_equation_routines.f90 @@ -1529,7 +1529,7 @@ SUBROUTINE REACTION_DIFFUSION_POST_SOLVE_OUTPUT_DATA(CONTROL_LOOP,SOLVER,err,err REAL(DP) :: CURRENT_TIME,TIME_INCREMENT INTEGER(INTG) :: EQUATIONS_SET_IDX,CURRENT_LOOP_ITERATION,OUTPUT_FREQUENCY - INTEGER(INTG) :: myComputationNodeNumber + INTEGER(INTG) :: myWorldComputationNodeNumber CHARACTER(28) :: FILE CHARACTER(28) :: OUTPUT_FILE @@ -1558,20 +1558,20 @@ SUBROUTINE REACTION_DIFFUSION_POST_SOLVE_OUTPUT_DATA(CONTROL_LOOP,SOLVER,err,err CURRENT_LOOP_ITERATION=CONTROL_LOOP%TIME_LOOP%ITERATION_NUMBER OUTPUT_FREQUENCY=CONTROL_LOOP%TIME_LOOP%OUTPUT_NUMBER - myComputationNodeNumber = ComputationEnvironment_NodeNumberGet(err,error) + myWorldComputationNodeNumber = ComputationEnvironment_NodeNumberGet(err,error) IF(OUTPUT_FREQUENCY>0) THEN IF(MOD(CURRENT_LOOP_ITERATION,OUTPUT_FREQUENCY)==0) THEN IF(CONTROL_LOOP%TIME_LOOP%CURRENT_TIME<=CONTROL_LOOP%TIME_LOOP%STOP_TIME) THEN IF(SOLVER_MAPPING%NUMBER_OF_EQUATIONS_SETS.EQ.1) THEN IF(CURRENT_LOOP_ITERATION<10) THEN WRITE(OUTPUT_FILE,'("TIME_STEP_SPEC_1.part",I2.2,".000",I0)') & - & myComputationNodeNumber, CURRENT_LOOP_ITERATION + & myWorldComputationNodeNumber, CURRENT_LOOP_ITERATION ELSE IF(CURRENT_LOOP_ITERATION<100) THEN WRITE(OUTPUT_FILE,'("TIME_STEP_SPEC_1.part",I2.2,".00",I0)') & - & myComputationNodeNumber,CURRENT_LOOP_ITERATION + & myWorldComputationNodeNumber,CURRENT_LOOP_ITERATION ELSE IF(CURRENT_LOOP_ITERATION<1000) THEN WRITE(OUTPUT_FILE,'("TIME_STEP_SPEC_1.part",I2.2,".0",I0)') & - & myComputationNodeNumber,CURRENT_LOOP_ITERATION + & myWorldComputationNodeNumber,CURRENT_LOOP_ITERATION ELSE IF(CURRENT_LOOP_ITERATION<10000) THEN WRITE(OUTPUT_FILE,'("TIME_STEP_SPEC_1.part",I2.2,".",I0)') & & CURRENT_LOOP_ITERATION @@ -1579,16 +1579,16 @@ SUBROUTINE REACTION_DIFFUSION_POST_SOLVE_OUTPUT_DATA(CONTROL_LOOP,SOLVER,err,err ELSE IF(CURRENT_LOOP_ITERATION<10) THEN WRITE(OUTPUT_FILE, '("TIME_STEP_SPEC_",I0,".part",I2.2,".000",I0)') & - & equations_set_idx,myComputationNodeNumber,CURRENT_LOOP_ITERATION + & equations_set_idx,myWorldComputationNodeNumber,CURRENT_LOOP_ITERATION ELSE IF(CURRENT_LOOP_ITERATION<100) THEN WRITE(OUTPUT_FILE, '("TIME_STEP_SPEC_",I0,".part",I2.2,".00",I0)') & - & equations_set_idx,myComputationNodeNumber,CURRENT_LOOP_ITERATION + & equations_set_idx,myWorldComputationNodeNumber,CURRENT_LOOP_ITERATION ELSE IF(CURRENT_LOOP_ITERATION<1000) THEN WRITE(OUTPUT_FILE, '("TIME_STEP_SPEC_",I0,".part",I2.2,".0",I0)') & - & equations_set_idx,myComputationNodeNumber,CURRENT_LOOP_ITERATION + & equations_set_idx,myWorldComputationNodeNumber,CURRENT_LOOP_ITERATION ELSE IF(CURRENT_LOOP_ITERATION<10000) THEN WRITE(OUTPUT_FILE, '("TIME_STEP_SPEC_",I0,".part",I2.2,".",I0)') & - & equations_set_idx,myComputationNodeNumber,CURRENT_LOOP_ITERATION + & equations_set_idx,myWorldComputationNodeNumber,CURRENT_LOOP_ITERATION END IF ENDIF WRITE(*,*) OUTPUT_FILE diff --git a/src/solver_mapping_routines.f90 b/src/solver_mapping_routines.f90 index 4b01decd..96bfef51 100755 --- a/src/solver_mapping_routines.f90 +++ b/src/solver_mapping_routines.f90 @@ -319,7 +319,7 @@ SUBROUTINE SOLVER_MAPPING_CALCULATE(SOLVER_MAPPING,ERR,ERROR,*) ! for each rank. ! !Calculate the row mappings. - myrank=computationEnvironment%myComputationNodeNumber + myrank=computationEnvironment%myWorldComputationNodeNumber NUMBER_OF_GLOBAL_SOLVER_ROWS=0 NUMBER_OF_LOCAL_SOLVER_ROWS=0 !Add in the rows from any equations sets that have been added to the solver equations @@ -327,10 +327,10 @@ SUBROUTINE SOLVER_MAPPING_CALCULATE(SOLVER_MAPPING,ERR,ERROR,*) ! !Allocate and initialise the rank lists. ALLOCATE(RANK_GLOBAL_ROWS_LISTS(SOLVER_MAPPING%NUMBER_OF_EQUATIONS_SETS+SOLVER_MAPPING% & - & NUMBER_OF_INTERFACE_CONDITIONS,0:computationEnvironment%numberOfComputationNodes-1),STAT=ERR) + & NUMBER_OF_INTERFACE_CONDITIONS,0:computationEnvironment%numberOfWorldComputationNodes-1),STAT=ERR) IF(ERR/=0) CALL FlagError("Could not allocate rank global rows lists.",ERR,ERROR,*999) CALL SolverDofCouplings_Initialise(rowCouplings,err,error,*999) - DO rank=0,computationEnvironment%numberOfComputationNodes-1 + DO rank=0,computationEnvironment%numberOfWorldComputationNodes-1 equations_idx=0 DO equations_set_idx=1,SOLVER_MAPPING%NUMBER_OF_EQUATIONS_SETS equations_idx=equations_idx+1 @@ -346,7 +346,7 @@ SUBROUTINE SOLVER_MAPPING_CALCULATE(SOLVER_MAPPING,ERR,ERROR,*) CALL LIST_CREATE_START(RANK_GLOBAL_ROWS_LISTS(equations_idx,rank)%PTR,ERR,ERROR,*999) CALL LIST_DATA_TYPE_SET(RANK_GLOBAL_ROWS_LISTS(equations_idx,rank)%PTR,LIST_INTG_TYPE,ERR,ERROR,*999) CALL LIST_INITIAL_SIZE_SET(RANK_GLOBAL_ROWS_LISTS(equations_idx,rank)%PTR,INT(vectorMapping% & - & numberOfGlobalRows/computationEnvironment%numberOfComputationNodes,INTG), & + & numberOfGlobalRows/computationEnvironment%numberOfWorldComputationNodes,INTG), & & ERR,ERROR,*999) CALL LIST_DATA_DIMENSION_SET(RANK_GLOBAL_ROWS_LISTS(equations_idx,rank)%PTR,4,ERR,ERROR,*999) CALL LIST_KEY_DIMENSION_SET(RANK_GLOBAL_ROWS_LISTS(equations_idx,rank)%PTR,1,ERR,ERROR,*999) @@ -369,7 +369,7 @@ SUBROUTINE SOLVER_MAPPING_CALCULATE(SOLVER_MAPPING,ERR,ERROR,*) CALL LIST_CREATE_START(RANK_GLOBAL_ROWS_LISTS(equations_idx,rank)%PTR,ERR,ERROR,*999) CALL LIST_DATA_TYPE_SET(RANK_GLOBAL_ROWS_LISTS(equations_idx,rank)%PTR,LIST_INTG_TYPE,ERR,ERROR,*999) CALL LIST_INITIAL_SIZE_SET(RANK_GLOBAL_ROWS_LISTS(equations_idx,rank)%PTR, & - & INT(INTERFACE_MAPPING%NUMBER_OF_GLOBAL_COLUMNS/computationEnvironment%numberOfComputationNodes, & + & INT(INTERFACE_MAPPING%NUMBER_OF_GLOBAL_COLUMNS/computationEnvironment%numberOfWorldComputationNodes, & & INTG),ERR,ERROR,*999) CALL LIST_DATA_DIMENSION_SET(RANK_GLOBAL_ROWS_LISTS(equations_idx,rank)%PTR,4,ERR,ERROR,*999) CALL LIST_KEY_DIMENSION_SET(RANK_GLOBAL_ROWS_LISTS(equations_idx,rank)%PTR,1,ERR,ERROR,*999) @@ -677,7 +677,7 @@ SUBROUTINE SOLVER_MAPPING_CALCULATE(SOLVER_MAPPING,ERR,ERROR,*) IF(ERR/=0) CALL FlagError("Could not allocate solver mapping row dofs mapping.",ERR,ERROR,*999) !!TODO: what is the real number of domains for a solver??? CALL DOMAIN_MAPPINGS_MAPPING_INITIALISE(SOLVER_MAPPING%ROW_DOFS_MAPPING,computationEnvironment% & - & numberOfComputationNodes,ERR,ERROR,*999) + & numberOfWorldComputationNodes,ERR,ERROR,*999) ROW_DOMAIN_MAPPING=>SOLVER_MAPPING%ROW_DOFS_MAPPING ALLOCATE(ROW_DOMAIN_MAPPING%GLOBAL_TO_LOCAL_MAP(NUMBER_OF_GLOBAL_SOLVER_ROWS),STAT=ERR) IF(ERR/=0) CALL FlagError("Could not allocate row dofs mapping global to local map.",ERR,ERROR,*999) @@ -788,7 +788,7 @@ SUBROUTINE SOLVER_MAPPING_CALCULATE(SOLVER_MAPPING,ERR,ERROR,*) IF(err/=0) CALL FlagError("Could not allocate dummy DOF coupling values.",err,error,*999) dummyDofCoupling%numberOfDofs=1 !Loop over the ranks to ensure that the lowest ranks have the lowest numbered solver variables - DO rank=0,computationEnvironment%numberOfComputationNodes-1 + DO rank=0,computationEnvironment%numberOfWorldComputationNodes-1 NUMBER_OF_LOCAL_SOLVER_ROWS=0 !Calculate the solver row <-> equations row & interface row mappings. @@ -1226,9 +1226,9 @@ SUBROUTINE SOLVER_MAPPING_CALCULATE(SOLVER_MAPPING,ERR,ERROR,*) !dof_type is 1 for domain local DOFs and 2 for ghost DOFs ALLOCATE(RANK_GLOBAL_COLS_LISTS(2,SOLVER_MAPPING%NUMBER_OF_EQUATIONS_SETS+SOLVER_MAPPING% & & NUMBER_OF_INTERFACE_CONDITIONS,SOLVER_MAPPING%VARIABLES_LIST(solver_matrix_idx)%NUMBER_OF_VARIABLES, & - & 0:computationEnvironment%numberOfComputationNodes-1),STAT=ERR) + & 0:computationEnvironment%numberOfWorldComputationNodes-1),STAT=ERR) IF(ERR/=0) CALL FlagError("Could not allocate rank global columns lists.",ERR,ERROR,*999) - DO rank=0,computationEnvironment%numberOfComputationNodes-1 + DO rank=0,computationEnvironment%numberOfWorldComputationNodes-1 DO solver_variable_idx=1,SOLVER_MAPPING%VARIABLES_LIST(solver_matrix_idx)%NUMBER_OF_VARIABLES DO equations_idx=1,SOLVER_MAPPING%NUMBER_OF_EQUATIONS_SETS+SOLVER_MAPPING%NUMBER_OF_INTERFACE_CONDITIONS DO dof_type=1,2 @@ -1870,13 +1870,13 @@ SUBROUTINE SOLVER_MAPPING_CALCULATE(SOLVER_MAPPING,ERR,ERROR,*) IF(ERR/=0) CALL FlagError("Could not allocate solver col to equations sets map column dofs mapping.",ERR,ERROR,*999) !!TODO: what is the real number of domains for a solver??? CALL DOMAIN_MAPPINGS_MAPPING_INITIALISE(SOLVER_MAPPING%SOLVER_COL_TO_EQUATIONS_COLS_MAP(solver_matrix_idx)% & - & COLUMN_DOFS_MAPPING,computationEnvironment%numberOfComputationNodes,ERR,ERROR,*999) + & COLUMN_DOFS_MAPPING,computationEnvironment%numberOfWorldComputationNodes,ERR,ERROR,*999) COL_DOMAIN_MAPPING=>SOLVER_MAPPING%SOLVER_COL_TO_EQUATIONS_COLS_MAP(solver_matrix_idx)%COLUMN_DOFS_MAPPING ALLOCATE(COL_DOMAIN_MAPPING%GLOBAL_TO_LOCAL_MAP(NUMBER_OF_GLOBAL_SOLVER_DOFS),STAT=ERR) IF(ERR/=0) CALL FlagError("Could not allocate column dofs mapping global to local.",ERR,ERROR,*999) COL_DOMAIN_MAPPING%NUMBER_OF_GLOBAL=NUMBER_OF_GLOBAL_SOLVER_DOFS ALLOCATE(VARIABLE_RANK_PROCESSED(SOLVER_MAPPING%VARIABLES_LIST(solver_matrix_idx)%NUMBER_OF_VARIABLES, & - & 0:computationEnvironment%numberOfComputationNodes-1),STAT=ERR) + & 0:computationEnvironment%numberOfWorldComputationNodes-1),STAT=ERR) IF(ERR/=0) CALL FlagError("Could not allocate variable rank processed.",ERR,ERROR,*999) VARIABLE_RANK_PROCESSED=.FALSE. !Calculate the column mappings @@ -2260,7 +2260,7 @@ SUBROUTINE SOLVER_MAPPING_CALCULATE(SOLVER_MAPPING,ERR,ERROR,*) DOF_MAP(solver_variable_idx)%PTR=0 ENDDO !solver_variable_idx - ALLOCATE(solver_local_dof(0:computationEnvironment%numberOfComputationNodes-1),STAT=ERR) + ALLOCATE(solver_local_dof(0:computationEnvironment%numberOfWorldComputationNodes-1),STAT=ERR) IF(ERR/=0) CALL FlagError("Could not allocate solver local dof array.",ERR,ERROR,*999) ! @@ -2271,7 +2271,7 @@ SUBROUTINE SOLVER_MAPPING_CALCULATE(SOLVER_MAPPING,ERR,ERROR,*) solver_global_dof=0 solver_local_dof=0 DO dof_type=1,2 - DO rank=0,computationEnvironment%numberOfComputationNodes-1 + DO rank=0,computationEnvironment%numberOfWorldComputationNodes-1 DO solver_variable_idx=1,SOLVER_MAPPING%VARIABLES_LIST(solver_matrix_idx)%NUMBER_OF_VARIABLES diff --git a/src/solver_routines.f90 b/src/solver_routines.f90 index 9c1f69b5..de41f789 100644 --- a/src/solver_routines.f90 +++ b/src/solver_routines.f90 @@ -9807,7 +9807,7 @@ SUBROUTINE SOLVER_LINEAR_DIRECT_CREATE_FINISH(LINEAR_DIRECT_SOLVER,ERR,ERROR,*) !Nothing else to do CASE(SOLVER_MUMPS_LIBRARY,SOLVER_SUPERLU_LIBRARY,SOLVER_PASTIX_LIBRARY,SOLVER_LAPACK_LIBRARY) !Set up solver through PETSc - CALL Petsc_KSPCreate(computationEnvironment%mpiCommunicator,LINEAR_DIRECT_SOLVER%KSP,ERR,ERROR,*999) + CALL Petsc_KSPCreate(computationEnvironment%mpiWorldCommunicator,LINEAR_DIRECT_SOLVER%KSP,ERR,ERROR,*999) !Set any further KSP options from the command line options CALL Petsc_KSPSetFromOptions(LINEAR_DIRECT_SOLVER%KSP,ERR,ERROR,*999) @@ -11060,7 +11060,7 @@ SUBROUTINE SOLVER_LINEAR_ITERATIVE_CREATE_FINISH(LINEAR_ITERATIVE_SOLVER,ERR,ERR CALL FlagError("Solver linking solve is not associated.",ERR,ERROR,*999) ENDIF ELSE - CALL Petsc_KSPCreate(computationEnvironment%mpiCommunicator,LINEAR_ITERATIVE_SOLVER%KSP,ERR,ERROR,*999) + CALL Petsc_KSPCreate(computationEnvironment%mpiWorldCommunicator,LINEAR_ITERATIVE_SOLVER%KSP,ERR,ERROR,*999) ENDIF !Set the iterative solver type SELECT CASE(LINEAR_ITERATIVE_SOLVER%ITERATIVE_SOLVER_TYPE) @@ -15893,7 +15893,7 @@ SUBROUTINE Solver_QuasiNewtonLinesearchCreateFinish(LINESEARCH_SOLVER,ERR,ERROR, ENDIF ENDDO !interface_idx !Create the PETSc SNES solver - CALL Petsc_SnesCreate(computationEnvironment%mpiCommunicator,LINESEARCH_SOLVER%snes,ERR,ERROR,*999) + CALL Petsc_SnesCreate(computationEnvironment%mpiWorldCommunicator,LINESEARCH_SOLVER%snes,ERR,ERROR,*999) !Set the nonlinear solver type to be a Quasi-Newton line search solver CALL Petsc_SnesSetType(LINESEARCH_SOLVER%snes,PETSC_SNESQN,ERR,ERROR,*999) !Following routines don't work for petsc version < 3.5. @@ -17075,7 +17075,7 @@ SUBROUTINE Solver_QuasiNewtonTrustRegionCreateFinish(TRUSTREGION_SOLVER,ERR,ERRO END SELECT CALL SOLVER_MATRICES_CREATE_FINISH(SOLVER_MATRICES,ERR,ERROR,*999) !Create the PETSc SNES solver - CALL Petsc_SnesCreate(computationEnvironment%mpiCommunicator,TRUSTREGION_SOLVER%snes,ERR,ERROR,*999) + CALL Petsc_SnesCreate(computationEnvironment%mpiWorldCommunicator,TRUSTREGION_SOLVER%snes,ERR,ERROR,*999) !Set the nonlinear solver type to be a Quasi-Newton trust region solver CALL Petsc_SnesSetType(TRUSTREGION_SOLVER%snes,PETSC_SNESNEWTONTR,ERR,ERROR,*999) !Set the nonlinear function @@ -18667,7 +18667,7 @@ SUBROUTINE SOLVER_NEWTON_LINESEARCH_CREATE_FINISH(LINESEARCH_SOLVER,ERR,ERROR,*) ENDIF ENDDO !interface_idx !Create the PETSc SNES solver - CALL Petsc_SnesCreate(computationEnvironment%mpiCommunicator,LINESEARCH_SOLVER%snes,ERR,ERROR,*999) + CALL Petsc_SnesCreate(computationEnvironment%mpiWorldCommunicator,LINESEARCH_SOLVER%snes,ERR,ERROR,*999) !Set the nonlinear solver type to be a Newton line search solver CALL Petsc_SnesSetType(LINESEARCH_SOLVER%snes,PETSC_SNESNEWTONLS,ERR,ERROR,*999) @@ -19832,7 +19832,7 @@ SUBROUTINE SOLVER_NEWTON_TRUSTREGION_CREATE_FINISH(TRUSTREGION_SOLVER,ERR,ERROR, END SELECT CALL SOLVER_MATRICES_CREATE_FINISH(SOLVER_MATRICES,ERR,ERROR,*999) !Create the PETSc SNES solver - CALL Petsc_SnesCreate(computationEnvironment%mpiCommunicator,TRUSTREGION_SOLVER%snes,ERR,ERROR,*999) + CALL Petsc_SnesCreate(computationEnvironment%mpiWorldCommunicator,TRUSTREGION_SOLVER%snes,ERR,ERROR,*999) !Set the nonlinear solver type to be a Newton trust region solver CALL Petsc_SnesSetType(TRUSTREGION_SOLVER%snes,PETSC_SNESNEWTONTR,ERR,ERROR,*999) !Set the solver as the SNES application context From 9c25f680c3d810f6fe5cc0f3de21d4dcd8fdef2d Mon Sep 17 00:00:00 2001 From: Chris Bradley Date: Wed, 27 Sep 2017 12:17:39 +1300 Subject: [PATCH 03/13] Initial code for work groups. --- bindings/c/tests/laplace.c | 4 +- cmake/Sources.cmake | 1 + src/Darcy_equations_routines.f90 | 3 +- src/Navier_Stokes_equations_routines.f90 | 72 +- src/analytic_analysis_routines.f90 | 90 +- src/boundary_condition_routines.f90 | 28 +- src/cmiss.f90 | 5 +- src/computation_access_routines.f90 | 620 ++++++++++ src/computation_routines.f90 | 1047 +++++++++-------- src/data_projection_routines.f90 | 34 +- src/distributed_matrix_vector.f90 | 80 +- src/domain_mappings.f90 | 8 +- src/equations_set_routines.f90 | 5 +- src/field_IO_routines.f90 | 95 +- src/field_routines.f90 | 12 +- src/fieldml_input_routines.f90 | 5 +- src/fieldml_output_routines.f90 | 4 +- src/finite_elasticity_routines.f90 | 10 +- src/generated_mesh_routines.f90 | 3 +- src/mesh_routines.f90 | 79 +- src/opencmiss_iron.f90 | 674 +++++++++-- src/reaction_diffusion_IO_routines.f90 | 7 +- src/reaction_diffusion_equation_routines.f90 | 4 +- src/region_routines.f90 | 2 +- src/solver_access_routines.f90 | 2 - src/solver_mapping_routines.f90 | 33 +- src/solver_routines.f90 | 29 +- tests/CellML/CellMLModelIntegration.f90 | 4 +- tests/CellML/Monodomain.f90 | 4 +- .../AnalyticNonlinearPoisson.f90 | 4 +- tests/ClassicalField/Laplace.f90 | 4 +- tests/FieldML_IO/cube.f90 | 4 +- tests/FieldML_IO/fieldml_io.f90 | 4 +- tests/FiniteElasticity/Cantilever.f90 | 4 +- tests/FiniteElasticity/SimpleShear.f90 | 4 +- tests/LinearElasticity/CantileverBeam.f90 | 4 +- tests/LinearElasticity/Extension.f90 | 4 +- 37 files changed, 2054 insertions(+), 942 deletions(-) create mode 100644 src/computation_access_routines.f90 diff --git a/bindings/c/tests/laplace.c b/bindings/c/tests/laplace.c index f7166def..8e9dd05b 100755 --- a/bindings/c/tests/laplace.c +++ b/bindings/c/tests/laplace.c @@ -127,8 +127,8 @@ int main() CHECK_ERROR("Initialising OpenCMISS-Iron"); Err = cmfe_ErrorHandlingModeSet(CMFE_ERRORS_TRAP_ERROR); - Err = cmfe_ComputationNumberOfNodesGet(&NumberOfComputationNodes); - Err = cmfe_ComputationNodeNumberGet(&ComputationNodeNumber); + Err = cmfe_ComputationEnvironment_NumberOfWorldNodesGet(&NumberOfComputationNodes); + Err = cmfe_ComputationEnvironment_WorldNodeNumberGet(&ComputationNodeNumber); /* Start the creation of a new RC coordinate system */ Err = cmfe_CoordinateSystem_Initialise(&CoordinateSystem); diff --git a/cmake/Sources.cmake b/cmake/Sources.cmake index ac10c9c2..a51cd7dd 100644 --- a/cmake/Sources.cmake +++ b/cmake/Sources.cmake @@ -37,6 +37,7 @@ set(IRON_Fortran_SRC cmiss_petsc.f90 cmiss.f90 computation_routines.f90 + computation_access_routines.f90 constants.f90 control_loop_routines.f90 control_loop_access_routines.f90 diff --git a/src/Darcy_equations_routines.f90 b/src/Darcy_equations_routines.f90 index d3e70fc0..bc06065c 100755 --- a/src/Darcy_equations_routines.f90 +++ b/src/Darcy_equations_routines.f90 @@ -52,6 +52,7 @@ MODULE DARCY_EQUATIONS_ROUTINES USE CONTROL_LOOP_ROUTINES USE ControlLoopAccessRoutines USE ComputationRoutines + USE ComputationAccessRoutines USE COORDINATE_ROUTINES USE DISTRIBUTED_MATRIX_VECTOR USE DOMAIN_MAPPINGS @@ -7266,7 +7267,7 @@ SUBROUTINE DARCY_EQUATION_MONITOR_CONVERGENCE(CONTROL_LOOP,SOLVER,err,error,*) NULLIFY(vectorMapping) NULLIFY(FIELD_VARIABLE) - COMPUTATION_NODE_NUMBER=ComputationEnvironment_NodeNumberGet(err,error) + CALL ComputationEnvironment_WorldNodeNumberGet(computationEnvironment,COMPUTATION_NODE_NUMBER,err,error,*999) WRITE(FILENAME,'("Darcy_",I3.3,".conv")') COMPUTATION_NODE_NUMBER FILEPATH = "./output/"//FILENAME OPEN(UNIT=23, FILE=CHAR(FILEPATH),STATUS='unknown',ACCESS='append') diff --git a/src/Navier_Stokes_equations_routines.f90 b/src/Navier_Stokes_equations_routines.f90 index 331aeb16..d22c0099 100644 --- a/src/Navier_Stokes_equations_routines.f90 +++ b/src/Navier_Stokes_equations_routines.f90 @@ -50,10 +50,11 @@ MODULE NAVIER_STOKES_EQUATIONS_ROUTINES USE BASIS_ROUTINES USE BOUNDARY_CONDITIONS_ROUTINES USE CHARACTERISTIC_EQUATION_ROUTINES - USE CmissMPI + USE CmissMPI USE CmissPetsc USE CmissPetscTypes USE ComputationRoutines + USE ComputationAccessRoutines USE Constants USE CONTROL_LOOP_ROUTINES USE COORDINATE_ROUTINES @@ -7769,7 +7770,8 @@ SUBROUTINE NavierStokes_PreSolveUpdateBoundaryConditions(SOLVER,err,error,*) INQUIRE(FILE=inputFile, EXIST=importDataFromFile) IF(importDataFromFile) THEN !Read fitted data from input file (if exists) - computationNode = ComputationEnvironment_NodeNumberGet(ERR,ERROR) + CALL ComputationEnvironment_WorldNodeNumberGet(computationEnvironment,computationNode, & + & err,error,*999) IF(computationNode==0) THEN CALL WRITE_STRING(GENERAL_OUTPUT_TYPE,"Updating independent field and boundary nodes from " & & //inputFile,ERR,ERROR,*999) @@ -12561,7 +12563,7 @@ SUBROUTINE NavierStokes_CalculateBoundaryFlux(equationsSet,coupledEquationsSet,i INTEGER(INTG) :: normalComponentIdx INTEGER(INTG) :: boundaryID,numberOfBoundaries,boundaryType,coupledNodeNumber,numberOfGlobalBoundaries INTEGER(INTG) :: MPI_IERROR,numberOfWorldComputationNodes - INTEGER(INTG) :: i,j,computationNode + INTEGER(INTG) :: i,j,computationNode,worldCommunicator REAL(DP) :: gaussWeight, normalProjection,elementNormal(3) REAL(DP) :: normalDifference,normalTolerance REAL(DP) :: courant,maxCourant,toleranceCourant @@ -12881,22 +12883,21 @@ SUBROUTINE NavierStokes_CalculateBoundaryFlux(equationsSet,coupledEquationsSet,i globalBoundaryArea = 0.0_DP globalBoundaryPressure = 0.0_DP globalBoundaryNormalStress = 0.0_DP - numberOfWorldComputationNodes=computationEnvironment%numberOfWorldComputationNodes + CALL ComputationEnvironment_NumberOfWorldNodesGet(computationEnvironment,numberOfWorldComputationNodes,err,error,*999) + CALL ComputationEnvironment_WorldCommunicatorGet(computationEnvironment,worldCommunicator,err,error,*999) IF(numberOfWorldComputationNodes>1) THEN !use mpi - CALL MPI_ALLREDUCE(localBoundaryFlux,globalBoundaryFlux,10,MPI_DOUBLE_PRECISION,MPI_SUM, & - & computationEnvironment%mpiWorldCommunicator,MPI_IERROR) + CALL MPI_ALLREDUCE(localBoundaryFlux,globalBoundaryFlux,10,MPI_DOUBLE_PRECISION,MPI_SUM,worldCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ALLREDUCE",MPI_IERROR,err,error,*999) - CALL MPI_ALLREDUCE(localBoundaryArea,globalBoundaryArea,10,MPI_DOUBLE_PRECISION,MPI_SUM, & - & computationEnvironment%mpiWorldCommunicator,MPI_IERROR) + CALL MPI_ALLREDUCE(localBoundaryArea,globalBoundaryArea,10,MPI_DOUBLE_PRECISION,MPI_SUM,worldCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ALLREDUCE",MPI_IERROR,ERR,ERROR,*999) CALL MPI_ALLREDUCE(localBoundaryNormalStress,globalBoundaryNormalStress,10,MPI_DOUBLE_PRECISION,MPI_SUM, & - & computationEnvironment%mpiWorldCommunicator,MPI_IERROR) + & worldCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ALLREDUCE",MPI_IERROR,ERR,ERROR,*999) CALL MPI_ALLREDUCE(localBoundaryPressure,globalBoundaryPressure,10,MPI_DOUBLE_PRECISION,MPI_SUM, & - & computationEnvironment%mpiWorldCommunicator,MPI_IERROR) + & worldCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ALLREDUCE",MPI_IERROR,ERR,ERROR,*999) CALL MPI_ALLREDUCE(numberOfBoundaries,numberOfGlobalBoundaries,1,MPI_INTEGER,MPI_MAX, & - & computationEnvironment%mpiWorldCommunicator,MPI_IERROR) + & worldCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ALLREDUCE",MPI_IERROR,ERR,ERROR,*999) ELSE numberOfGlobalBoundaries = numberOfBoundaries @@ -12914,7 +12915,7 @@ SUBROUTINE NavierStokes_CalculateBoundaryFlux(equationsSet,coupledEquationsSet,i END DO DO boundaryID=2,numberOfGlobalBoundaries IF(globalBoundaryArea(boundaryID) > ZERO_TOLERANCE) THEN - computationNode = ComputationEnvironment_NodeNumberGet(ERR,ERROR) + CALL ComputationEnvironment_WorldNodeNumberGet(computationEnvironment,computationNode,err,error,*999) IF(computationNode==0) THEN CALL WriteStringTwoValue(DIAGNOSTIC_OUTPUT_TYPE,"3D boundary ",boundaryID," flow: ", & & globalBoundaryFlux(boundaryID),err,error,*999) @@ -13182,8 +13183,7 @@ SUBROUTINE NavierStokes_CalculateBoundaryFlux(equationsSet,coupledEquationsSet,i IF(numberOfWorldComputationNodes>1) THEN !use mpi ALLOCATE(globalConverged(numberOfWorldComputationNodes),STAT=ERR) IF(ERR/=0) CALL FlagError("Could not allocate global convergence check array.",ERR,ERROR,*999) - CALL MPI_ALLGATHER(convergedFlag,1,MPI_LOGICAL,globalConverged,1,MPI_LOGICAL, & - & computationEnvironment%mpiWorldCommunicator,MPI_IERROR) + CALL MPI_ALLGATHER(convergedFlag,1,MPI_LOGICAL,globalConverged,1,MPI_LOGICAL,worldCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ALLGATHER",MPI_IERROR,ERR,ERROR,*999) IF(ALL(globalConverged)) THEN convergedFlag = .TRUE. @@ -13253,7 +13253,7 @@ SUBROUTINE NavierStokes_Couple1D0D(controlLoop,solver,err,error,*) TYPE(VARYING_STRING) :: localError INTEGER(INTG) :: nodeNumber,nodeIdx,derivativeIdx,versionIdx,componentIdx,numberOfLocalNodes1D INTEGER(INTG) :: solver1dNavierStokesNumber,solverNumber,MPI_IERROR,timestep,iteration - INTEGER(INTG) :: boundaryNumber,numberOfBoundaries,numberOfWorldComputationNodes + INTEGER(INTG) :: boundaryNumber,numberOfBoundaries,numberOfWorldComputationNodes,worldCommunicator INTEGER(INTG) :: dependentDof,boundaryConditionType REAL(DP) :: A0_PARAM,E_PARAM,H_PARAM,beta,pCellML,normalWave(2) REAL(DP) :: qPrevious,pPrevious,aPrevious,q1d,a1d,qError,aError,couplingTolerance @@ -13475,13 +13475,13 @@ SUBROUTINE NavierStokes_Couple1D0D(controlLoop,solver,err,error,*) localConverged = .FALSE. END IF ! Need to check that boundaries have converged globally (on all domains) if this is a parallel problem - numberOfWorldComputationNodes=computationEnvironment%numberOfWorldComputationNodes + CALL ComputationEnvironment_NumberOfWorldNodesGet(computationEnvironment,numberOfWorldComputationNodes,err,error,*999) + CALL ComputationEnvironment_WorldCommunicatorGet(computationEnvironment,worldCommunicator,err,error,*999) IF(numberOfWorldComputationNodes>1) THEN !use mpi !allocate array for mpi communication ALLOCATE(globalConverged(numberOfWorldComputationNodes),STAT=ERR) IF(ERR/=0) CALL FlagError("Could not allocate global convergence check array.",ERR,ERROR,*999) - CALL MPI_ALLGATHER(localConverged,1,MPI_LOGICAL,globalConverged,1,MPI_LOGICAL, & - & computationEnvironment%mpiWorldCommunicator,MPI_IERROR) + CALL MPI_ALLGATHER(localConverged,1,MPI_LOGICAL,globalConverged,1,MPI_LOGICAL,worldCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ALLGATHER",MPI_IERROR,err,error,*999) IF(ALL(globalConverged)) THEN !CALL WRITE_STRING_VALUE(DIAGNOSTIC_OUTPUT_TYPE,"1D/0D coupling converged; # iterations: ", & @@ -13545,7 +13545,7 @@ SUBROUTINE NavierStokes_Couple3D1D(controlLoop,err,error,*) INTEGER(INTG) :: nodeNumber,nodeIdx,derivativeIdx,versionIdx,componentIdx,numberOfLocalNodes1D INTEGER(INTG) :: solver1dNavierStokesNumber,MPI_IERROR,timestep,iteration INTEGER(INTG) :: boundaryNumber,boundaryType1D,numberOfBoundaries,numberOfWorldComputationNodes - INTEGER(INTG) :: solver3dNavierStokesNumber,userNodeNumber,localDof,globalDof,computationNode + INTEGER(INTG) :: solver3dNavierStokesNumber,userNodeNumber,localDof,globalDof,computationNode,worldCommunicator REAL(DP) :: normalWave(2) REAL(DP) :: flow1D,stress1D,flow1DPrevious,stress1DPrevious,flow3D,stress3D,flowError,stressError REAL(DP) :: maxStressError,maxFlowError,flowTolerance,stressTolerance,absoluteCouplingTolerance @@ -13764,20 +13764,20 @@ SUBROUTINE NavierStokes_Couple3D1D(controlLoop,err,error,*) localConverged = .TRUE. END IF ! Need to check that boundaries have converged globally (on all domains) if this is a MPI problem - numberOfWorldComputationNodes=computationEnvironment%numberOfWorldComputationNodes + CALL ComputationEnvironment_NumberOfWorldNodesGet(computationEnvironment,numberOfWorldComputationNodes,err,error,*999) + CALL ComputationEnvironment_WorldCommunicatorGet(computationEnvironment,worldCommunicator,err,error,*999) IF(numberOfWorldComputationNodes>1) THEN !use mpi !allocate array for mpi communication IF(ERR/=0) CALL FlagError("Could not allocate global convergence check array.",ERR,ERROR,*999) - CALL MPI_ALLREDUCE(localConverged,globalConverged,1,MPI_LOGICAL,MPI_LAND, & - & computationEnvironment%mpiWorldCommunicator,MPI_IERROR) + CALL MPI_ALLREDUCE(localConverged,globalConverged,1,MPI_LOGICAL,MPI_LAND,worldCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ALLREDUCE",MPI_IERROR,ERR,ERROR,*999) IF(globalConverged) THEN CALL WRITE_STRING_VALUE(DIAGNOSTIC_OUTPUT_TYPE,"3D/1D coupling converged; # iterations: ", & & iteration,err,error,*999) iterativeLoop%CONTINUE_LOOP=.FALSE. ELSE - computationNode = ComputationEnvironment_NodeNumberGet(ERR,ERROR) + CALL ComputationEnvironment_WorldNodeNumberGet(computationEnvironment,computationNode,err,error,*999) CALL WriteStringTwoValue(DIAGNOSTIC_OUTPUT_TYPE,"Rank ",computationNode," 3D/1D max flow error: ", & & maxFlowError,err,error,*999) CALL WriteStringTwoValue(DIAGNOSTIC_OUTPUT_TYPE,"Rank ",computationNode," 3D/1D max stress error: ", & @@ -13846,7 +13846,7 @@ SUBROUTINE NavierStokes_CoupleCharacteristics(controlLoop,solver,err,error,*) INTEGER(INTG) :: nodeNumber,nodeIdx,derivativeIdx,versionIdx,componentIdx,i INTEGER(INTG) :: solver1dNavierStokesNumber,solverNumber INTEGER(INTG) :: branchNumber,numberOfBranches,numberOfWorldComputationNodes,numberOfVersions - INTEGER(INTG) :: MPI_IERROR,timestep,iteration,outputIteration + INTEGER(INTG) :: MPI_IERROR,timestep,iteration,outputIteration,worldCommunicator REAL(DP) :: couplingTolerance,l2ErrorW(30),wPrevious(2,7),wNavierStokes(2,7),wCharacteristic(2,7),wError(2,7) REAL(DP) :: l2ErrorQ(100),qCharacteristic(7),qNavierStokes(7),wNext(2,7) REAL(DP) :: totalErrorWPrevious,startTime,stopTime,currentTime,timeIncrement @@ -14056,13 +14056,13 @@ SUBROUTINE NavierStokes_CoupleCharacteristics(controlLoop,solver,err,error,*) localConverged = .FALSE. END IF ! Need to check that boundaries have converged globally (on all domains) if this is a parallel problem - numberOfWorldComputationNodes=computationEnvironment%numberOfWorldComputationNodes + CALL ComputationEnvironment_NumberOfWorldNodesGet(computationEnvironment,numberOfWorldComputationNodes,err,error,*999) + CALL ComputationEnvironment_WorldCommunicatorGet(computationEnvironment,worldCommunicator,err,error,*999) IF(numberOfWorldComputationNodes>1) THEN !use mpi !allocate array for mpi communication ALLOCATE(globalConverged(numberOfWorldComputationNodes),STAT=ERR) IF(ERR/=0) CALL FlagError("Could not allocate global convergence check array.",ERR,ERROR,*999) - CALL MPI_ALLGATHER(localConverged,1,MPI_LOGICAL,globalConverged,1,MPI_LOGICAL, & - & computationEnvironment%mpiWorldCommunicator,MPI_IERROR) + CALL MPI_ALLGATHER(localConverged,1,MPI_LOGICAL,globalConverged,1,MPI_LOGICAL,worldCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ALLGATHER",MPI_IERROR,err,error,*999) IF(ALL(globalConverged)) THEN !CALL WRITE_STRING_VALUE(DIAGNOSTIC_OUTPUT_TYPE,"Navier-Stokes/Characteristic converged; # iterations: ", & @@ -15022,7 +15022,7 @@ SUBROUTINE NavierStokes_CalculateBoundaryFlux3D0D(equationsSet,err,error,*) INTEGER(INTG) :: faceNodeDerivativeIdx, meshComponentNumber INTEGER(INTG) :: boundaryID,numberOfBoundaries,boundaryType,coupledNodeNumber,numberOfGlobalBoundaries INTEGER(INTG) :: MPI_IERROR,numberOfWorldComputationNodes - INTEGER(INTG) :: computationNode,xiDirection(3),orientation + INTEGER(INTG) :: computationNode,xiDirection(3),orientation,worldCommunicator REAL(DP) :: gaussWeight, elementNormal(3) REAL(DP) :: normalDifference,normalTolerance REAL(DP) :: courant,maxCourant,toleranceCourant,boundaryValueTemp @@ -15254,19 +15254,20 @@ SUBROUTINE NavierStokes_CalculateBoundaryFlux3D0D(equationsSet,err,error,*) globalBoundaryFlux = 0.0_DP globalBoundaryArea = 0.0_DP globalBoundaryPressure = 0.0_DP - numberOfWorldComputationNodes=computationEnvironment%numberOfWorldComputationNodes + CALL ComputationEnvironment_NumberOfWorldNodesGet(computationEnvironment,numberOfWorldComputationNodes,err,error,*999) + CALL ComputationEnvironment_WorldCommunicatorGet(computationEnvironment,worldCommunicator,err,error,*999) IF(numberOfWorldComputationNodes>1) THEN !use mpi CALL MPI_ALLREDUCE(localBoundaryFlux,globalBoundaryFlux,10,MPI_DOUBLE_PRECISION,MPI_SUM, & - & computationEnvironment%mpiWorldCommunicator,MPI_IERROR) + & worldCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ALLREDUCE",MPI_IERROR,ERR,ERROR,*999) CALL MPI_ALLREDUCE(localBoundaryArea,globalBoundaryArea,10,MPI_DOUBLE_PRECISION,MPI_SUM, & - & computationEnvironment%mpiWorldCommunicator,MPI_IERROR) + & worldCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ALLREDUCE",MPI_IERROR,ERR,ERROR,*999) CALL MPI_ALLREDUCE(localBoundaryPressure,globalBoundaryPressure,10,MPI_DOUBLE_PRECISION,MPI_SUM, & - & computationEnvironment%mpiWorldCommunicator,MPI_IERROR) + & worldCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ALLREDUCE",MPI_IERROR,ERR,ERROR,*999) CALL MPI_ALLREDUCE(numberOfBoundaries,numberOfGlobalBoundaries,1,MPI_INTEGER,MPI_MAX, & - & computationEnvironment%mpiWorldCommunicator,MPI_IERROR) + & worldCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ALLREDUCE",MPI_IERROR,ERR,ERROR,*999) ELSE numberOfGlobalBoundaries = numberOfBoundaries @@ -15282,7 +15283,7 @@ SUBROUTINE NavierStokes_CalculateBoundaryFlux3D0D(equationsSet,err,error,*) END DO DO boundaryID=2,numberOfGlobalBoundaries IF(globalBoundaryArea(boundaryID) > ZERO_TOLERANCE) THEN - computationNode = ComputationEnvironment_NodeNumberGet(ERR,ERROR) + CALL ComputationEnvironment_WorldNodeNumberGet(computationEnvironment,computationNode,err,error,*999) IF(computationNode==0) THEN CALL WriteStringTwoValue(DIAGNOSTIC_OUTPUT_TYPE,"3D boundary ",boundaryID," flow: ", & & globalBoundaryFlux(boundaryID),err,error,*999) @@ -15413,8 +15414,7 @@ SUBROUTINE NavierStokes_CalculateBoundaryFlux3D0D(equationsSet,err,error,*) IF(numberOfWorldComputationNodes>1) THEN !use mpi ALLOCATE(globalConverged(numberOfWorldComputationNodes),STAT=ERR) IF(ERR/=0) CALL FlagError("Could not allocate global convergence check array.",ERR,ERROR,*999) - CALL MPI_ALLGATHER(convergedFlag,1,MPI_LOGICAL,globalConverged,1,MPI_LOGICAL, & - & computationEnvironment%mpiWorldCommunicator,MPI_IERROR) + CALL MPI_ALLGATHER(convergedFlag,1,MPI_LOGICAL,globalConverged,1,MPI_LOGICAL,worldCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ALLGATHER",MPI_IERROR,ERR,ERROR,*999) IF(ALL(globalConverged)) THEN convergedFlag = .TRUE. diff --git a/src/analytic_analysis_routines.f90 b/src/analytic_analysis_routines.f90 index 2e3db391..2d3095f0 100755 --- a/src/analytic_analysis_routines.f90 +++ b/src/analytic_analysis_routines.f90 @@ -47,6 +47,7 @@ MODULE ANALYTIC_ANALYSIS_ROUTINES USE BASIS_ROUTINES USE CmissMPI USE ComputationRoutines + USE ComputationAccessRoutines USE CONSTANTS USE FIELD_ROUTINES USE FieldAccessRoutines @@ -107,7 +108,7 @@ MODULE ANALYTIC_ANALYSIS_ROUTINES CONTAINS ! - !================================================================================================================================ + !================================================================================================================================= ! !>Output the analytic error analysis for a dependent field compared to the analytic values parameter set. \see OPENCMISS::CMISSAnalyticAnalytisOutput @@ -120,7 +121,7 @@ SUBROUTINE AnalyticAnalysis_Output(FIELD,FILENAME,ERR,ERROR,*) TYPE(VARYING_STRING), INTENT(OUT) :: ERROR !=1) THEN -!!TODO \todo have more general ascii file mechanism - IF(computationEnvironment%numberOfWorldComputationNodes>1) THEN - WRITE(FILE_NAME,'(A,".opanal.",I0)') FILENAME(1:LEN_TRIM(FILENAME)),computationEnvironment% & - & myWorldComputationNodeNumber - ELSE - FILE_NAME=FILENAME(1:LEN_TRIM(FILENAME))//".opanal" - ENDIF - OUTPUT_ID=IO1_FILE_UNIT - OPEN(UNIT=OUTPUT_ID,FILE=FILE_NAME(1:LEN_TRIM(FILE_NAME)),STATUS="REPLACE",FORM="FORMATTED",IOSTAT=ERR) - IF(ERR/=0) CALL FlagError("Error opening analysis output file.",ERR,ERROR,*999) - ELSE - OUTPUT_ID=GENERAL_OUTPUT_TYPE - ENDIF DECOMPOSITION=>FIELD%DECOMPOSITION IF(ASSOCIATED(DECOMPOSITION)) THEN + CALL ComputationEnvironment_NumberOfWorldNodesGet(computationEnvironment,numberOfWorldComputationNodes,err,error,*999) + CALL ComputationEnvironment_WorldNodeNumberGet(computationEnvironment,myWorldComputationNodeNumber,err,error,*999) + CALL ComputationEnvironment_WorldCommunicatorGet(computationEnvironment,worldCommunicator,err,error,*999) DECOMPOSITION_TOPOLOGY=>DECOMPOSITION%TOPOLOGY IF(ASSOCIATED(DECOMPOSITION_TOPOLOGY)) THEN + IF(LEN_TRIM(FILENAME)>=1) THEN +!!TODO \todo have more general ascii file mechanism + IF(numberOfWorldComputationNodes>1) THEN + WRITE(FILE_NAME,'(A,".opanal.",I0)') FILENAME(1:LEN_TRIM(FILENAME)),myWorldComputationNodeNumber + ELSE + FILE_NAME=FILENAME(1:LEN_TRIM(FILENAME))//".opanal" + ENDIF + OUTPUT_ID=IO1_FILE_UNIT + OPEN(UNIT=OUTPUT_ID,FILE=FILE_NAME(1:LEN_TRIM(FILE_NAME)),STATUS="REPLACE",FORM="FORMATTED",IOSTAT=ERR) + IF(ERR/=0) CALL FlagError("Error opening analysis output file.",ERR,ERROR,*999) + ELSE + OUTPUT_ID=GENERAL_OUTPUT_TYPE + ENDIF CALL WRITE_STRING(OUTPUT_ID,"Analytic error analysis:",ERR,ERROR,*999) CALL WRITE_STRING(OUTPUT_ID,"",ERR,ERROR,*999) LOCAL_STRING="Field "//TRIM(NUMBER_TO_VSTRING(FIELD%USER_NUMBER,"*",ERR,ERROR))//" : "//FIELD%LABEL @@ -270,7 +273,7 @@ SUBROUTINE AnalyticAnalysis_Output(FIELD,FILENAME,ERR,ERROR,*) !Output RMS errors CALL WRITE_STRING(OUTPUT_ID,"",ERR,ERROR,*999) IF(NUMBER(1)>0) THEN - IF(computationEnvironment%numberOfWorldComputationNodes>1) THEN + IF(numberOfWorldComputationNodes>1) THEN !Local elements only CALL WRITE_STRING(OUTPUT_ID,"Local RMS errors:",ERR,ERROR,*999) LOCAL_STRING= & @@ -293,17 +296,16 @@ SUBROUTINE AnalyticAnalysis_Output(FIELD,FILENAME,ERR,ERROR,*) & ERR,ERROR,*999) !Global RMS values !Collect the values across the ranks - CALL MPI_ALLREDUCE(MPI_IN_PLACE,NUMBER,1,MPI_INTEGER,MPI_SUM, & - & computationEnvironment%mpiWorldCommunicator,MPI_IERROR) + CALL MPI_ALLREDUCE(MPI_IN_PLACE,NUMBER,1,MPI_INTEGER,MPI_SUM,worldCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ALLREDUCE",MPI_IERROR,ERR,ERROR,*999) CALL MPI_ALLREDUCE(MPI_IN_PLACE,RMS_ERROR_PER,1,MPI_DOUBLE_PRECISION,MPI_SUM, & - & computationEnvironment%mpiWorldCommunicator,MPI_IERROR) + & worldCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ALLREDUCE",MPI_IERROR,ERR,ERROR,*999) CALL MPI_ALLREDUCE(MPI_IN_PLACE,RMS_ERROR_ABS,1,MPI_DOUBLE_PRECISION,MPI_SUM, & - & computationEnvironment%mpiWorldCommunicator,MPI_IERROR) + & worldCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ALLREDUCE",MPI_IERROR,ERR,ERROR,*999) CALL MPI_ALLREDUCE(MPI_IN_PLACE,RMS_ERROR_REL,1,MPI_DOUBLE_PRECISION,MPI_SUM, & - & computationEnvironment%mpiWorldCommunicator,MPI_IERROR) + & worldCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ALLREDUCE",MPI_IERROR,ERR,ERROR,*999) CALL WRITE_STRING(OUTPUT_ID,"Global RMS errors:",ERR,ERROR,*999) LOCAL_STRING= & @@ -400,7 +402,7 @@ SUBROUTINE AnalyticAnalysis_Output(FIELD,FILENAME,ERR,ERROR,*) ENDDO !node_idx !Output RMS errors CALL WRITE_STRING(OUTPUT_ID,"",ERR,ERROR,*999) - IF(computationEnvironment%numberOfWorldComputationNodes>1) THEN + IF(numberOfWorldComputationNodes>1) THEN IF(ANY(NUMBER>0)) THEN !Local nodes only CALL WRITE_STRING(OUTPUT_ID,"Local RMS errors:",ERR,ERROR,*999) @@ -437,17 +439,16 @@ SUBROUTINE AnalyticAnalysis_Output(FIELD,FILENAME,ERR,ERROR,*) ENDDO !deriv_idx !Global RMS values !Collect the values across the ranks - CALL MPI_ALLREDUCE(MPI_IN_PLACE,NUMBER,8,MPI_INTEGER,MPI_SUM, & - & computationEnvironment%mpiWorldCommunicator,MPI_IERROR) + CALL MPI_ALLREDUCE(MPI_IN_PLACE,NUMBER,8,MPI_INTEGER,MPI_SUM,worldCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ALLREDUCE",MPI_IERROR,ERR,ERROR,*999) CALL MPI_ALLREDUCE(MPI_IN_PLACE,RMS_ERROR_PER,8,MPI_DOUBLE_PRECISION,MPI_SUM, & - & computationEnvironment%mpiWorldCommunicator,MPI_IERROR) + & worldCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ALLREDUCE",MPI_IERROR,ERR,ERROR,*999) CALL MPI_ALLREDUCE(MPI_IN_PLACE,RMS_ERROR_ABS,8,MPI_DOUBLE_PRECISION,MPI_SUM, & - & computationEnvironment%mpiWorldCommunicator,MPI_IERROR) + & worldCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ALLREDUCE",MPI_IERROR,ERR,ERROR,*999) CALL MPI_ALLREDUCE(MPI_IN_PLACE,RMS_ERROR_REL,8,MPI_DOUBLE_PRECISION,MPI_SUM, & - & computationEnvironment%mpiWorldCommunicator,MPI_IERROR) + & worldCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ALLREDUCE",MPI_IERROR,ERR,ERROR,*999) CALL WRITE_STRING(OUTPUT_ID,"Global RMS errors:",ERR,ERROR,*999) LOCAL_STRING= & @@ -517,7 +518,7 @@ SUBROUTINE AnalyticAnalysis_Output(FIELD,FILENAME,ERR,ERROR,*) ALLOCATE(GHOST_INTEGRAL_ERRORS(6,FIELD_VARIABLE%NUMBER_OF_COMPONENTS),STAT=ERR) IF(ERR/=0) CALL FlagError("Could not allocate ghost integral errors.",ERR,ERROR,*999) CALL ANALYTIC_ANALYSIS_INTEGRAL_ERRORS(FIELD_VARIABLE,INTEGRAL_ERRORS,GHOST_INTEGRAL_ERRORS,ERR,ERROR,*999) - IF(computationEnvironment%numberOfWorldComputationNodes>1) THEN + IF(numberOfWorldComputationNodes>1) THEN CALL WRITE_STRING(OUTPUT_ID,"Local Integral errors:",ERR,ERROR,*999) LOCAL_STRING="Component# Numerical Analytic % error Absolute err Relative err" CALL WRITE_STRING(OUTPUT_ID,LOCAL_STRING,ERR,ERROR,*999) @@ -590,7 +591,7 @@ SUBROUTINE AnalyticAnalysis_Output(FIELD,FILENAME,ERR,ERROR,*) ENDDO !component_idx !Collect the values across the ranks CALL MPI_ALLREDUCE(MPI_IN_PLACE,INTEGRAL_ERRORS,6*FIELD_VARIABLE%NUMBER_OF_COMPONENTS,MPI_DOUBLE_PRECISION, & - & MPI_SUM,computationEnvironment%mpiWorldCommunicator,MPI_IERROR) + & MPI_SUM,worldCommunicator,MPI_IERROR) CALL WRITE_STRING(OUTPUT_ID,"Global Integral errors:",ERR,ERROR,*999) LOCAL_STRING="Component# Numerical Analytic % error Absolute err Relative err" CALL WRITE_STRING(OUTPUT_ID,LOCAL_STRING,ERR,ERROR,*999) @@ -1648,7 +1649,8 @@ SUBROUTINE AnalyticAnalysis_RMSErrorGetNode(FIELD,VARIABLE_TYPE,COMPONENT_NUMBER TYPE(VARYING_STRING), INTENT(OUT) :: ERROR !FIELD%VARIABLE_TYPE_MAP(VARIABLE_TYPE)%PTR%COMPONENTS(COMPONENT_NUMBER)%DOMAIN%TOPOLOGY%NODES IF(ASSOCIATED(NODES_DOMAIN)) THEN NUMBER=0 @@ -1709,7 +1714,7 @@ SUBROUTINE AnalyticAnalysis_RMSErrorGetNode(FIELD,VARIABLE_TYPE,COMPONENT_NUMBER ENDDO !deriv_idx ENDDO !node_idx - IF(computationEnvironment%numberOfWorldComputationNodes>1) THEN + IF(numberOfWorldComputationNodes>1) THEN IF(ANY(NUMBER>0)) THEN DO deriv_idx=1,8 IF(NUMBER(deriv_idx)>0) THEN @@ -1719,15 +1724,14 @@ SUBROUTINE AnalyticAnalysis_RMSErrorGetNode(FIELD,VARIABLE_TYPE,COMPONENT_NUMBER DO deriv_idx=1,8 IF(NUMBER(deriv_idx)>0) THEN LOCAL_GHOST_RMS(deriv_idx)=SQRT((RMS_ERROR(deriv_idx)+GHOST_RMS_ERROR(deriv_idx))/(NUMBER(deriv_idx) & - & +GHOST_NUMBER(deriv_idx))) + & +GHOST_NUMBER(deriv_idx))) ENDIF ENDDO !deriv_idx !Global RMS values !Collect the values across the ranks - CALL MPI_ALLREDUCE(MPI_IN_PLACE,NUMBER,8,MPI_INTEGER,MPI_SUM,computationEnvironment%mpiWorldCommunicator,MPI_IERROR) + CALL MPI_ALLREDUCE(MPI_IN_PLACE,NUMBER,8,MPI_INTEGER,MPI_SUM,worldCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ALLREDUCE",MPI_IERROR,ERR,ERROR,*999) - CALL MPI_ALLREDUCE(MPI_IN_PLACE,RMS_ERROR,8,MPI_DOUBLE_PRECISION,MPI_SUM,computationEnvironment%mpiWorldCommunicator, & - & MPI_IERROR) + CALL MPI_ALLREDUCE(MPI_IN_PLACE,RMS_ERROR,8,MPI_DOUBLE_PRECISION,MPI_SUM,worldCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ALLREDUCE",MPI_IERROR,ERR,ERROR,*999) DO deriv_idx=1,8 IF(NUMBER(deriv_idx)>0) THEN @@ -1756,6 +1760,7 @@ SUBROUTINE AnalyticAnalysis_RMSErrorGetNode(FIELD,VARIABLE_TYPE,COMPONENT_NUMBER RETURN 999 ERRORSEXITS("AnalyticAnalysis_RMSErrorGetNode",ERR,ERROR) RETURN 1 + END SUBROUTINE AnalyticAnalysis_RMSErrorGetNode ! @@ -1778,7 +1783,7 @@ SUBROUTINE AnalyticAnalysis_RMSErrorGetElement(FIELD,VARIABLE_TYPE,COMPONENT_NUM TYPE(VARYING_STRING), INTENT(OUT) :: ERROR !FIELD%VARIABLE_TYPE_MAP(VARIABLE_TYPE)%PTR%COMPONENTS(COMPONENT_NUMBER)%DOMAIN ELEMENTS_DOMAIN=>DOMAIN%TOPOLOGY%ELEMENTS IF(ASSOCIATED(ELEMENTS_DOMAIN)) THEN @@ -1838,18 +1846,16 @@ SUBROUTINE AnalyticAnalysis_RMSErrorGetElement(FIELD,VARIABLE_TYPE,COMPONENT_NUM GHOST_RMS_ERROR=GHOST_RMS_ERROR+ERROR_VALUE*ERROR_VALUE ENDDO !element_idx IF(NUMBER>0) THEN - IF(computationEnvironment%numberOfWorldComputationNodes>1) THEN + IF(numberOfWorldComputationNodes>1) THEN !Local elements only LOCAL_RMS=SQRT(RMS_ERROR/NUMBER) !Local and ghost elements LOCAL_GHOST_RMS=SQRT((RMS_ERROR+GHOST_RMS_ERROR)/(NUMBER+GHOST_NUMBER)) !Global RMS values !Collect the values across the ranks - CALL MPI_ALLREDUCE(MPI_IN_PLACE,NUMBER,1,MPI_INTEGER,MPI_SUM, & - & computationEnvironment%mpiWorldCommunicator,MPI_IERROR) + CALL MPI_ALLREDUCE(MPI_IN_PLACE,NUMBER,1,MPI_INTEGER,MPI_SUM,worldCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ALLREDUCE",MPI_IERROR,ERR,ERROR,*999) - CALL MPI_ALLREDUCE(MPI_IN_PLACE,RMS_ERROR,1,MPI_DOUBLE_PRECISION,MPI_SUM, & - & computationEnvironment%mpiWorldCommunicator,MPI_IERROR) + CALL MPI_ALLREDUCE(MPI_IN_PLACE,RMS_ERROR,1,MPI_DOUBLE_PRECISION,MPI_SUM,worldCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ALLREDUCE",MPI_IERROR,ERR,ERROR,*999) GLOBAL_RMS=SQRT(RMS_ERROR/NUMBER) ENDIF diff --git a/src/boundary_condition_routines.f90 b/src/boundary_condition_routines.f90 index 069870f9..601b4d96 100755 --- a/src/boundary_condition_routines.f90 +++ b/src/boundary_condition_routines.f90 @@ -26,7 +26,7 @@ !> Auckland, the University of Oxford and King's College, London. !> All Rights Reserved. !> -!> Contributor(s): Chris Bradley +!> Contributor(s): Ting Yu, Chris Bradley !> !> Alternatively, the contents of this file may be used under the terms of !> either the GNU General Public License Version 2 or later (the "GPL"), or @@ -48,6 +48,7 @@ MODULE BOUNDARY_CONDITIONS_ROUTINES USE BASIS_ROUTINES USE CmissMPI USE ComputationRoutines + USE ComputationAccessRoutines USE CONSTANTS USE COORDINATE_ROUTINES USE DISTRIBUTED_MATRIX_VECTOR @@ -192,7 +193,7 @@ SUBROUTINE BOUNDARY_CONDITIONS_CREATE_FINISH(BOUNDARY_CONDITIONS,ERR,ERROR,*) INTEGER(INTG) :: MPI_IERROR,SEND_COUNT,STORAGE_TYPE, NUMBER_OF_NON_ZEROS, NUMBER_OF_ROWS,COUNT INTEGER(INTG) :: variable_idx,dof_idx, equ_matrix_idx, dirichlet_idx, row_idx, DUMMY, LAST, DIRICHLET_DOF INTEGER(INTG) :: col_idx,equations_set_idx,parameterSetIdx - INTEGER(INTG) :: pressureIdx,neumannIdx + INTEGER(INTG) :: pressureIdx,neumannIdx,numberOfWorldComputationNodes,myWorldComputationNodeNumber,worldCommunicator INTEGER(INTG), POINTER :: ROW_INDICES(:), COLUMN_INDICES(:) TYPE(BOUNDARY_CONDITIONS_VARIABLE_TYPE), POINTER :: BOUNDARY_CONDITION_VARIABLE TYPE(DOMAIN_MAPPING_TYPE), POINTER :: VARIABLE_DOMAIN_MAPPING @@ -222,7 +223,10 @@ SUBROUTINE BOUNDARY_CONDITIONS_CREATE_FINISH(BOUNDARY_CONDITIONS,ERR,ERROR,*) CALL FlagError("Boundary conditions have already been finished.",ERR,ERROR,*999) ELSE IF(ALLOCATED(BOUNDARY_CONDITIONS%BOUNDARY_CONDITIONS_VARIABLES)) THEN - IF(computationEnvironment%numberOfWorldComputationNodes>0) THEN + CALL ComputationEnvironment_NumberOfWorldNodesGet(computationEnvironment,numberOfWorldComputationNodes,err,error,*999) + CALL ComputationEnvironment_WorldNodeNumberGet(computationEnvironment,myWorldComputationNodeNumber,err,error,*999) + CALL ComputationEnvironment_WorldCommunicatorGet(computationEnvironment,worldCommunicator,err,error,*999) + IF(numberOfWorldComputationNodes>0) THEN !Transfer all the boundary conditions to all the computation nodes. !\todo Look at this. DO variable_idx=1,BOUNDARY_CONDITIONS%NUMBER_OF_BOUNDARY_CONDITIONS_VARIABLES @@ -236,10 +240,10 @@ SUBROUTINE BOUNDARY_CONDITIONS_CREATE_FINISH(BOUNDARY_CONDITIONS,ERR,ERROR,*) !\todo This operation is a little expensive as we are doing an unnecessary sum across all the ranks in order to combin !\todo the data from each rank into all ranks. We will see how this goes for now. CALL MPI_ALLREDUCE(MPI_IN_PLACE,BOUNDARY_CONDITION_VARIABLE%DOF_TYPES, & - & SEND_COUNT,MPI_INTEGER,MPI_SUM,computationEnvironment%mpiWorldCommunicator,MPI_IERROR) + & SEND_COUNT,MPI_INTEGER,MPI_SUM,worldCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ALLREDUCE",MPI_IERROR,ERR,ERROR,*999) CALL MPI_ALLREDUCE(MPI_IN_PLACE,BOUNDARY_CONDITION_VARIABLE%CONDITION_TYPES, & - & SEND_COUNT,MPI_INTEGER,MPI_SUM,computationEnvironment%mpiWorldCommunicator,MPI_IERROR) + & SEND_COUNT,MPI_INTEGER,MPI_SUM,worldCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ALLREDUCE",MPI_IERROR,ERR,ERROR,*999) ELSE LOCAL_ERROR="Field variable domain mapping is not associated for variable type "// & @@ -249,10 +253,10 @@ SUBROUTINE BOUNDARY_CONDITIONS_CREATE_FINISH(BOUNDARY_CONDITIONS,ERR,ERROR,*) ! Update the total number of boundary condition types by summing across all nodes CALL MPI_ALLREDUCE(MPI_IN_PLACE,BOUNDARY_CONDITION_VARIABLE%DOF_COUNTS, & - & MAX_BOUNDARY_CONDITION_NUMBER,MPI_INTEGER,MPI_SUM,computationEnvironment%mpiWorldCommunicator,MPI_IERROR) + & MAX_BOUNDARY_CONDITION_NUMBER,MPI_INTEGER,MPI_SUM,worldCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ALLREDUCE",MPI_IERROR,ERR,ERROR,*999) CALL MPI_ALLREDUCE(MPI_IN_PLACE,BOUNDARY_CONDITION_VARIABLE%NUMBER_OF_DIRICHLET_CONDITIONS, & - & 1,MPI_INTEGER,MPI_SUM,computationEnvironment%mpiWorldCommunicator,MPI_IERROR) + & 1,MPI_INTEGER,MPI_SUM,worldCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ALLREDUCE",MPI_IERROR,ERR,ERROR,*999) ! Check that the boundary conditions set are appropriate for equations sets @@ -260,7 +264,7 @@ SUBROUTINE BOUNDARY_CONDITIONS_CREATE_FINISH(BOUNDARY_CONDITIONS,ERR,ERROR,*) !Make sure the required parameter sets are created on all computation nodes and begin updating them CALL MPI_ALLREDUCE(MPI_IN_PLACE,BOUNDARY_CONDITION_VARIABLE%parameterSetRequired, & - & FIELD_NUMBER_OF_SET_TYPES,MPI_LOGICAL,MPI_LOR,computationEnvironment%mpiWorldCommunicator,MPI_IERROR) + & FIELD_NUMBER_OF_SET_TYPES,MPI_LOGICAL,MPI_LOR,worldCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ALLREDUCE",MPI_IERROR,ERR,ERROR,*999) DO parameterSetIdx=1,FIELD_NUMBER_OF_SET_TYPES IF(BOUNDARY_CONDITION_VARIABLE%parameterSetRequired(parameterSetIdx)) THEN @@ -1141,7 +1145,7 @@ SUBROUTINE BOUNDARY_CONDITIONS_ADD_LOCAL_DOF1(BOUNDARY_CONDITIONS,FIELD,VARIABLE ENTERS("BOUNDARY_CONDITIONS_ADD_LOCAL_DOF1",ERR,ERROR,*999) - CALL BOUNDARY_CONDITIONS_ADD_LOCAL_DOFS(BOUNDARY_CONDITIONS,FIELD,VARIABLE_TYPE,(/DOF_INDEX/),(/CONDITION/),(/VALUE/), & + CALL BOUNDARY_CONDITIONS_ADD_LOCAL_DOFS(BOUNDARY_CONDITIONS,FIELD,VARIABLE_TYPE,[DOF_INDEX],[CONDITION],[VALUE], & & ERR,ERROR,*999) EXITS("BOUNDARY_CONDITIONS_ADD_LOCAL_DOF1") @@ -1335,7 +1339,7 @@ SUBROUTINE BOUNDARY_CONDITIONS_SET_LOCAL_DOF1(BOUNDARY_CONDITIONS,FIELD,VARIABLE ENTERS("BOUNDARY_CONDITIONS_SET_LOCAL_DOF1",ERR,ERROR,*999) - CALL BOUNDARY_CONDITIONS_SET_LOCAL_DOFS(BOUNDARY_CONDITIONS,FIELD,VARIABLE_TYPE,(/DOF_INDEX/),(/CONDITION/),(/VALUE/), & + CALL BOUNDARY_CONDITIONS_SET_LOCAL_DOFS(BOUNDARY_CONDITIONS,FIELD,VARIABLE_TYPE,[DOF_INDEX],[CONDITION],[VALUE], & & ERR,ERROR,*999) EXITS("BOUNDARY_CONDITIONS_SET_LOCAL_DOF1") @@ -2420,7 +2424,7 @@ SUBROUTINE BoundaryConditions_NeumannMatricesInitialise(boundaryConditionsVariab !Set up vector of Neumann point values CALL DISTRIBUTED_VECTOR_CREATE_START(pointDofMapping,boundaryConditionsNeumann%pointValues,err,error,*999) CALL DISTRIBUTED_VECTOR_CREATE_FINISH(boundaryConditionsNeumann%pointValues,err,error,*999) - myWorldComputationNodeNumber=ComputationEnvironment_NodeNumberGet(err,error) + CALL ComputationEnvironment_WorldNodeNumberGet(computationEnvironment,myWorldComputationNodeNumber,err,error,*999) !Set point values vector from boundary conditions field parameter set DO neumannIdx=1,numberOfPointDofs globalDof=boundaryConditionsNeumann%setDofs(neumannIdx) @@ -2592,7 +2596,7 @@ SUBROUTINE BoundaryConditions_NeumannIntegrate(rhsBoundaryConditions,err,error,* numberOfNeumann=rhsBoundaryConditions%DOF_COUNTS(BOUNDARY_CONDITION_NEUMANN_POINT) + & & rhsBoundaryConditions%DOF_COUNTS(BOUNDARY_CONDITION_NEUMANN_POINT_INCREMENTED) - myWorldComputationNodeNumber=ComputationEnvironment_NodeNumberGet(err,error) + CALL ComputationEnvironment_WorldNodeNumberGet(computationEnvironment,myWorldComputationNodeNumber,err,error,*999) ! Initialise field interpolation parameters for the geometric field, which are required for the ! face/line Jacobian and scale factors diff --git a/src/cmiss.f90 b/src/cmiss.f90 index b27691c2..2d56a3fe 100755 --- a/src/cmiss.f90 +++ b/src/cmiss.f90 @@ -55,6 +55,7 @@ MODULE Cmiss USE BaseRoutines USE BASIS_ROUTINES USE ComputationRoutines + USE ComputationAccessRoutines USE Constants USE COORDINATE_ROUTINES USE GENERATED_MESH_ROUTINES @@ -241,6 +242,7 @@ SUBROUTINE cmfe_Initialise_(worldRegion,err,error,*) INTEGER(INTG), INTENT(INOUT) :: err ! \file +!> \author Chris Bradley +!> \brief This module contains all computation access method routines. +!> +!> \section LICENSE +!> +!> Version: MPL 1.1/GPL 2.0/LGPL 2.1 +!> +!> The contents of this file are subject to the Mozilla Public License +!> Version 1.1 (the "License"); you may not use this file except in +!> compliance with the License. You may obtain a copy of the License at +!> http://www.mozilla.org/MPL/ +!> +!> Software distributed under the License is distributed on an "AS IS" +!> basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +!> License for the specific language governing rights and limitations +!> under the License. +!> +!> The Original Code is OpenCMISS +!> +!> The Initial Developer of the Original Code is University of Auckland, +!> Auckland, New Zealand, the University of Oxford, Oxford, United +!> Kingdom and King's College, London, United Kingdom. Portions created +!> by the University of Auckland, the University of Oxford and King's +!> College, London are Copyright (C) 2007-2010 by the University of +!> Auckland, the University of Oxford and King's College, London. +!> All Rights Reserved. +!> +!> Contributor(s): Chris Bradley +!> +!> Alternatively, the contents of this file may be used under the terms of +!> either the GNU General Public License Version 2 or later (the "GPL"), or +!> the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), +!> in which case the provisions of the GPL or the LGPL are applicable instead +!> of those above. If you wish to allow use of your version of this file only +!> under the terms of either the GPL or the LGPL, and not to allow others to +!> use your version of this file under the terms of the MPL, indicate your +!> decision by deleting the provisions above and replace them with the notice +!> and other provisions required by the GPL or the LGPL. If you do not delete +!> the provisions above, a recipient may use your version of this file under +!> the terms of any one of the MPL, the GPL or the LGPL. +!> + +!> This module contains all computation access method routines. +MODULE ComputationAccessRoutines + + USE BaseRoutines + USE Kinds +#ifndef NOMPIMOD + USE MPI +#endif + USE Strings + USE Types + +#include "macros.h" + + IMPLICIT NONE + + PRIVATE + +#ifdef NOMPIMOD +#include "mpif.h" +#endif + + !Module parameters + + !Module types + + !>pointer type to WorkGroupType + TYPE WorkGroupPtrType + TYPE(WorkGroupType), POINTER :: ptr + END TYPE WorkGroupPtrType + + !>Contains information on logical working groups + TYPE WorkGroupType + INTEGER(INTG) :: userNumber !Contains information on a cache heirarchy + TYPE ComputationCacheType + INTEGER(INTG) :: numberOfLevels !Contains information on a computation node containing a number of processors + TYPE ComputationNodeType + INTEGER(INTG) :: numberOfProcessors !Contains information on the MPI type to transfer information about a computation node + TYPE MPIComputationNodeType + INTEGER(INTG) :: mpiType !Contains information on the computation environment the program is running in. + TYPE ComputationEnvironmentType + INTEGER(INTG) :: mpiVersion !Gets the current world communicator. + SUBROUTINE ComputationEnvironment_WorldCommunicatorGet(computationEnvironment,worldCommunicator,err,error,*) + + !Argument Variables + TYPE(ComputationEnvironmentType), INTENT(IN) :: computationEnvironment !Returns the number/rank of the computation node in the world communicator + SUBROUTINE ComputationEnvironment_WorldNodeNumberGet(computationEnvironment,worldNodeNumber,err,error,*) + + !Argument Variables + TYPE(ComputationEnvironmentType), INTENT(IN) :: computationEnvironment !Gets the number of computation nodes in the world communicator. + SUBROUTINE ComputationEnvironment_NumberOfWorldNodesGet(computationEnvironment,numberOfWorldNodes,err,error,*) + + !Argument Variables + TYPE(ComputationEnvironmentType), INTENT(IN) :: computationEnvironment !Gets the world work group from a computational environment. + SUBROUTINE ComputationEnvironment_WorldWorkGroupGet(computationEnvironment,worldWorkGroup,err,error,*) + + !Argument variables + TYPE(ComputationEnvironmentType), INTENT(IN) :: computationEnvironment !computationEnvironment%worldWorkGroup + !Check world work group is associated. + IF(.NOT.ASSOCIATED(worldWorkGroup)) & + & CALL FlagError("World work group is not associated for the computation environment.",err,error,*999) + + EXITS("ComputationEnvironment_WorldWorkGroupGet") + RETURN +999 NULLIFY(worldWorkGroup) +998 ERRORSEXITS("ComputationEnvironment_WorldWorkGroupGet",err,error) + RETURN 1 + + END SUBROUTINE ComputationEnvironment_WorldWorkGroupGet + + ! + !================================================================================================================================ + ! + + !>Gets the group communicator from a work group. + SUBROUTINE WorkGroup_GroupCommunicatorGet(workGroup,groupCommunicator,err,error,*) + + !Argument variables + TYPE(WorkGroupType), POINTER, INTENT(IN) :: workGroup !Gets the number/rank of the computation node in the work group communicator + SUBROUTINE WorkGroup_GroupNodeNumberGet(workGroup,groupNodeNumber,err,error,*) + + !Argument Variables + TYPE(WorkGroupType), POINTER, INTENT(IN) :: workGroup !Returns the character label of a work group \see OpenCMISS::Iron::cmfe_WorkGroup_LabelGet + SUBROUTINE WorkGroup_LabelGetC(workGroup,label,err,error,*) + + !Argument Variables + TYPE(WorkGroupType), POINTER, INTENT(IN) :: workGroup !Returns the varying string label of a work group \see OpenCMISS::Iron::cmfe_WorkGroup_LabelGet + SUBROUTINE WorkGroup_LabelGetVS(workGroup,label,err,error,*) + + !Argument Variables + TYPE(WorkGroupType), POINTER, INTENT(IN) :: workGroup !Gets the number of computation nodes in the work group communicator. + SUBROUTINE WorkGroup_NumberOfGroupNodesGet(workGroup,numberOfGroupNodes,err,error,*) + + !Argument Variables + TYPE(WorkGroupType), POINTER, INTENT(IN) :: workGroup !Gets the parent work group from a work group. + SUBROUTINE WorkGroup_ParentWorkGroupGet(workGroup,parentWorkGroup,err,error,*) + + !Argument variables + TYPE(WorkGroupType), POINTER, INTENT(IN) :: workGroup !workGroup%parentWorkGroup + !Check parent work group is associated. + IF(.NOT.ASSOCIATED(parentWorkGroup)) THEN + localError="Parent work group is not associated for work group "// & + & TRIM(NumberToVString(workGroup%userNumber,"*",err,error))//"." + CALL FlagError(localError,err,error,*999) + ENDIF + + EXITS("WorkGroup_ParentWorkGroupGet") + RETURN +999 NULLIFY(parentWorkGroup) +998 ERRORSEXITS("WorkGroup_ParentWorkGroupGet",err,error) + RETURN 1 + + END SUBROUTINE WorkGroup_ParentWorkGroupGet + + ! + !================================================================================================================================ + ! + + !>Finds and returns a pointer to the work group with the given user number. If no work group with that number exists work group is left nullified. + SUBROUTINE WorkGroup_UserNumberFind(userNumber,computationEnvironment,workGroup,err,error,*) + + !Argument variables + INTEGER(INTG), INTENT(IN) :: userNumber !computationEnvironment%worldWorkGroup + IF(.NOT.ASSOCIATED(worldWorkGroup)) CALL FlagError("World work group is not associated.",err,error,*999) + + NULLIFY(workGroup) + IF(userNumber==0) THEN + workGroup=>worldWorkGroup + ELSE + CALL WorkGroup_UserNumberFindPtr(userNumber,worldWorkGroup,workGroup,err,error,*999) + ENDIF + + EXITS("WorkGroup_UserNumberFind") + RETURN +999 ERRORSEXITS("WorkGroup_UserNumberFind",err,error) + RETURN 1 + + END SUBROUTINE WorkGroup_UserNumberFind + + ! + !================================================================================================================================ + ! + + !>Finds and returns a pointer to the work group with the given user number starting from the given start work group and searching all sub-groups under the start work group. If no work group with that number exists work group is left nullified. + RECURSIVE SUBROUTINE WorkGroup_UserNumberFindPtr(userNumber,startWorkGroup,workGroup,err,error,*) + + !Argument variables + INTEGER(INTG), INTENT(IN) :: userNumber !startWorkGroup + ELSE + IF(ALLOCATED(startWorkGroup%subGroups)) THEN + DO workGroupIdx=1,startWorkGroup%numberOfSubGroups + CALL WorkGroup_UserNumberFindPtr(userNumber,startWorkGroup%subGroups(workGroupIdx)%ptr,workGroup,err,error,*999) + IF(ASSOCIATED(workGroup)) EXIT + ENDDO !workGroupIdx + ENDIF + ENDIF + + EXITS("WorkGroup_UserNumberFindPtr") + RETURN +999 ERRORSEXITS("WorkGroup_UserNumberFindPtr",err,error) + RETURN 1 + + END SUBROUTINE WorkGroup_UserNumberFindPtr + + ! + !================================================================================================================================ + ! + + !>Returns the user number for a region. + SUBROUTINE WorkGroup_UserNumberGet(workGroup,userNumber,err,error,*) + + !Argument variables + TYPE(WorkGroupType), POINTER, INTENT(IN) :: workGroup !Gets a sub work group from a work group. + SUBROUTINE WorkGroup_WorkSubGroupGet(workGroup,subGroupIdx,subWorkGroup,err,error,*) + + !Argument variables + TYPE(WorkGroupType), POINTER, INTENT(IN) :: workGroup !workGroup%numberOfSubGroups) THEN + localError="The specified sub group index of "//TRIM(NumberToVString(subGroupIdx,"*",err,error))// & + & " is invalid. The sub group index must be >=1 and <= "// & + & TRIM(NumberToVString(workGroup%numberOfSubGroups,"*",err,error))//"." + CALL FlagError(localError,err,error,*999) + ENDIF + + !Get the parent work group + subWorkGroup=>workGroup%subGroups(subGroupIdx)%ptr + !Check sub work group is associated. + IF(.NOT.ASSOCIATED(subWorkGroup)) THEN + localError="The sub work group is not associated for sub group index "// & + & TRIM(NumberToVString(subGroupIdx,"*",err,error))//" of work group "// & + & TRIM(NumberToVString(workGroup%userNumber,"*",err,error))//"." + CALL FlagError(localError,err,error,*999) + ENDIF + + EXITS("WorkGroup_WorkSubGroupGet") + RETURN +999 NULLIFY(subWorkGroup) +998 ERRORSEXITS("WorkGroup_WorkSubGroupGet",err,error) + RETURN 1 + + END SUBROUTINE WorkGroup_WorkSubGroupGet + + ! + !================================================================================================================================ + ! + +END MODULE ComputationAccessRoutines diff --git a/src/computation_routines.f90 b/src/computation_routines.f90 index f505edc5..33eed5c0 100755 --- a/src/computation_routines.f90 +++ b/src/computation_routines.f90 @@ -48,6 +48,7 @@ MODULE ComputationRoutines USE BaseRoutines USE CmissMPI USE CmissPetsc + USE ComputationAccessRoutines USE Constants USE Kinds #ifndef NOMPIMOD @@ -55,394 +56,47 @@ MODULE ComputationRoutines #endif USE INPUT_OUTPUT USE ISO_VARYING_STRING + USE Sorting USE Strings #include "macros.h" IMPLICIT NONE + PRIVATE + #ifdef NOMPIMOD #include "mpif.h" #endif - PRIVATE - !Module parameters !Module types - !>pointer type to ComputationWorkGroupType - TYPE :: ComputationWorkGroupPtrType - TYPE(ComputationWorkGroupType), POINTER :: ptr - END TYPE ComputationWorkGroupPtrType - - !>Contains information on logical working groups - TYPE :: ComputationWorkGroupType - LOGICAL :: workGroupFinished !Contains information on a cache heirarchy - TYPE ComputationCacheType - INTEGER(INTG) :: numberOfLevels !Contains information on a computation node containing a number of processors - TYPE ComputationNodeType - INTEGER(INTG) :: numberOfProcessors !Contains information on the MPI type to transfer information about a computation node - TYPE MPIComputationNodeType - INTEGER(INTG) :: mpiType !Contains information on the computation environment the program is running in. - TYPE ComputationEnvironmentType - INTEGER(INTG) :: mpiVersion !Finalise a work group and deallocate all memory - RECURSIVE SUBROUTINE Computation_WorkGroupFinalise(workGroup,err,error,*) + PUBLIC WorkGroup_CreateFinish,WorkGroup_CreateStart - !Argument Variables - TYPE(ComputationWorkGroupType),POINTER :: workGroup !Add the work sub-group to the parent group based on the computation requirements (called by user) - SUBROUTINE Computation_WorkGroupInitialise(workGroup,err,error,*) - - !Argument Variables - TYPE(ComputationWorkGroupType),POINTER, INTENT(OUT) :: workGroup !Add the work sub-group to the parent group based on the computation requirements (called by user) - SUBROUTINE Computation_WorkGroupSubGroupAdd(parentWorkGroup,numberOfComputationNodes,subWorkGroup,err,error,*) - - !Argument Variables - TYPE(ComputationWorkGroupType),POINTER, INTENT(INOUT) :: parentWorkGroup - TYPE(ComputationWorkGroupType),POINTER, INTENT(INOUT) :: subWorkGroup - INTEGER(INTG),INTENT(IN) :: numberOfComputationNodes - INTEGER(INTG), INTENT(OUT) :: err !parentWorkGroup%subGroups(I)%ptr - ENDDO - !subGroups(1:parentWorkGroup%numberOfSubGroups)=>parentWorkGroup%subGroups(:) - - IF(ALLOCATED(parentWorkGroup%subGroups)) THEN - DEALLOCATE(parentWorkGroup%subGroups) - ENDIF - subGroups(1+parentWorkGroup%numberOfSubGroups)%ptr=>newWorkGroup%ptr - ALLOCATE(parentWorkGroup%subGroups(SIZE(subGroups,1))) - DO I=1,SIZE(subGroups,1) - parentWorkGroup%subGroups(I)%ptr => subGroups(I)%ptr - ENDDO - !parentWorkGroup%subGroups(:) => subGroups(:) - - DEALLOCATE(subGroups) - parentWorkGroup%numberOfSubGroups = 1+parentWorkGroup%numberOfSubGroups - newWorkGroup%ptr%PARENT => parentWorkGroup - tmpParentWorkGroup => parentWorkGroup - DO WHILE(ASSOCIATED(tmpParentWorkGroup)) !Update the computation number of its ancestors - tmpParentWorkGroup%numberOfComputationNodes = tmpParentWorkGroup%numberOfComputationNodes & - & + newWorkGroup%ptr%numberOfComputationNodes - tmpParentWorkGroup => tmpParentWorkGroup%PARENT - ENDDO - ELSE !Top level group - CALL FlagError('parentWorkGroup is not associated, call COMPUTATION_WORK_GROUP_CREATE_START first',& - & err,error,*999) - ENDIF - subWorkGroup => newWorkGroup%ptr - - EXITS("Computation_WorkGroupSubGroupAdd") - RETURN -999 ERRORSEXITS("Computation_WorkGroupSubGroupAdd",err,error) - RETURN 1 - - END SUBROUTINE Computation_WorkGroupSubGroupAdd - - ! - !================================================================================================================================ - ! - - !>Start the creation of a work group - SUBROUTINE Computation_WorkGroupCreateStart(parentWorkGroup,numberOfComputationNodes,workGroup,err,error,*) - - !Argument Variables - TYPE(ComputationWorkGroupType), POINTER, INTENT(INOUT) :: parentWorkGroup !parentWorkGroup%numberOfAvailableRanks) THEN - localError="The requested number of computation nodes is invalid. The number of computation nodes must be > 0 and <= "// & - & TRIM(NumberToVString(parentWorkGroup%numberOfAvailableRanks,"*",err,error))//"." - CALL FlagError(localError,err,error,*999) - ENDIF - - CALL Computation_WorkGroupInitialise(workGroup,err,error,*999) - - EXITS("Computation_WorkGroupCreateStart") - RETURN -999 ERRORSEXITS("Computation_WorkGroupCreateStart",err,error) - RETURN 1 - - END SUBROUTINE Computation_WorkGroupCreateStart - - ! - !================================================================================================================================ - ! - - !>Generate computation environment for current level work group tree and all it's subgroups recursively - RECURSIVE SUBROUTINE Computation_WorkGroupGenerateCompEnviron(workGroup,availableRankList,err,error,*) - - !Argument Variables - TYPE(ComputationWorkGroupType),POINTER, INTENT(INOUT) :: workGroup - INTEGER(INTG), ALLOCATABLE, INTENT(INOUT) :: availableRankList(:) - INTEGER(INTG), INTENT(OUT) :: err !Generate the hierarchy computation environment based on work group tree - SUBROUTINE Computation_WorkGroupCreateFinish(worldWorkGroup,err,error,*) - - !Argument Variables - TYPE(ComputationWorkGroupType),POINTER,INTENT(INOUT) :: worldWorkGroup - INTEGER(INTG),INTENT(OUT) :: err ! computationEnvironment - worldWorkGroup%computationEnvironmentFinished = .TRUE. - - !generate the communicators for subgroups if any - ALLOCATE(availableRankList(worldWorkGroup%computationEnvironment%numberOfWorldComputationNodes)) - DO rankIdx=0,SIZE(availableRankList,1)-1 - availableRankList(rankIdx+1) = rankIdx - ENDDO !rankIdx - DO subGroupIdx=1,worldWorkGroup%numberOfSubGroups,1 - CALL Computation_WorkGroupGenerateCompEnviron(worldWorkGroup%subGroups(subGroupIdx)%ptr,availableRankList, & - & err,error,*999) - ENDDO !subGroupIdx - - EXITS("Computation_WorkGroupCreateFinish") - RETURN -999 ERRORSEXITS("Computation_WorkGroupCreateFinish",err,error) - RETURN 1 - - END SUBROUTINE Computation_WorkGroupCreateFinish +CONTAINS ! !================================================================================================================================ @@ -630,8 +284,97 @@ END SUBROUTINE Computation_MPIComputationNodeInitialise !================================================================================================================================= ! + !>Finalises the computation data structures and deallocates all memory. + SUBROUTINE Computation_Finalise(err,error,*) + + !Argument Variables + INTEGER(INTG), INTENT(OUT) :: err !Initialises the computation data structures. + SUBROUTINE Computation_Initialise(err,error,*) + + !Argument Variables + INTEGER(INTG), INTENT(OUT) :: err !Finalises the computation environment data structures and deallocates all memory. - SUBROUTINE Computation_ComputationEnvironmentFinalise(computationEnvironment,err,error,*) + SUBROUTINE ComputationEnvironment_Finalise(computationEnvironment,err,error,*) !Argument Variables TYPE(ComputationEnvironmentType) :: computationEnvironment !Initialises the computation environment data structures. - SUBROUTINE Computation_ComputationEnvironmentInitialise(computationEnvironment,err,error,*) + SUBROUTINE ComputationEnvironment_Initialise(computationEnvironment,err,error,*) !Argument Variables TYPE(ComputationEnvironmentType) :: computationEnvironment !computationEnvironment%worldWorkGroup + computationEnvironment%worldWorkGroup%numberOfGroupComputationNodes=computationEnvironment%numberOfWorldComputationNodes + !computationEnvironment%worldWorkGroup%computationEnvironment=>computationEnvironment + ALLOCATE(computationEnvironment%worldWorkGroup%worldRanks(computationEnvironment%numberOfWorldComputationNodes),STAT=err) + IF(err/=0) CALL FlagError("Could not allocate world work group world ranks.",err,error,*999) + ALLOCATE(computationEnvironment%worldWorkGroup%availableRanks(computationEnvironment%numberOfWorldComputationNodes),STAT=err) + IF(err/=0) CALL FlagError("Could not allocate world work group available ranks.",err,error,*999) + DO rankIdx=1,computationEnvironment%numberOfWorldComputationNodes + computationEnvironment%worldWorkGroup%worldRanks(rankIdx)=rankIdx-1 + computationEnvironment%worldWorkGroup%availableRanks(rankIdx)=rankIdx-1 + ENDDO !rankIdx + computationEnvironment%worldWorkGroup%numberOfAvailableRanks=computationEnvironment%numberOfWorldComputationNodes + !Create a new MPI group + CALL MPI_GROUP_INCL(computationEnvironment%mpiGroupWorld,computationEnvironment%worldWorkGroup%numberOfGroupComputationNodes, & + & computationEnvironment%worldWorkGroup%worldRanks,computationEnvironment%worldWorkGroup%mpiGroup,mpiIError) + CALL MPI_ERROR_CHECK("MPI_GROUP_INCL",mpiIError,err,error,*999) + CALL MPI_COMM_CREATE(computationEnvironment%mpiWorldCommunicator,computationEnvironment%worldWorkGroup%mpiGroup, & + & computationEnvironment%worldWorkGroup%mpiGroupCommunicator,mpiIError) + CALL MPI_ERROR_CHECK("MPI_COMM_CREATE",mpiIError,err,error,*999) + !Determine ranks + CALL MPI_COMM_RANK(computationEnvironment%mpiWorldCommunicator,rank,mpiIError) + CALL MPI_ERROR_CHECK("MPI_COMM_RANK",mpiIError,err,error,*999) + computationEnvironment%worldWorkGroup%myWorldComputationNodeNumber=rank + CALL MPI_COMM_RANK(computationEnvironment%worldWorkGroup%mpiGroupCommunicator,rank,mpiIError) + CALL MPI_ERROR_CHECK("MPI_COMM_RANK",mpiIError,err,error,*999) + computationEnvironment%worldWorkGroup%myWorldComputationNodeNumber=rank + + computationEnvironment%worldWorkGroup%workGroupFinished=.TRUE. IF(diagnostics1) THEN !Just let the master node write out this information - IF(RANK==0) THEN + IF(rank==0) THEN CALL WriteString(DIAGNOSTIC_OUTPUT_TYPE,"Computation environment:",err,error,*999) CALL WriteStringValue(DIAGNOSTIC_OUTPUT_TYPE," MPI version = ", & & computationEnvironment%mpiVersion,err,error,*999) CALL WriteStringValue(DIAGNOSTIC_OUTPUT_TYPE," MPI subversion = ", & & computationEnvironment%mpiSubversion,err,error,*999) + CALL WriteStringValue(DIAGNOSTIC_OUTPUT_TYPE," MPI world communicator = ", & + & computationEnvironment%mpiCommWorld,err,error,*999) + CALL WriteStringValue(DIAGNOSTIC_OUTPUT_TYPE," MPI world group = ", & + & computationEnvironment%mpiGroupWorld,err,error,*999) CALL WriteStringValue(DIAGNOSTIC_OUTPUT_TYPE," Number of world computation nodes = ", & & computationEnvironment%numberOfWorldComputationNodes,err,error,*999) CALL WriteStringValue(DIAGNOSTIC_OUTPUT_TYPE," My world computation node number = ", & @@ -774,103 +556,14 @@ SUBROUTINE Computation_ComputationEnvironmentInitialise(computationEnvironment,e ENDIF ENDIF - EXITS("Computation_ComputationEnvironmentInitialise") - RETURN -999 CALL Computation_ComputationEnvironmentFinalise(computationEnvironment,dummyErr,dummyError,*998) -998 ERRORS("Computation_ComputationEnvironmentInitialise",err,error) - EXITS("Computation_ComputationEnvironmentInitialise") - RETURN 1 - - END SUBROUTINE Computation_ComputationEnvironmentInitialise - - ! - !================================================================================================================================= - ! - - !>Finalises the computation data structures and deallocates all memory. - SUBROUTINE Computation_Finalise(err,error,*) - - !Argument Variables - INTEGER(INTG), INTENT(OUT) :: err !Initialises the computation data structures. - SUBROUTINE Computation_Initialise(err,error,*) - - !Argument Variables - INTEGER(INTG), INTENT(OUT) :: err !Start the creation of a work group \see OpenCMISS::Iron::cmfe_WorkGroup_CreateStart + SUBROUTINE WorkGroup_CreateStart(userNumber,parentWorkGroup,workGroup,err,error,*) + + !Argument Variables + INTEGER(INTG), INTENT(IN) :: userNumber !parentWorkGroup%computationEnvironment + !Add the work group to the list of parent sub groups + ALLOCATE(newSubGroups(parentWorkGroup%numberOfSubGroups+1),STAT=err) + IF(err/=0) CALL FlagError("Could not allocate new sub groups.",err,error,*999) + workGroup%parentWorkGroup=>parentWorkGroup + DO subGroupIdx=1,parentWorkGroup%numberOfSubGroups + newSubGroups(subGroupIdx)%ptr=parentWorkGroup%subGroups(subGroupIdx)%ptr + ENDDO !subGroupIdx + newSubGroups(parentWorkGroup%numberOfSubGroups+1)%ptr=>workGroup + CALL MOVE_ALLOC(newSubGroups,parentWorkGroup%subGroups) + parentWorkGroup%numberOfSubGroups=parentWorkGroup%numberOfSubGroups+1 + + EXITS("WorkGroup_CreateStart") + RETURN +999 ERRORSEXITS("WorkGroup_CreateStart",err,error) + RETURN 1 + + END SUBROUTINE WorkGroup_CreateStart ! !================================================================================================================================ ! - !>Gets the current world communicator. - SUBROUTINE ComputationEnvironment_WorldCommunicatorGet(worldCommunicator,err,error,*) + !>Finish the creation of a work group \see OpenCMISS::Iron::cmfe_WorkGroup_CreateFinish + SUBROUTINE WorkGroup_CreateFinish(workGroup,err,error,*) + + !Argument Variables + TYPE(WorkGroupType), POINTER, INTENT(INOUT) :: workGroup !SIZE(parentWorkGroup%availableRanks,1)) THEN + localError="There are insufficient parent work group available ranks. There are "// & + & TRIM(NumberToVString(SIZE(parentWorkGroup%availableRanks,1),"*",err,error))// & + & " parent ranks available and "// & + & TRIM(NumberToVString(workGroup%numberOfGroupComputationNodes,"*",err,error))//" ranks are required." + CALL FlagError(localError,err,error,*999) + ENDIF + + !Get the ranks from the list of available ranks of the parent. + ALLOCATE(workGroup%worldRanks(workGroup%numberOfGroupComputationNodes),STAT=err) + IF(err/=0) CALL FlagError("Could not allocate work group world ranks.",err,error,*999) + newNumberOfAvailableRanks=parentWorkGroup%numberOfAvailableRanks-workGroup%numberOfGroupComputationNodes + ALLOCATE(newAvailableRanks(newNumberOfAvailableRanks),STAT=err) + IF(err/=0) CALL FlagError("Could not allocate work group parent new available ranks.",err,error,*999) + DO rankIdx=1,workGroup%numberOfGroupComputationNodes + workGroup%worldRanks(rankIdx)=parentWorkGroup%availableRanks(rankIdx) + ENDDO !rankIdx + DO rankIdx=1,newNumberOfAvailableRanks + newAvailableRanks(rankIdx)=parentWorkGroup%availableRanks(rankIdx+workGroup%numberOfGroupComputationNodes) + ENDDO !rankIdx + CALL Sorting_HeapSort(newAvailableRanks,err,error,*999) + CALL MOVE_ALLOC(newAvailableRanks,parentWorkGroup%availableRanks) + parentWorkGroup%numberOfAvailableRanks=newNumberOfAvailableRanks + + !Create a new MPI group + CALL MPI_GROUP_INCL(computationEnvironment%mpiGroupWorld,workGroup%numberOfGroupComputationNodes,workGroup%worldRanks, & + & workGroup%mpiGroup,mpiIError) + CALL MPI_ERROR_CHECK("MPI_GROUP_INCL",mpiIError,err,error,*999) + CALL MPI_COMM_CREATE(computationEnvironment%mpiGroupWorld,workGroup%mpiGroup,workGroup%mpiGroupCommunicator,mpiIError) + CALL MPI_ERROR_CHECK("MPI_COMM_CREATE",mpiIError,err,error,*999) + + !Determine my processes rank in the group communicator + CALL MPI_COMM_RANK(workGroup%mpiGroupCommunicator,groupRank,mpiIError) + CALL MPI_ERROR_CHECK("MPI_COMM_RANK",mpiIError,err,error,*999) + workGroup%myGroupComputationNodeNumber=groupRank + + workGroup%workGroupFinished=.TRUE. + + EXITS("WorkGroup_CreateFinish") + RETURN +999 IF(ALLOCATED(newAvailableRanks)) DEALLOCATE(newAvailableRanks) + ERRORSEXITS("WorkGroup_CreateFinish",err,error) + RETURN 1 + + END SUBROUTINE WorkGroup_CreateFinish + + ! + !================================================================================================================================= + ! + + !>Destroy a work group \see OpenCMISS::Iron::cmfe_WorkGroup_Destroy + SUBROUTINE WorkGroup_Destroy(workGroup,err,error,*) !Argument Variables - INTEGER(INTG), INTENT(OUT) :: worldCommunicator !Destroy a work group given by a user number and all sub groups under it + RECURSIVE SUBROUTINE WorkGroup_DestroyNumber(workGroupUserNumber,err,error,*) - worldCommunicator=computationEnvironment%mpiWorldCommunicator + !Argument Variables + INTEGER(INTG), INTENT(IN) :: workGroupUserNumber !1) THEN + !If the parentWorkGroup has more than one sub groups then remove this work group from the list of sub groups. + ALLOCATE(newSubGroups(parentWorkGroup%numberOfSubGroups-1),STAT=err) + IF(err/=0) CALL FlagError("Could not allocate new sub groups.",err,error,*999) + count=0 + DO subGroupIdx=1,parentWorkGroup%numberOfSubGroups + NULLIFY(subGroup) + CALL WorkGroup_WorkSubGroupGet(workGroup,subGroupIdx,subGroup,err,error,*999) + IF(subGroup%userNumber/=workGroup%userNumber) THEN + count=count+1 + newSubGroups(count)%ptr=>parentWorkGroup%subGroups(subGroupIdx)%ptr + ENDIF + ENDDO !subGroupIdx + CALL MOVE_ALLOC(newSubGroups,parentWorkGroup%subGroups) + parentWorkGroup%numberOfSubGroups=parentWorkGroup%numberOfSubGroups-1 + ELSE + IF(ALLOCATED(parentWorkGroup%subGroups)) DEALLOCATE(parentWorkGroup%subGroups) + parentWorkGroup%numberOfSubGroups=0 + ENDIF + !Put the work group ranks back into the parent work group available ranks + ALLOCATE(newAvailableRanks(parentWorkGroup%numberOfAvailableRanks+workGroup%numberOfGroupComputationNodes),STAT=err) + IF(err/=0) CALL FlagError("Could not allocate new available ranks.",err,error,*999) + DO rankIdx=1,parentWorkGroup%numberOfAvailableRanks + newAvailableRanks(rankIdx)=parentWorkGroup%availableRanks(rankIdx) + ENDDO !rankIdx + DO rankIdx=1,workGroup%numberOfGroupComputationNodes + newAvailableRanks(parentWorkGroup%numberOfAvailableRanks+rankIdx)=workGroup%worldRanks(rankIdx) + ENDDO !rankIdx + CALL Sorting_HeapSort(newAvailableRanks,err,error,*999) + CALL MOVE_ALLOC(newAvailableRanks,parentWorkGroup%availableRanks) + parentWorkGroup%numberOfAvailableRanks=parentWorkGroup%numberOfAvailableRanks+workGroup%numberOfGroupComputationNodes + !Finalise the work group + CALL WorkGroup_Finalise(workGroup,err,error,*999) + ELSE + !Recursively delete the sub groups first + DO WHILE(workGroup%numberOfSubGroups>0) + NULLIFY(workGroup2) + CALL WorkGroup_WorkSubGroupGet(workGroup,1,workGroup2,err,error,*999) + CALL WorkGroup_DestroyNumber(workGroup2%userNumber,err,error,*999) + ENDDO + !Now delete this instance + CALL WorkGroup_DestroyNumber(workGroup%userNumber,err,error,*999) + ENDIF + + EXITS("WorkGroup_DestroyNumber") RETURN -999 ERRORS("ComputationEnvironment_WorldCommunicatorGet",err,error) - EXITS("ComputationEnvironment_WorldCommunicatorGet") +999 IF(ALLOCATED(newSubGroups)) DEALLOCATE(newSubGroups) + IF(ALLOCATED(newAvailableRanks)) DEALLOCATE(newAvailableRanks) + ERRORSEXITS("WorkGroup_DestroyNumber",err,error) RETURN 1 - END SUBROUTINE ComputationEnvironment_WorldCommunicatorGet + END SUBROUTINE WorkGroup_DestroyNumber ! - !================================================================================================================================ + !================================================================================================================================= ! - !>Returns the number/rank of the computation nodes. - FUNCTION ComputationEnvironment_NodeNumberGet(err,error) - + !>Finalise a work group and deallocate all memory + RECURSIVE SUBROUTINE WorkGroup_Finalise(workGroup,err,error,*) + !Argument Variables + TYPE(WorkGroupType),POINTER :: workGroup !Add the work sub-group to the parent group based on the computation requirements (called by user) + SUBROUTINE WorkGroup_Initialise(workGroup,err,error,*) + + !Argument Variables + TYPE(WorkGroupType),POINTER, INTENT(OUT) :: workGroup !Set the character label of a work group \see OpenCMISS::Iron::cmfe_WorkGroup_LabelSet + SUBROUTINE WorkGroup_LabelSetC(workGroup,label,err,error,*) + + !Argument Variables + TYPE(WorkGroupType), POINTER, INTENT(IN) :: workGroup !Returns the number of computation nodes. - FUNCTION ComputationEnvironment_NumberOfNodesGet(err,error) - + + !>Set the varying string label of a work group \see OpenCMISS::Iron::cmfe_WorkGroup_LabelSet + SUBROUTINE WorkGroup_LabelSetVS(workGroup,label,err,error,*) + !Argument Variables + TYPE(WorkGroupType), POINTER, INTENT(IN) :: workGroup !Set the number of group nodes in a work group \see OpenCMISS::Iron::cmfe_WorkGroup_NumberOfGroupNodesSet + SUBROUTINE WorkGroup_NumberOfGroupNodesSet(workGroup,numberOfGroupComputationNodes,err,error,*) + + !Argument Variables + TYPE(WorkGroupType), POINTER, INTENT(OUT) :: workGroup !parentWorkGroup%numberOfAvailableRanks) THEN + localError="The number of group nodes of "//TRIM(NumberToVString(numberOfGroupComputationNodes,"*",err,error))// & + & " is invalid. The number of group nodes should be > 0 and <= "// & + & TRIM(NumberToVString(parentWorkGroup%numberOfAvailableRanks,"*",err,error))//"." + CALL FlagError(localError,err,error,*999) + ENDIF + + workGroup%numberOfGroupComputationNodes=numberOfGroupComputationNodes + + EXITS("WorkGroup_NumberOfGroupNodesSet") RETURN +999 ERRORSEXITS("WorkGroup_NumberOfGroupNodesSet",err,error) + RETURN 1 - END FUNCTION ComputationEnvironment_NumberOfNodesGet + END SUBROUTINE WorkGroup_NumberOfGroupNodesSet ! - !================================================================================================================================ + !================================================================================================================================= ! END MODULE ComputationRoutines diff --git a/src/data_projection_routines.f90 b/src/data_projection_routines.f90 index 7d03b3d8..8f8d4818 100644 --- a/src/data_projection_routines.f90 +++ b/src/data_projection_routines.f90 @@ -49,6 +49,7 @@ MODULE DataProjectionRoutines USE BasisAccessRoutines USE CmissMPI USE ComputationRoutines + USE ComputationAccessRoutines USE Constants USE CoordinateSystemAccessRoutines USE DataPointAccessRoutines @@ -1364,7 +1365,7 @@ SUBROUTINE DataProjection_DataPointsProjectionEvaluate(dataProjection,projection INTEGER(INTG), ALLOCATABLE :: globalMPIDisplacements(:),sortingIndices1(:),sortingIndices2(:) INTEGER(INTG), ALLOCATABLE :: globalNumberOfProjectedPoints(:) INTEGER(INTG) :: MPIClosestDistances,dataProjectionGlobalNumber - INTEGER(INTG) :: MPIIError + INTEGER(INTG) :: MPIIError,worldCommunicator INTEGER(INTG), ALLOCATABLE :: projectedElement(:),projectedLineFace(:),projectionExitTag(:) REAL(DP) :: distance REAL(DP), ALLOCATABLE :: closestDistances(:,:),globalClosestDistances(:,:) @@ -1413,10 +1414,9 @@ SUBROUTINE DataProjection_DataPointsProjectionEvaluate(dataProjection,projection IF(.NOT.ASSOCIATED(domainElements%elements)) CALL FlagError("Domain elements elements is not associated.",err,error,*999) numberOfDataPoints=dataPoints%numberOfDataPoints - myComputationNode=ComputationEnvironment_NodeNumberGet(err,error) - IF(err/=0) GOTO 999 - numberOfWorldComputationNodes=ComputationEnvironment_NumberOfNodesGet(err,error) - IF(err/=0) GOTO 999 + CALL ComputationEnvironment_NumberOfWorldNodesGet(computationEnvironment,numberOfWorldComputationNodes,err,error,*999) + CALL ComputationEnvironment_WorldNodeNumberGet(computationEnvironment,myComputationNode,err,error,*999) + CALL ComputationEnvironment_WorldCommunicatorGet(computationEnvironment,worldCommunicator,err,error,*999) boundaryProjection=(dataProjection%projectionType==DATA_PROJECTION_BOUNDARY_LINES_PROJECTION_TYPE).OR. & & (dataProjection%projectionType==DATA_PROJECTION_BOUNDARY_FACES_PROJECTION_TYPE) !######################################################################################################### @@ -1686,7 +1686,7 @@ SUBROUTINE DataProjection_DataPointsProjectionEvaluate(dataProjection,projection IF(err/=0) CALL FlagError("Could not allocate sorting indices 2.",err,error,*999) !gather and distribute the number of closest elements from all computation nodes CALL MPI_ALLGATHER(numberOfClosestCandidates,1,MPI_INTEGER,globalNumberOfClosestCandidates,1,MPI_INTEGER, & - & computationEnvironment%mpiWorldCommunicator,MPIIError) + & worldCommunicator,MPIIError) CALL MPI_ERROR_CHECK("MPI_ALLGATHER",MPIIError,err,error,*999) !Sum all number of closest candidates from all computation nodes totalNumberOfClosestCandidates=SUM(globalNumberOfClosestCandidates,1) @@ -1711,7 +1711,7 @@ SUBROUTINE DataProjection_DataPointsProjectionEvaluate(dataProjection,projection !Share closest element distances between all domains CALL MPI_ALLGATHERV(closestDistances(1,1),numberOfClosestCandidates,MPIClosestDistances, & & globalClosestDistances,globalNumberOfClosestCandidates,globalMPIDisplacements, & - & MPIClosestDistances,computationEnvironment%mpiWorldCommunicator,MPIIError) + & MPIClosestDistances,worldCommunicator,MPIIError) CALL MPI_ERROR_CHECK("MPI_ALLGATHERV",MPIIError,err,error,*999) reducedNumberOfCLosestCandidates=MIN(dataProjection%numberOfClosestElements,totalNumberOfClosestCandidates) projectedDistance(2,:)=myComputationNode @@ -1818,7 +1818,7 @@ SUBROUTINE DataProjection_DataPointsProjectionEvaluate(dataProjection,projection END SELECT !Find the shortest projected distance in all domains CALL MPI_ALLREDUCE(MPI_IN_PLACE,projectedDistance,numberOfDataPoints,MPI_2DOUBLE_PRECISION,MPI_MINLOC, & - & computationEnvironment%mpiWorldCommunicator,MPIIError) + & worldCommunicator,MPIIError) CALL MPI_ERROR_CHECK("MPI_ALLREDUCE",MPIIError,err,error,*999) !Sort the computation node/rank from 0 to number of computation node CALL Sorting_BubbleIndexSort(projectedDistance(2,:),sortingIndices2,err,error,*999) @@ -1836,29 +1836,29 @@ SUBROUTINE DataProjection_DataPointsProjectionEvaluate(dataProjection,projection !Shares minimum projection information between all domains CALL MPI_ALLGATHERV(projectedElement(sortingIndices2(startIdx:finishIdx)),globalNumberOfProjectedPoints( & & myComputationNode+1),MPI_INTEGER,projectedElement,globalNumberOfProjectedPoints, & - & globalMPIDisplacements,MPI_INTEGER,computationEnvironment%mpiWorldCommunicator,MPIIError) !projectedElement + & globalMPIDisplacements,MPI_INTEGER,worldCommunicator,MPIIError) !projectedElement CALL MPI_ERROR_CHECK("MPI_ALLGATHERV",MPIIError,err,error,*999) IF(boundaryProjection) THEN CALL MPI_ALLGATHERV(projectedLineFace(sortingIndices2(startIdx:finishIdx)),globalNumberOfProjectedPoints( & & myComputationNode+1),MPI_INTEGER,projectedLineFace,globalNumberOfProjectedPoints, & - & globalMPIDisplacements,MPI_INTEGER,computationEnvironment%mpiWorldCommunicator,MPIIError) !projectedLineFace + & globalMPIDisplacements,MPI_INTEGER,worldCommunicator,MPIIError) !projectedLineFace CALL MPI_ERROR_CHECK("MPI_ALLGATHERV",MPIIError,err,error,*999) ENDIF DO xiIdx=1,dataProjection%numberOfXi CALL MPI_ALLGATHERV(projectedXi(xiIdx,sortingIndices2(startIdx:finishIdx)),globalNumberOfProjectedPoints( & & myComputationNode+1),MPI_DOUBLE_PRECISION,projectedXi(xiIdx,:),globalNumberOfProjectedPoints, & - & globalMPIDisplacements,MPI_DOUBLE_PRECISION,computationEnvironment%mpiWorldCommunicator,MPIIError) !projectedXi + & globalMPIDisplacements,MPI_DOUBLE_PRECISION,worldCommunicator,MPIIError) !projectedXi CALL MPI_ERROR_CHECK("MPI_ALLGATHERV",MPIIError,err,error,*999) ENDDO !xiIdx CALL MPI_ALLGATHERV(projectionExitTag(sortingIndices2(startIdx:finishIdx)),globalNumberOfProjectedPoints( & & myComputationNode+1),MPI_INTEGER,projectionExitTag,globalNumberOfProjectedPoints, & - & globalMPIDisplacements,MPI_INTEGER,computationEnvironment%mpiWorldCommunicator,MPIIError) !projectionExitTag + & globalMPIDisplacements,MPI_INTEGER,worldCommunicator,MPIIError) !projectionExitTag CALL MPI_ERROR_CHECK("MPI_ALLGATHERV",MPIIError,err,error,*999) DO xiIdx=1,dataProjection%numberOfCoordinates CALL MPI_ALLGATHERV(projectionVectors(xiIdx, sortingIndices2(startIdx:finishIdx)), & & globalNumberOfProjectedPoints(myComputationNode+1),MPI_DOUBLE_PRECISION,projectionVectors(xiIdx,:), & - & globalNumberOfProjectedPoints,globalMPIDisplacements,MPI_DOUBLE_PRECISION,computationEnvironment% & - & mpiWorldCommunicator,MPIIError) !projectionVectors + & globalNumberOfProjectedPoints,globalMPIDisplacements,MPI_DOUBLE_PRECISION,worldCommunicator, & + & MPIIError) !projectionVectors CALL MPI_ERROR_CHECK("MPI_ALLGATHERV",MPIIError,err,error,*999) ENDDO !Assign projection information to projected points @@ -4727,10 +4727,8 @@ SUBROUTINE DataProjection_ResultAnalysisOutput(dataProjection,filename,err,error CALL Domain_TopologyGet(domain,domainTopology,err,error,*999) NULLIFY(domainElements) CALL DomainTopology_ElementsGet(domainTopology,domainElements,err,error,*999) - numberOfWorldComputationNodes=ComputationEnvironment_NumberOfNodesGet(err,error) - IF(err/=0) GOTO 999 - myWorldComputationNodeNumber=ComputationEnvironment_NodeNumberGet(err,error) - IF(err/=0) GOTO 999 + CALL ComputationEnvironment_NumberOfWorldNodesGet(computationEnvironment,numberOfWorldComputationNodes,err,error,*999) + CALL ComputationEnvironment_WorldNodeNumberGet(computationEnvironment,myWorldComputationNodeNumber,err,error,*999) !Find the correct output ID and open a file if necessary filenameLength=LEN_TRIM(filename) IF(filenameLength>=1) THEN diff --git a/src/distributed_matrix_vector.f90 b/src/distributed_matrix_vector.f90 index f43ba74e..a7d76360 100755 --- a/src/distributed_matrix_vector.f90 +++ b/src/distributed_matrix_vector.f90 @@ -48,6 +48,7 @@ MODULE DISTRIBUTED_MATRIX_VECTOR USE CmissMPI USE CmissPetsc USE ComputationRoutines + USE ComputationAccessRoutines USE INPUT_OUTPUT USE ISO_VARYING_STRING USE ISO_C_BINDING @@ -2684,7 +2685,7 @@ SUBROUTINE DISTRIBUTED_MATRIX_PETSC_CREATE_FINISH(PETSC_MATRIX,ERR,ERROR,*) INTEGER(INTG), INTENT(OUT) :: ERR !DISTRIBUTED_MATRIX%COLUMN_DOMAIN_MAPPING IF(ASSOCIATED(ROW_DOMAIN_MAPPING)) THEN IF(ASSOCIATED(COLUMN_DOMAIN_MAPPING)) THEN + CALL ComputationEnvironment_WorldCommunicatorGet(computationEnvironment,worldCommunicator,err,error,*999) SELECT CASE(PETSC_MATRIX%STORAGE_TYPE) CASE(DISTRIBUTED_MATRIX_BLOCK_STORAGE_TYPE) PETSC_MATRIX%NUMBER_NON_ZEROS=PETSC_MATRIX%M*PETSC_MATRIX%GLOBAL_N @@ -2713,8 +2715,8 @@ SUBROUTINE DISTRIBUTED_MATRIX_PETSC_CREATE_FINISH(PETSC_MATRIX,ERR,ERROR,*) !Set up the matrix ALLOCATE(PETSC_MATRIX%DATA_DP(PETSC_MATRIX%DATA_SIZE),STAT=ERR) IF(ERR/=0) CALL FlagError("Could not allocate PETSc matrix data.",ERR,ERROR,*999) - CALL Petsc_MatCreateDense(computationEnvironment%mpiWorldCommunicator,PETSC_MATRIX%M,PETSC_MATRIX%N, & - & PETSC_MATRIX%GLOBAL_M,PETSC_MATRIX%GLOBAL_N,PETSC_MATRIX%DATA_DP,PETSC_MATRIX%MATRIX,ERR,ERROR,*999) + CALL Petsc_MatCreateDense(WorldCommunicator,PETSC_MATRIX%M,PETSC_MATRIX%N,PETSC_MATRIX%GLOBAL_M, & + & PETSC_MATRIX%GLOBAL_N,PETSC_MATRIX%DATA_DP,PETSC_MATRIX%MATRIX,ERR,ERROR,*999) CASE(DISTRIBUTED_MATRIX_DIAGONAL_STORAGE_TYPE) PETSC_MATRIX%NUMBER_NON_ZEROS=PETSC_MATRIX%M PETSC_MATRIX%MAXIMUM_COLUMN_INDICES_PER_ROW=1 @@ -2733,8 +2735,8 @@ SUBROUTINE DISTRIBUTED_MATRIX_PETSC_CREATE_FINISH(PETSC_MATRIX,ERR,ERROR,*) PETSC_MATRIX%DIAGONAL_NUMBER_NON_ZEROS=1 PETSC_MATRIX%OFFDIAGONAL_NUMBER_NON_ZEROS=0 !Create the PETsc AIJ matrix - CALL Petsc_MatCreateAIJ(computationEnvironment%mpiWorldCommunicator,PETSC_MATRIX%M,PETSC_MATRIX%N, & - & PETSC_MATRIX%GLOBAL_M,PETSC_MATRIX%GLOBAL_N,PETSC_NULL_INTEGER,PETSC_MATRIX%DIAGONAL_NUMBER_NON_ZEROS, & + CALL Petsc_MatCreateAIJ(worldCommunicator,PETSC_MATRIX%M,PETSC_MATRIX%N,PETSC_MATRIX%GLOBAL_M, & + & PETSC_MATRIX%GLOBAL_N,PETSC_NULL_INTEGER,PETSC_MATRIX%DIAGONAL_NUMBER_NON_ZEROS, & & PETSC_NULL_INTEGER,PETSC_MATRIX%OFFDIAGONAL_NUMBER_NON_ZEROS,PETSC_MATRIX%MATRIX,ERR,ERROR,*999) CASE(DISTRIBUTED_MATRIX_COLUMN_MAJOR_STORAGE_TYPE) CALL FlagError("Column major storage is not implemented for PETSc matrices.",ERR,ERROR,*999) @@ -2744,7 +2746,7 @@ SUBROUTINE DISTRIBUTED_MATRIX_PETSC_CREATE_FINISH(PETSC_MATRIX,ERR,ERROR,*) IF(ALLOCATED(PETSC_MATRIX%DIAGONAL_NUMBER_NON_ZEROS)) THEN IF(ALLOCATED(PETSC_MATRIX%OFFDIAGONAL_NUMBER_NON_ZEROS)) THEN !Create the PETSc AIJ matrix - CALL Petsc_MatCreateAIJ(computationEnvironment%mpiWorldCommunicator,PETSC_MATRIX%M,PETSC_MATRIX%N, & + CALL Petsc_MatCreateAIJ(worldCommunicator,PETSC_MATRIX%M,PETSC_MATRIX%N, & & PETSC_MATRIX%GLOBAL_M,PETSC_MATRIX%GLOBAL_N,PETSC_NULL_INTEGER,PETSC_MATRIX%DIAGONAL_NUMBER_NON_ZEROS, & & PETSC_NULL_INTEGER,PETSC_MATRIX%OFFDIAGONAL_NUMBER_NON_ZEROS,PETSC_MATRIX%MATRIX,ERR,ERROR,*999) !Set matrix options @@ -6483,7 +6485,7 @@ SUBROUTINE DISTRIBUTED_VECTOR_CMISS_CREATE_FINISH(CMISS_VECTOR,ERR,ERROR,*) & DOMAIN_MAPPING%ADJACENT_DOMAINS_PTR(DOMAIN_MAPPING%NUMBER_OF_DOMAINS) END IF IF(DOMAIN_MAPPING%NUMBER_OF_ADJACENT_DOMAINS>0) THEN - my_computation_node_number=ComputationEnvironment_NodeNumberGet(ERR,ERROR) + CALL ComputationEnvironment_WorldNodeNumberGet(computationEnvironment,my_computation_node_number,err,error,*999) IF(ERR/=0) GOTO 999 IF(DISTRIBUTED_VECTOR%GHOSTING_TYPE==DISTRIBUTED_MATRIX_VECTOR_INCLUDE_GHOSTS_TYPE) THEN ALLOCATE(CMISS_VECTOR%TRANSFERS(DOMAIN_MAPPING%NUMBER_OF_ADJACENT_DOMAINS),STAT=ERR) @@ -7660,7 +7662,7 @@ SUBROUTINE DISTRIBUTED_VECTOR_PETSC_CREATE_FINISH(PETSC_VECTOR,ERR,ERROR,*) INTEGER(INTG), INTENT(OUT) :: ERR !DISTRIBUTED_VECTOR%DOMAIN_MAPPING IF(ASSOCIATED(DOMAIN_MAPPING)) THEN + CALL ComputationEnvironment_WorldCommunicatorGet(computationEnvironment,worldCommunicator,err,error,*999) !Create the PETSc vector PETSC_VECTOR%DATA_SIZE=PETSC_VECTOR%N - CALL Petsc_VecCreateMPI(computationEnvironment%mpiWorldCommunicator,PETSC_VECTOR%N,PETSC_VECTOR%GLOBAL_N, & + CALL Petsc_VecCreateMPI(worldCommunicator,PETSC_VECTOR%N,PETSC_VECTOR%GLOBAL_N, & & PETSC_VECTOR%VECTOR,ERR,ERROR,*999) !Set up the Local to Global Mappings DO i=1,PETSC_VECTOR%N @@ -7912,7 +7915,7 @@ SUBROUTINE DISTRIBUTED_VECTOR_UPDATE_FINISH(DISTRIBUTED_VECTOR,ERR,ERROR,*) CASE(DISTRIBUTED_MATRIX_VECTOR_CMISS_TYPE) IF(ASSOCIATED(DISTRIBUTED_VECTOR%CMISS)) THEN IF(ASSOCIATED(DISTRIBUTED_VECTOR%DOMAIN_MAPPING)) THEN - NUMBER_OF_COMPUTATION_NODES=ComputationEnvironment_NumberOfNodesGet(ERR,ERROR) + CALL ComputationEnvironment_NumberOfWorldNodesGet(computationEnvironment,NUMBER_OF_COMPUTATION_NODES,err,error,*999) IF(ERR/=0) GOTO 999 IF(NUMBER_OF_COMPUTATION_NODES>1) THEN CALL DISTRIBUTED_VECTOR_UPDATE_WAITFINISHED(DISTRIBUTED_VECTOR,ERR,ERROR,*999) @@ -8170,9 +8173,9 @@ SUBROUTINE DISTRIBUTED_VECTOR_UPDATE_START(DISTRIBUTED_VECTOR,ERR,ERROR,*) INTEGER(INTG), INTENT(OUT) :: ERR !1) THEN + IF(numberOfComputationNodes>1) THEN IF(DISTRIBUTED_VECTOR%DOMAIN_MAPPING%NUMBER_OF_ADJACENT_DOMAINS>0) THEN !Fill in the send buffers with the send ghost values DO domain_idx=1,DISTRIBUTED_VECTOR%DOMAIN_MAPPING%NUMBER_OF_ADJACENT_DOMAINS @@ -8229,8 +8233,7 @@ SUBROUTINE DISTRIBUTED_VECTOR_UPDATE_START(DISTRIBUTED_VECTOR,ERR,ERROR,*) CALL MPI_IRECV(DISTRIBUTED_VECTOR%CMISS%TRANSFERS(domain_idx)%RECEIVE_BUFFER_INTG, & & DISTRIBUTED_VECTOR%CMISS%TRANSFERS(domain_idx)%RECEIVE_BUFFER_SIZE,MPI_INTEGER, & & DISTRIBUTED_VECTOR%DOMAIN_MAPPING%ADJACENT_DOMAINS(domain_idx)%DOMAIN_NUMBER, & - & DISTRIBUTED_VECTOR%CMISS%TRANSFERS(domain_idx)%RECEIVE_TAG_NUMBER, & - & computationEnvironment%mpiWorldCommunicator, & + & DISTRIBUTED_VECTOR%CMISS%TRANSFERS(domain_idx)%RECEIVE_TAG_NUMBER,worldCommunicator, & & DISTRIBUTED_VECTOR%CMISS%TRANSFERS(domain_idx)%MPI_RECEIVE_REQUEST,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_IRECV",MPI_IERROR,ERR,ERROR,*999) IF(DIAGNOSTICS5) THEN @@ -8242,8 +8245,7 @@ SUBROUTINE DISTRIBUTED_VECTOR_UPDATE_START(DISTRIBUTED_VECTOR,ERR,ERROR,*) & ADJACENT_DOMAINS(domain_idx)%DOMAIN_NUMBER,ERR,ERROR,*999) CALL WRITE_STRING_VALUE(DIAGNOSTIC_OUTPUT_TYPE," Receive tag = ",DISTRIBUTED_VECTOR% & & CMISS%TRANSFERS(domain_idx)%RECEIVE_TAG_NUMBER,ERR,ERROR,*999) - CALL WRITE_STRING_VALUE(DIAGNOSTIC_OUTPUT_TYPE," Receive comm = ", & - & computationEnvironment%mpiWorldCommunicator,ERR,ERROR,*999) + CALL WRITE_STRING_VALUE(DIAGNOSTIC_OUTPUT_TYPE," Receive comm = ",worldCommunicator,ERR,ERROR,*999) CALL WRITE_STRING_VALUE(DIAGNOSTIC_OUTPUT_TYPE," Receive request = ",DISTRIBUTED_VECTOR% & & CMISS%TRANSFERS(domain_idx)%MPI_RECEIVE_REQUEST,ERR,ERROR,*999) ENDIF @@ -8251,8 +8253,7 @@ SUBROUTINE DISTRIBUTED_VECTOR_UPDATE_START(DISTRIBUTED_VECTOR,ERR,ERROR,*) CALL MPI_IRECV(DISTRIBUTED_VECTOR%CMISS%TRANSFERS(domain_idx)%RECEIVE_BUFFER_SP, & & DISTRIBUTED_VECTOR%CMISS%TRANSFERS(domain_idx)%RECEIVE_BUFFER_SIZE,MPI_REAL, & & DISTRIBUTED_VECTOR%DOMAIN_MAPPING%ADJACENT_DOMAINS(domain_idx)%DOMAIN_NUMBER, & - & DISTRIBUTED_VECTOR%CMISS%TRANSFERS(domain_idx)%RECEIVE_TAG_NUMBER, & - & computationEnvironment%mpiWorldCommunicator, & + & DISTRIBUTED_VECTOR%CMISS%TRANSFERS(domain_idx)%RECEIVE_TAG_NUMBER,worldCommunicator, & & DISTRIBUTED_VECTOR%CMISS%TRANSFERS(domain_idx)%MPI_RECEIVE_REQUEST,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_IRECV",MPI_IERROR,ERR,ERROR,*999) IF(DIAGNOSTICS5) THEN @@ -8264,8 +8265,7 @@ SUBROUTINE DISTRIBUTED_VECTOR_UPDATE_START(DISTRIBUTED_VECTOR,ERR,ERROR,*) & ADJACENT_DOMAINS(domain_idx)%DOMAIN_NUMBER,ERR,ERROR,*999) CALL WRITE_STRING_VALUE(DIAGNOSTIC_OUTPUT_TYPE," Receive tag = ",DISTRIBUTED_VECTOR% & & CMISS%TRANSFERS(domain_idx)%RECEIVE_TAG_NUMBER,ERR,ERROR,*999) - CALL WRITE_STRING_VALUE(DIAGNOSTIC_OUTPUT_TYPE," Receive comm = ", & - & computationEnvironment%mpiWorldCommunicator,ERR,ERROR,*999) + CALL WRITE_STRING_VALUE(DIAGNOSTIC_OUTPUT_TYPE," Receive comm = ",worldCommunicator,ERR,ERROR,*999) CALL WRITE_STRING_VALUE(DIAGNOSTIC_OUTPUT_TYPE," Receive request = ",DISTRIBUTED_VECTOR% & & CMISS%TRANSFERS(domain_idx)%MPI_RECEIVE_REQUEST,ERR,ERROR,*999) ENDIF @@ -8273,8 +8273,7 @@ SUBROUTINE DISTRIBUTED_VECTOR_UPDATE_START(DISTRIBUTED_VECTOR,ERR,ERROR,*) CALL MPI_IRECV(DISTRIBUTED_VECTOR%CMISS%TRANSFERS(domain_idx)%RECEIVE_BUFFER_DP, & & DISTRIBUTED_VECTOR%CMISS%TRANSFERS(domain_idx)%RECEIVE_BUFFER_SIZE,MPI_DOUBLE_PRECISION, & & DISTRIBUTED_VECTOR%DOMAIN_MAPPING%ADJACENT_DOMAINS(domain_idx)%DOMAIN_NUMBER, & - & DISTRIBUTED_VECTOR%CMISS%TRANSFERS(domain_idx)%RECEIVE_TAG_NUMBER, & - & computationEnvironment%mpiWorldCommunicator, & + & DISTRIBUTED_VECTOR%CMISS%TRANSFERS(domain_idx)%RECEIVE_TAG_NUMBER,worldCommunicator, & & DISTRIBUTED_VECTOR%CMISS%TRANSFERS(domain_idx)%MPI_RECEIVE_REQUEST,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_IRECV",MPI_IERROR,ERR,ERROR,*999) IF(DIAGNOSTICS5) THEN @@ -8286,8 +8285,7 @@ SUBROUTINE DISTRIBUTED_VECTOR_UPDATE_START(DISTRIBUTED_VECTOR,ERR,ERROR,*) & ADJACENT_DOMAINS(domain_idx)%DOMAIN_NUMBER,ERR,ERROR,*999) CALL WRITE_STRING_VALUE(DIAGNOSTIC_OUTPUT_TYPE," Receive tag = ",DISTRIBUTED_VECTOR% & & CMISS%TRANSFERS(domain_idx)%RECEIVE_TAG_NUMBER,ERR,ERROR,*999) - CALL WRITE_STRING_VALUE(DIAGNOSTIC_OUTPUT_TYPE," Receive comm = ", & - & computationEnvironment%mpiWorldCommunicator,ERR,ERROR,*999) + CALL WRITE_STRING_VALUE(DIAGNOSTIC_OUTPUT_TYPE," Receive comm = ",worldCommunicator,ERR,ERROR,*999) CALL WRITE_STRING_VALUE(DIAGNOSTIC_OUTPUT_TYPE," Receive request = ",DISTRIBUTED_VECTOR% & & CMISS%TRANSFERS(domain_idx)%MPI_RECEIVE_REQUEST,ERR,ERROR,*999) ENDIF @@ -8295,8 +8293,7 @@ SUBROUTINE DISTRIBUTED_VECTOR_UPDATE_START(DISTRIBUTED_VECTOR,ERR,ERROR,*) CALL MPI_IRECV(DISTRIBUTED_VECTOR%CMISS%TRANSFERS(domain_idx)%RECEIVE_BUFFER_L, & & DISTRIBUTED_VECTOR%CMISS%TRANSFERS(domain_idx)%RECEIVE_BUFFER_SIZE,MPI_LOGICAL, & & DISTRIBUTED_VECTOR%DOMAIN_MAPPING%ADJACENT_DOMAINS(domain_idx)%DOMAIN_NUMBER, & - & DISTRIBUTED_VECTOR%CMISS%TRANSFERS(domain_idx)%RECEIVE_TAG_NUMBER, & - & computationEnvironment%mpiWorldCommunicator, & + & DISTRIBUTED_VECTOR%CMISS%TRANSFERS(domain_idx)%RECEIVE_TAG_NUMBER,worldCommunicator, & & DISTRIBUTED_VECTOR%CMISS%TRANSFERS(domain_idx)%MPI_RECEIVE_REQUEST,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_IRECV",MPI_IERROR,ERR,ERROR,*999) IF(DIAGNOSTICS5) THEN @@ -8308,8 +8305,7 @@ SUBROUTINE DISTRIBUTED_VECTOR_UPDATE_START(DISTRIBUTED_VECTOR,ERR,ERROR,*) & ADJACENT_DOMAINS(domain_idx)%DOMAIN_NUMBER,ERR,ERROR,*999) CALL WRITE_STRING_VALUE(DIAGNOSTIC_OUTPUT_TYPE," Receive tag = ",DISTRIBUTED_VECTOR% & & CMISS%TRANSFERS(domain_idx)%RECEIVE_TAG_NUMBER,ERR,ERROR,*999) - CALL WRITE_STRING_VALUE(DIAGNOSTIC_OUTPUT_TYPE," Receive comm = ", & - & computationEnvironment%mpiWorldCommunicator,ERR,ERROR,*999) + CALL WRITE_STRING_VALUE(DIAGNOSTIC_OUTPUT_TYPE," Receive comm = ",worldCommunicator,ERR,ERROR,*999) CALL WRITE_STRING_VALUE(DIAGNOSTIC_OUTPUT_TYPE," Receive request = ",DISTRIBUTED_VECTOR% & & CMISS%TRANSFERS(domain_idx)%MPI_RECEIVE_REQUEST,ERR,ERROR,*999) ENDIF @@ -8330,8 +8326,7 @@ SUBROUTINE DISTRIBUTED_VECTOR_UPDATE_START(DISTRIBUTED_VECTOR,ERR,ERROR,*) CALL MPI_ISEND(DISTRIBUTED_VECTOR%CMISS%TRANSFERS(domain_idx)%SEND_BUFFER_INTG, & & DISTRIBUTED_VECTOR%CMISS%TRANSFERS(domain_idx)%SEND_BUFFER_SIZE,MPI_INTEGER, & & DISTRIBUTED_VECTOR%DOMAIN_MAPPING%ADJACENT_DOMAINS(domain_idx)%DOMAIN_NUMBER, & - & DISTRIBUTED_VECTOR%CMISS%TRANSFERS(domain_idx)%SEND_TAG_NUMBER, & - & computationEnvironment%mpiWorldCommunicator, & + & DISTRIBUTED_VECTOR%CMISS%TRANSFERS(domain_idx)%SEND_TAG_NUMBER,worldCommunicator, & & DISTRIBUTED_VECTOR%CMISS%TRANSFERS(domain_idx)%MPI_SEND_REQUEST,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ISEND",MPI_IERROR,ERR,ERROR,*999) IF(DIAGNOSTICS5) THEN @@ -8343,8 +8338,7 @@ SUBROUTINE DISTRIBUTED_VECTOR_UPDATE_START(DISTRIBUTED_VECTOR,ERR,ERROR,*) & ADJACENT_DOMAINS(domain_idx)%DOMAIN_NUMBER,ERR,ERROR,*999) CALL WRITE_STRING_VALUE(DIAGNOSTIC_OUTPUT_TYPE," Send tag = ",DISTRIBUTED_VECTOR% & & CMISS%TRANSFERS(domain_idx)%SEND_TAG_NUMBER,ERR,ERROR,*999) - CALL WRITE_STRING_VALUE(DIAGNOSTIC_OUTPUT_TYPE," Send comm = ", & - & computationEnvironment%mpiWorldCommunicator,ERR,ERROR,*999) + CALL WRITE_STRING_VALUE(DIAGNOSTIC_OUTPUT_TYPE," Send comm = ",worldCommunicator,ERR,ERROR,*999) CALL WRITE_STRING_VALUE(DIAGNOSTIC_OUTPUT_TYPE," Send request = ",DISTRIBUTED_VECTOR% & & CMISS%TRANSFERS(domain_idx)%MPI_SEND_REQUEST,ERR,ERROR,*999) ENDIF @@ -8352,8 +8346,7 @@ SUBROUTINE DISTRIBUTED_VECTOR_UPDATE_START(DISTRIBUTED_VECTOR,ERR,ERROR,*) CALL MPI_ISEND(DISTRIBUTED_VECTOR%CMISS%TRANSFERS(domain_idx)%SEND_BUFFER_SP, & & DISTRIBUTED_VECTOR%CMISS%TRANSFERS(domain_idx)%SEND_BUFFER_SIZE,MPI_REAL, & & DISTRIBUTED_VECTOR%DOMAIN_MAPPING%ADJACENT_DOMAINS(domain_idx)%DOMAIN_NUMBER, & - & DISTRIBUTED_VECTOR%CMISS%TRANSFERS(domain_idx)%SEND_TAG_NUMBER, & - & computationEnvironment%mpiWorldCommunicator, & + & DISTRIBUTED_VECTOR%CMISS%TRANSFERS(domain_idx)%SEND_TAG_NUMBER,worldCommunicator, & & DISTRIBUTED_VECTOR%CMISS%TRANSFERS(domain_idx)%MPI_SEND_REQUEST,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ISEND",MPI_IERROR,ERR,ERROR,*999) IF(DIAGNOSTICS5) THEN @@ -8365,8 +8358,7 @@ SUBROUTINE DISTRIBUTED_VECTOR_UPDATE_START(DISTRIBUTED_VECTOR,ERR,ERROR,*) & ADJACENT_DOMAINS(domain_idx)%DOMAIN_NUMBER,ERR,ERROR,*999) CALL WRITE_STRING_VALUE(DIAGNOSTIC_OUTPUT_TYPE," Send tag = ",DISTRIBUTED_VECTOR% & & CMISS%TRANSFERS(domain_idx)%SEND_TAG_NUMBER,ERR,ERROR,*999) - CALL WRITE_STRING_VALUE(DIAGNOSTIC_OUTPUT_TYPE," Send comm = ", & - & computationEnvironment%mpiWorldCommunicator,ERR,ERROR,*999) + CALL WRITE_STRING_VALUE(DIAGNOSTIC_OUTPUT_TYPE," Send comm = ",worldCommunicator,ERR,ERROR,*999) CALL WRITE_STRING_VALUE(DIAGNOSTIC_OUTPUT_TYPE," Send request = ",DISTRIBUTED_VECTOR% & & CMISS%TRANSFERS(domain_idx)%MPI_SEND_REQUEST,ERR,ERROR,*999) ENDIF @@ -8374,8 +8366,7 @@ SUBROUTINE DISTRIBUTED_VECTOR_UPDATE_START(DISTRIBUTED_VECTOR,ERR,ERROR,*) CALL MPI_ISEND(DISTRIBUTED_VECTOR%CMISS%TRANSFERS(domain_idx)%SEND_BUFFER_DP, & & DISTRIBUTED_VECTOR%CMISS%TRANSFERS(domain_idx)%SEND_BUFFER_SIZE,MPI_DOUBLE_PRECISION, & & DISTRIBUTED_VECTOR%DOMAIN_MAPPING%ADJACENT_DOMAINS(domain_idx)%DOMAIN_NUMBER, & - & DISTRIBUTED_VECTOR%CMISS%TRANSFERS(domain_idx)%SEND_TAG_NUMBER, & - & computationEnvironment%mpiWorldCommunicator, & + & DISTRIBUTED_VECTOR%CMISS%TRANSFERS(domain_idx)%SEND_TAG_NUMBER,worldCommunicator, & & DISTRIBUTED_VECTOR%CMISS%TRANSFERS(domain_idx)%MPI_SEND_REQUEST,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ISEND",MPI_IERROR,ERR,ERROR,*999) IF(DIAGNOSTICS5) THEN @@ -8387,8 +8378,7 @@ SUBROUTINE DISTRIBUTED_VECTOR_UPDATE_START(DISTRIBUTED_VECTOR,ERR,ERROR,*) & ADJACENT_DOMAINS(domain_idx)%DOMAIN_NUMBER,ERR,ERROR,*999) CALL WRITE_STRING_VALUE(DIAGNOSTIC_OUTPUT_TYPE," Send tag = ",DISTRIBUTED_VECTOR% & & CMISS%TRANSFERS(domain_idx)%SEND_TAG_NUMBER,ERR,ERROR,*999) - CALL WRITE_STRING_VALUE(DIAGNOSTIC_OUTPUT_TYPE," Send comm = ",computationEnvironment% & - & mpiWorldCommunicator,ERR,ERROR,*999) + CALL WRITE_STRING_VALUE(DIAGNOSTIC_OUTPUT_TYPE," Send comm = ",worldCommunicator,ERR,ERROR,*999) CALL WRITE_STRING_VALUE(DIAGNOSTIC_OUTPUT_TYPE," Send request = ",DISTRIBUTED_VECTOR% & & CMISS%TRANSFERS(domain_idx)%MPI_SEND_REQUEST,ERR,ERROR,*999) ENDIF @@ -8396,8 +8386,7 @@ SUBROUTINE DISTRIBUTED_VECTOR_UPDATE_START(DISTRIBUTED_VECTOR,ERR,ERROR,*) CALL MPI_ISEND(DISTRIBUTED_VECTOR%CMISS%TRANSFERS(domain_idx)%SEND_BUFFER_L, & & DISTRIBUTED_VECTOR%CMISS%TRANSFERS(domain_idx)%SEND_BUFFER_SIZE,MPI_LOGICAL, & & DISTRIBUTED_VECTOR%DOMAIN_MAPPING%ADJACENT_DOMAINS(domain_idx)%DOMAIN_NUMBER, & - & DISTRIBUTED_VECTOR%CMISS%TRANSFERS(domain_idx)%SEND_TAG_NUMBER, & - & computationEnvironment%mpiWorldCommunicator, & + & DISTRIBUTED_VECTOR%CMISS%TRANSFERS(domain_idx)%SEND_TAG_NUMBER,worldCommunicator, & & DISTRIBUTED_VECTOR%CMISS%TRANSFERS(domain_idx)%MPI_SEND_REQUEST,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ISEND",MPI_IERROR,ERR,ERROR,*999) IF(DIAGNOSTICS5) THEN @@ -8409,8 +8398,7 @@ SUBROUTINE DISTRIBUTED_VECTOR_UPDATE_START(DISTRIBUTED_VECTOR,ERR,ERROR,*) & ADJACENT_DOMAINS(domain_idx)%DOMAIN_NUMBER,ERR,ERROR,*999) CALL WRITE_STRING_VALUE(DIAGNOSTIC_OUTPUT_TYPE," Send tag = ",DISTRIBUTED_VECTOR% & & CMISS%TRANSFERS(domain_idx)%SEND_TAG_NUMBER,ERR,ERROR,*999) - CALL WRITE_STRING_VALUE(DIAGNOSTIC_OUTPUT_TYPE," Send comm = ", & - & computationEnvironment%mpiWorldCommunicator,ERR,ERROR,*999) + CALL WRITE_STRING_VALUE(DIAGNOSTIC_OUTPUT_TYPE," Send comm = ",worldCommunicator,ERR,ERROR,*999) CALL WRITE_STRING_VALUE(DIAGNOSTIC_OUTPUT_TYPE," Send request = ",DISTRIBUTED_VECTOR% & & CMISS%TRANSFERS(domain_idx)%MPI_SEND_REQUEST,ERR,ERROR,*999) ENDIF diff --git a/src/domain_mappings.f90 b/src/domain_mappings.f90 index 8fb51b61..cd946bfb 100755 --- a/src/domain_mappings.f90 +++ b/src/domain_mappings.f90 @@ -46,6 +46,7 @@ MODULE DOMAIN_MAPPINGS USE BaseRoutines USE ComputationRoutines + USE ComputationAccessRoutines USE INPUT_OUTPUT USE ISO_VARYING_STRING USE KINDS @@ -150,6 +151,7 @@ SUBROUTINE DOMAIN_MAPPINGS_GLOBAL_TO_LOCAL_GET(DOMAIN_MAPPING,GLOBAL_NUMBER,LOCA INTEGER(INTG), INTENT(OUT) :: ERR !=1.AND.GLOBAL_NUMBER<=DOMAIN_MAPPING%NUMBER_OF_GLOBAL) THEN - IF(DOMAIN_MAPPING%GLOBAL_TO_LOCAL_MAP(GLOBAL_NUMBER)%DOMAIN_NUMBER(1)== & - & computationEnvironment%myWorldComputationNodeNumber) THEN + CALL ComputationEnvironment_WorldNodeNumberGet(computationEnvironment,myWorldComputationNodeNumber,err,error,*999) + IF(DOMAIN_MAPPING%GLOBAL_TO_LOCAL_MAP(GLOBAL_NUMBER)%DOMAIN_NUMBER(1)==myWorldComputationNodeNumber) THEN LOCAL_NUMBER=DOMAIN_MAPPING%GLOBAL_TO_LOCAL_MAP(GLOBAL_NUMBER)%LOCAL_NUMBER(1) LOCAL_EXISTS=.TRUE. ENDIF @@ -203,7 +205,7 @@ SUBROUTINE DOMAIN_MAPPINGS_LOCAL_FROM_GLOBAL_CALCULATE(DOMAIN_MAPPING,ERR,ERROR, ENTERS("DOMAIN_MAPPINGS_LOCAL_FROM_GLOBAL_CALCULATE",ERR,ERROR,*999) IF(ASSOCIATED(DOMAIN_MAPPING)) THEN - myWorldComputationNodeNumber=ComputationEnvironment_NodeNumberGet(ERR,ERROR) + CALL ComputationEnvironment_WorldNodeNumberGet(computationEnvironment,myWorldComputationNodeNumber,err,error,*999) IF(ERR/=0) GOTO 999 !Calculate local to global maps from global to local map ALLOCATE(DOMAIN_MAPPING%NUMBER_OF_DOMAIN_LOCAL(0:DOMAIN_MAPPING%NUMBER_OF_DOMAINS-1),STAT=ERR) diff --git a/src/equations_set_routines.f90 b/src/equations_set_routines.f90 index a10803a7..e9c7f449 100644 --- a/src/equations_set_routines.f90 +++ b/src/equations_set_routines.f90 @@ -51,6 +51,7 @@ MODULE EQUATIONS_SET_ROUTINES USE CLASSICAL_FIELD_ROUTINES USE CmissMPI USE ComputationRoutines + USE ComputationAccessRoutines USE Constants USE COORDINATE_ROUTINES USE DISTRIBUTED_MATRIX_VECTOR @@ -6320,9 +6321,9 @@ SUBROUTINE EQUATIONS_SET_BOUNDARY_CONDITIONS_INCREMENT(EQUATIONS_SET,BOUNDARY_CO NULLIFY(PREV_LOADS) NULLIFY(CURRENT_LOADS) - myWorldComputationNodeNumber=ComputationEnvironment_NodeNumberGet(err,error) + CALL ComputationEnvironment_WorldNodeNumberGet(computationEnvironment,myWorldComputationNodeNumber,err,error,*999) - !Take the stored load, scale it down appropriately then apply to the unknown variables + !Take the stored load, scale it down appropriately then apply to the unknown variables IF(ASSOCIATED(EQUATIONS_SET)) THEN IF(DIAGNOSTICS1) THEN CALL WriteStringValue(DIAGNOSTIC_OUTPUT_TYPE," equations set",EQUATIONS_SET%USER_NUMBER,err,error,*999) diff --git a/src/field_IO_routines.f90 b/src/field_IO_routines.f90 index d72c30c9..f44468fb 100755 --- a/src/field_IO_routines.f90 +++ b/src/field_IO_routines.f90 @@ -27,7 +27,7 @@ !> Auckland, the University of Oxford and King's College, London. !> All Rights Reserved. !> -!> Contributor(s): +!> Contributor(s): Heye Zhang !> !> Alternatively, the contents of this file may be used under the terms of !> either the GNU General Public License Version 2 or later (the "GPL"), or @@ -51,6 +51,7 @@ MODULE FIELD_IO_ROUTINES USE MESH_ROUTINES USE NODE_ROUTINES USE ComputationRoutines + USE ComputationAccessRoutines USE COORDINATE_ROUTINES USE ISO_VARYING_STRING USE MACHINE_CONSTANTS @@ -1031,7 +1032,7 @@ SUBROUTINE FIELD_IO_CREATE_FIELDS(NAME, REGION, DECOMPOSITION, FIELD_VALUES_SET_ TYPE(VARYING_STRING) :: CMISS_KEYWORD_FIELDS, CMISS_KEYWORD_NODE, CMISS_KEYWORD_COMPONENTS TYPE(VARYING_STRING) :: CMISS_KEYWORD_VALUE_INDEX, CMISS_KEYWORD_DERIVATIVE INTEGER(INTG), ALLOCATABLE :: tmp_pointer(:), LIST_DEV(:), LIST_DEV_POS(:) - INTEGER(INTG) :: FILE_ID + INTEGER(INTG) :: FILE_ID,worldCommunicator !INTEGER(INTG) :: NUMBER_FIELDS INTEGER(INTG) :: NODAL_USER_NUMBER, NODAL_LOCAL_NUMBER, FIELDTYPE, NUMBER_NODAL_VALUE_LINES, NUMBER_OF_LINES, & & NUMBER_OF_COMPONENTS !, LABEL_TYPE, FOCUS @@ -1055,6 +1056,8 @@ SUBROUTINE FIELD_IO_CREATE_FIELDS(NAME, REGION, DECOMPOSITION, FIELD_VALUES_SET_ GOTO 999 ENDIF + CALL ComputationEnvironment_WorldCommunicatorGet(computationEnvironment,worldCommunicator,err,error,*999) + CMISS_KEYWORD_FIELDS="#Fields=" CMISS_KEYWORD_COMPONENTS="#Components=" CMISS_KEYWORD_VALUE_INDEX="Value index=" @@ -1149,7 +1152,7 @@ SUBROUTINE FIELD_IO_CREATE_FIELDS(NAME, REGION, DECOMPOSITION, FIELD_VALUES_SET_ IF(MASTER_COMPUTATION_NUMBER==myWorldComputationNodeNumber) THEN CALL FIELD_IO_FIELD_INFO(LIST_STR(idx_field), FIELD_IO_FIELD_LABEL, FIELDTYPE, ERR, ERROR, *999) ENDIF - CALL MPI_BCAST(FIELDTYPE,1,MPI_LOGICAL,MASTER_COMPUTATION_NUMBER,computationEnvironment%mpiWorldCommunicator,MPI_IERROR) + CALL MPI_BCAST(FIELDTYPE,1,MPI_LOGICAL,MASTER_COMPUTATION_NUMBER,worldCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_BCAST",MPI_IERROR,ERR,ERROR,*999) !Set FIELD TYPE CALL FIELD_TYPE_SET(FIELD, FIELDTYPE, ERR, ERROR, *999) @@ -1167,8 +1170,7 @@ SUBROUTINE FIELD_IO_CREATE_FIELDS(NAME, REGION, DECOMPOSITION, FIELD_VALUES_SET_ FILE_STATUS="OLD" !broadcasting total_number_of_comps - CALL MPI_BCAST(total_number_of_comps,1,MPI_INTEGER,MASTER_COMPUTATION_NUMBER, & - & computationEnvironment%mpiWorldCommunicator,MPI_IERROR) + CALL MPI_BCAST(total_number_of_comps,1,MPI_INTEGER,MASTER_COMPUTATION_NUMBER,worldCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_BCAST",MPI_IERROR,ERR,ERROR,*999) CALL REALLOCATE( LIST_DEV_POS, total_number_of_comps, & @@ -1176,7 +1178,7 @@ SUBROUTINE FIELD_IO_CREATE_FIELDS(NAME, REGION, DECOMPOSITION, FIELD_VALUES_SET_ DO WHILE(idx_exnode Auckland, the University of Oxford and King's College, London. !> All Rights Reserved. !> -!> Contributor(s): +!> Contributor(s): Caton Little !> !> Alternatively, the contents of this file may be used under the terms of !> either the GNU General Public License Version 2 or later (the "GPL"), or @@ -51,6 +51,7 @@ MODULE FIELDML_INPUT_ROUTINES USE CMISS USE CONSTANTS USE ComputationRoutines + USE ComputationAccessRoutines USE COORDINATE_ROUTINES USE FIELD_ROUTINES USE FIELDML_API @@ -1312,7 +1313,7 @@ SUBROUTINE FieldmlInput_FieldNodalParametersUpdate( FIELDML_INFO, EVALUATOR_NAME !Default to version 1 of each node derivative (value hardcoded in loop) VERSION_NUMBER = 1 - myWorldComputationNodeNumber = ComputationEnvironment_NodeNumberGet(err,error) + CALL ComputationEnvironment_WorldNodeNumberGet(computationEnvironment,myWorldComputationNodeNumber,err,error,*999) CALL DECOMPOSITION_MESH_COMPONENT_NUMBER_GET(FIELD%DECOMPOSITION,meshComponentNumber,err,error,*999) CALL DECOMPOSITION_NODE_DOMAIN_GET(FIELD%DECOMPOSITION,NODE_NUMBER,meshComponentNumber,nodeDomain,err,error,*999) IF(nodeDomain==myWorldComputationNodeNumber) THEN diff --git a/src/fieldml_output_routines.f90 b/src/fieldml_output_routines.f90 index a7d0b809..5bfc0e22 100755 --- a/src/fieldml_output_routines.f90 +++ b/src/fieldml_output_routines.f90 @@ -49,7 +49,7 @@ MODULE FIELDML_OUTPUT_ROUTINES USE BASIS_ROUTINES USE COORDINATE_ROUTINES USE CONSTANTS - USE ComputationRoutines + USE ComputationAccessRoutines USE FIELD_ROUTINES USE FIELDML_API USE FIELDML_TYPES @@ -1629,7 +1629,7 @@ SUBROUTINE FIELDML_OUTPUT_ADD_FIELD_NODE_DOFS( FIELDML_INFO, BASE_NAME, DOF_FORM !Default to version 1 of each node derivative (value hardcoded in loop) VERSION_NUMBER = 1 - myWorldComputationNodeNumber = ComputationEnvironment_NodeNumberGet(err,error) + CALL ComputationEnvironment_WorldNodeNumberGet(computationEnvironment,myWorldComputationNodeNumber,err,error,*999) CALL DECOMPOSITION_MESH_COMPONENT_NUMBER_GET(FIELD%DECOMPOSITION,meshComponentNumber,err,error,*999) CALL DECOMPOSITION_NODE_DOMAIN_GET(FIELD%DECOMPOSITION,I,meshComponentNumber,nodeDomain,err,error,*999) IF(nodeDomain==myWorldComputationNodeNumber) THEN diff --git a/src/finite_elasticity_routines.f90 b/src/finite_elasticity_routines.f90 index 586b1cec..00fd9c90 100644 --- a/src/finite_elasticity_routines.f90 +++ b/src/finite_elasticity_routines.f90 @@ -48,6 +48,7 @@ MODULE FINITE_ELASTICITY_ROUTINES USE BASIS_ROUTINES USE BOUNDARY_CONDITIONS_ROUTINES USE ComputationRoutines + USE ComputationAccessRoutines USE Constants USE CONTROL_LOOP_ROUTINES USE ControlLoopAccessRoutines @@ -152,7 +153,7 @@ SUBROUTINE FiniteElasticity_BoundaryConditionsAnalyticCalculate(EQUATIONS_SET,BO TYPE(VARYING_STRING), INTENT(OUT) :: ERROR !1) THEN !This should work on a single processor but doesn't for mpich2 under windows. Maybe a bug? Avoid for now. CALL MPI_ALLGATHERV(MPI_IN_PLACE,MAX_NUMBER_ELEMENTS_PER_NODE,MPI_INTEGER,DECOMPOSITION%ELEMENT_DOMAIN, & - & RECEIVE_COUNTS,DISPLACEMENTS,MPI_INTEGER,computationEnvironment%mpiWorldCommunicator,MPI_IERROR) + & RECEIVE_COUNTS,DISPLACEMENTS,MPI_INTEGER,worldCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ALLGATHERV",MPI_IERROR,ERR,ERROR,*999) ENDIF @@ -920,8 +918,8 @@ SUBROUTINE DECOMPOSITION_ELEMENT_DOMAIN_SET(DECOMPOSITION,GLOBAL_ELEMENT_NUMBER, MESH_TOPOLOGY=>MESH%TOPOLOGY(DECOMPOSITION%MESH_COMPONENT_NUMBER)%PTR IF(ASSOCIATED(MESH_TOPOLOGY)) THEN IF(GLOBAL_ELEMENT_NUMBER>0.AND.GLOBAL_ELEMENT_NUMBER<=MESH_TOPOLOGY%ELEMENTS%NUMBER_OF_ELEMENTS) THEN - number_computation_nodes=ComputationEnvironment_NumberOfNodesGet(ERR,ERROR) - IF(ERR/=0) GOTO 999 + CALL ComputationEnvironment_NumberOfWorldNodesGet(computationEnvironment,number_computation_nodes, & + & err,error,*999) IF(DOMAIN_NUMBER>=0.AND.DOMAIN_NUMBERdecompositionData%DECOMPOSITION IF(ASSOCIATED(decomposition)) THEN - decompositionElements=>TOPOLOGY%ELEMENTS - IF(ASSOCIATED(decompositionElements)) THEN - elementsMapping=>decomposition%DOMAIN(decomposition%MESH_COMPONENT_NUMBER)%PTR%MAPPINGS%ELEMENTS - IF(ASSOCIATED(elementsMapping)) THEN + CALL ComputationEnvironment_WorldCommunicatorGet(computationEnvironment,worldCommunicator,err,error,*999) + decompositionElements=>TOPOLOGY%ELEMENTS + IF(ASSOCIATED(decompositionElements)) THEN + elementsMapping=>decomposition%DOMAIN(decomposition%MESH_COMPONENT_NUMBER)%PTR%MAPPINGS%ELEMENTS + IF(ASSOCIATED(elementsMapping)) THEN meshComponentNumber=decomposition%MESH_COMPONENT_NUMBER meshData=>decomposition%MESH%TOPOLOGY(meshComponentNumber)%PTR%dataPoints IF(ASSOCIATED(meshData)) THEN - NUMBER_OF_COMPUTATION_NODES=ComputationEnvironment_NumberOfNodesGet(ERR,ERROR) - IF(ERR/=0) GOTO 999 - myWorldComputationNodeNumber=ComputationEnvironment_NodeNumberGet(ERR,ERROR) - IF(ERR/=0) GOTO 999 + CALL ComputationEnvironment_NumberOfWorldNodesGet(computationEnvironment,NUMBER_OF_COMPUTATION_NODES, & + & err,error,*999) + CALL ComputationEnvironment_WorldNodeNumberGet(computationEnvironment,myWorldComputationNodeNumber, & + & err,error,*999) ALLOCATE(decompositionData%numberOfDomainLocal(0:NUMBER_OF_COMPUTATION_NODES-1),STAT=ERR) ALLOCATE(decompositionData%numberOfDomainGhost(0:NUMBER_OF_COMPUTATION_NODES-1),STAT=ERR) ALLOCATE(decompositionData%numberOfElementDataPoints(decompositionElements%NUMBER_OF_GLOBAL_ELEMENTS),STAT=ERR) @@ -1345,11 +1344,11 @@ SUBROUTINE DecompositionTopology_DataPointsCalculate(TOPOLOGY,ERR,ERROR,*) NUMBER_OF_GHOST_DATA=decompositionData%totalNumberOfDataPoints-decompositionData%numberOfDataPoints !Gather number of local data points on all computation nodes CALL MPI_ALLGATHER(NUMBER_OF_LOCAL_DATA,1,MPI_INTEGER,decompositionData% & - & numberOfDomainLocal,1,MPI_INTEGER,computationEnvironment%mpiWorldCommunicator,MPI_IERROR) + & numberOfDomainLocal,1,MPI_INTEGER,worldCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ALLGATHER",MPI_IERROR,ERR,ERROR,*999) !Gather number of ghost data points on all computation nodes CALL MPI_ALLGATHER(NUMBER_OF_GHOST_DATA,1,MPI_INTEGER,decompositionData% & - & numberOfDomainGhost,1,MPI_INTEGER,computationEnvironment%mpiWorldCommunicator,MPI_IERROR) + & numberOfDomainGhost,1,MPI_INTEGER,worldCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ALLGATHER",MPI_IERROR,ERR,ERROR,*999) ELSE CALL FlagError("Mesh data points topology is not associated.",ERR,ERROR,*999) @@ -1374,6 +1373,7 @@ SUBROUTINE DecompositionTopology_DataPointsCalculate(TOPOLOGY,ERR,ERROR,*) RETURN 999 ERRORSEXITS("DecompositionTopology_DataPointsCalculate",ERR,ERROR) RETURN 1 + END SUBROUTINE DecompositionTopology_DataPointsCalculate ! @@ -4071,10 +4071,11 @@ SUBROUTINE DOMAIN_MAPPINGS_ELEMENTS_CALCULATE(DOMAIN,ERR,ERROR,*) IF(ASSOCIATED(DOMAIN%MESH)) THEN MESH=>DOMAIN%MESH component_idx=DOMAIN%MESH_COMPONENT_NUMBER - myWorldComputationNodeNumber=ComputationEnvironment_NodeNumberGet(ERR,ERROR) - IF(ERR/=0) GOTO 999 - !Calculate the local and global numbers and set up the mappings + CALL ComputationEnvironment_WorldNodeNumberGet(computationEnvironment,myWorldComputationNodeNumber, & + & err,error,*999) + + !Calculate the local and global numbers and set up the mappings ALLOCATE(ELEMENTS_MAPPING%GLOBAL_TO_LOCAL_MAP(MESH%NUMBER_OF_ELEMENTS),STAT=ERR) IF(ERR/=0) CALL FlagError("Could not allocate element mapping global to local map.",ERR,ERROR,*999) ELEMENTS_MAPPING%NUMBER_OF_GLOBAL=MESH%TOPOLOGY(component_idx)%PTR%ELEMENTS%NUMBER_OF_ELEMENTS @@ -4440,12 +4441,12 @@ SUBROUTINE DOMAIN_MAPPINGS_NODES_DOFS_CALCULATE(DOMAIN,ERR,ERROR,*) MESH=>DOMAIN%MESH component_idx=DOMAIN%MESH_COMPONENT_NUMBER MESH_TOPOLOGY=>MESH%TOPOLOGY(component_idx)%PTR - - numberOfWorldComputationNodes=ComputationEnvironment_NumberOfNodesGet(ERR,ERROR) - IF(ERR/=0) GOTO 999 - myWorldComputationNodeNumber=ComputationEnvironment_NodeNumberGet(ERR,ERROR) - IF(ERR/=0) GOTO 999 - + + CALL ComputationEnvironment_NumberOfWorldNodesGet(computationEnvironment,numberOfWorldComputationNodes, & + & err,error,*999) + CALL ComputationEnvironment_WorldNodeNumberGet(computationEnvironment,myWorldComputationNodeNumber, & + & err,error,*999) + !Calculate the local and global numbers and set up the mappings ALLOCATE(NODES_MAPPING%GLOBAL_TO_LOCAL_MAP(MESH_TOPOLOGY%NODES%numberOfNodes),STAT=ERR) IF(ERR/=0) CALL FlagError("Could not allocate node mapping global to local map.",ERR,ERROR,*999) @@ -9791,11 +9792,7 @@ SUBROUTINE MeshTopology_NodeOnBoundaryGet(meshNodes,userNumber,onBoundary,err,er INTEGER(INTG), INTENT(OUT) :: err !Contains information on a computation work group - TYPE cmfe_ComputationWorkGroupType + !>Contains information on a work group + TYPE cmfe_WorkGroupType PRIVATE - TYPE(ComputationWorkGroupType), POINTER :: computationWorkGroup - END TYPE cmfe_ComputationWorkGroupType + TYPE(WorkGroupType), POINTER :: workGroup + END TYPE cmfe_WorkGroupType !Module variables @@ -355,7 +356,7 @@ MODULE OpenCMISS_Iron PUBLIC cmfe_CellMLEquationsType,cmfe_CellMLEquations_Finalise,cmfe_CellMLEquations_Initialise - PUBLIC cmfe_ComputationWorkGroupType,cmfe_ComputationWorkGroup_Initialise + PUBLIC cmfe_WorkGroupType,cmfe_WorkGroup_Initialise,cmfe_WorkGroup_Finalise PUBLIC cmfe_ControlLoopType,cmfe_ControlLoop_Finalise,cmfe_ControlLoop_Initialise,cmfe_ControlLoop_LoadOutputSet @@ -1253,7 +1254,7 @@ MODULE OpenCMISS_Iron !!================================================================================================================================== !! -!! ComputationEnvironment +!! Computation !! !!================================================================================================================================== @@ -1264,24 +1265,72 @@ MODULE OpenCMISS_Iron !Module variables !Interfaces + + !>Gets the group communicator for a work group + INTERFACE cmfe_WorkGroup_GroupCommunicatorGet + MODULE PROCEDURE cmfe_WorkGroup_GroupCommunicatorGetNumber + MODULE PROCEDURE cmfe_WorkGroup_GroupCommunicatorGetObj + END INTERFACE cmfe_WorkGroup_GroupCommunicatorGet + + !>Returns the label of a work group. + INTERFACE cmfe_WorkGroup_LabelGet + MODULE PROCEDURE cmfe_WorkGroup_LabelGetCNumber + MODULE PROCEDURE cmfe_WorkGroup_LabelGetCObj + MODULE PROCEDURE cmfe_WorkGroup_LabelGetVSNumber + MODULE PROCEDURE cmfe_WorkGroup_LabelGetVSObj + END INTERFACE cmfe_WorkGroup_LabelGet + + !>Sets/changes the label of a work group. + INTERFACE cmfe_WorkGroup_LabelSet + MODULE PROCEDURE cmfe_WorkGroup_LabelSetCNumber + MODULE PROCEDURE cmfe_WorkGroup_LabelSetCObj + MODULE PROCEDURE cmfe_WorkGroup_LabelSetVSNumber + MODULE PROCEDURE cmfe_WorkGroup_LabelSetVSObj + END INTERFACE cmfe_WorkGroup_LabelSet + + !>Gets the group node number in a work group + INTERFACE cmfe_WorkGroup_GroupNodeNumberGet + MODULE PROCEDURE cmfe_WorkGroup_GroupNodeNumberGetNumber + MODULE PROCEDURE cmfe_WorkGroup_GroupNodeNumberGetObj + END INTERFACE cmfe_WorkGroup_GroupNodeNumberGet + + !>Gets the number of group nodes in a work group + INTERFACE cmfe_WorkGroup_NumberOfGroupNodesGet + MODULE PROCEDURE cmfe_WorkGroup_NumberOfGroupNodesGetNumber + MODULE PROCEDURE cmfe_WorkGroup_NumberOfGroupNodesGetObj + END INTERFACE cmfe_WorkGroup_NumberOfGroupNodesGet + + !>Sets/changes the number of group nodes in a work group + INTERFACE cmfe_WorkGroup_NumberOfGroupNodesSet + MODULE PROCEDURE cmfe_WorkGroup_NumberOfGroupNodesSetNumber + MODULE PROCEDURE cmfe_WorkGroup_NumberOfGroupNodesSetObj + END INTERFACE cmfe_WorkGroup_NumberOfGroupNodesSet - PUBLIC cmfe_ComputationWorldCommunicatorGet,cmfe_ComputationWorldCommunicatorSet + PUBLIC cmfe_ComputationEnvironment_NumberOfWorldNodesGet + + PUBLIC cmfe_ComputationEnvironment_WorldCommunicatorGet - PUBLIC cmfe_ComputationNodeNumberGet + PUBLIC cmfe_ComputationEnvironment_WorldNodeNumberGet + + PUBLIC cmfe_ComputationEnvironment_WorldWorkGroupGet + + PUBLIC cmfe_WorkGroup_CreateStart - PUBLIC cmfe_ComputationNumberOfNodesGet + PUBLIC cmfe_WorkGroup_CreateFinish - PUBLIC cmfe_Computation_WorkGroupCreateStart + PUBLIC cmfe_WorkGroup_GroupCommunicatorGet - PUBLIC cmfe_Computation_WorkGroupCreateFinish + PUBLIC cmfe_WorkGroup_GroupNodeNumberGet - PUBLIC cmfe_Computation_WorkGroupSubgroupAdd + PUBLIC cmfe_WorkGroup_LabelGet,cmfe_WorkGroup_LabelSet + + PUBLIC cmfe_WorkGroup_NumberOfGroupNodesGet,cmfe_WorkGroup_NumberOfGroupNodesSet PUBLIC cmfe_Decomposition_WorldWorkGroupSet !!================================================================================================================================== !! -!! CONSTANTS +!! Constants !! !!================================================================================================================================== @@ -8076,26 +8125,51 @@ END SUBROUTINE cmfe_CellMLEquations_Initialise !================================================================================================================================ ! - !>Initialises a cmfe_ComputationWorkGroupType object. - SUBROUTINE cmfe_ComputationWorkGroup_Initialise(cmfe_ComputationWorkGroup,err) - !DLLEXPORT(cmfe_ComputationWorkGroup_Initialise) + !>Finalises a cmfe_WorkGroupType object. + SUBROUTINE cmfe_WorkGroup_Finalise(cmfe_WorkGroup,err) + !DLLEXPORT(cmfe_WorkGroup_Finalise) !Argument variables - TYPE(cmfe_ComputationWorkGroupType), INTENT(OUT) :: cmfe_ComputationWorkGroup !Initialises a cmfe_WorkGroupType object. + SUBROUTINE cmfe_WorkGroup_Initialise(cmfe_WorkGroup,err) + !DLLEXPORT(cmfe_WorkGroup_Initialise) + + !Argument variables + TYPE(cmfe_WorkGroupType), INTENT(OUT) :: cmfe_WorkGroup !Returns the current world communicator. - SUBROUTINE cmfe_ComputationWorldCommunicatorGet(worldCommunicator,err) - !DLLEXPORT(cmfe_ComputationWorldCommunicatorGet) + !>Returns the number of computation nodes in the world communicator. + SUBROUTINE cmfe_ComputationEnvironment_NumberOfWorldNodesGet(numberOfWorldNodes,err) + !DLLEXPORT(cmfe_ComputationEnvironment_NumberOfWorldNodesGet) !Argument variables - INTEGER(INTG), INTENT(OUT) :: worldCommunicator !Sets/changes the current world communicator. - SUBROUTINE cmfe_ComputationWorldCommunicatorSet(worldCommunicator,err) - !DLLEXPORT(cmfe_ComputationWorldCommunicatorSet) + !>Returns the current world communicator for the computation environment. + SUBROUTINE cmfe_ComputationEnvironment_WorldCommunicatorGet(worldCommunicator,err) + !DLLEXPORT(cmfe_ComputationEnvironment_WorldCommunicatorGet) !Argument variables - INTEGER(INTG), INTENT(IN) :: worldCommunicator !Returns the computation node number of the running process. - SUBROUTINE cmfe_ComputationNodeNumberGet(nodeNumber,err) - !DLLEXPORT(cmfe_ComputationNodeNumberGet) + !>Returns the computation node number in the world communicator. + SUBROUTINE cmfe_ComputationEnvironment_WorldNodeNumberGet(worldNodeNumber,err) + !DLLEXPORT(cmfe_ComputationEnvironment_WorldNodeNumberGet) !Argument variables - INTEGER(INTG), INTENT(OUT) :: nodeNumber !Returns the number of computation nodes for the running process. - SUBROUTINE cmfe_ComputationNumberOfNodesGet(numberOfNodes,err) - !DLLEXPORT(cmfe_ComputationNumberOfNodesGet) + !>Returns the world work group for the computation environment. + SUBROUTINE cmfe_ComputationEnvironment_WorldWorkGroupGet(worldWorkGroup,err) + !DLLEXPORT(cmfe_ComputationEnvironment_WorldWorkGroupGet) !Argument variables - INTEGER(INTG), INTENT(OUT) :: numberOfNodes !Start the creation of a computation work group under a parent work group - SUBROUTINE cmfe_Computation_WorkGroupCreateStart(parentWorkGroup,numberOfComputationNodes,workGroup,err) - !DLLEXPORT(cmfe_Computation_WorkGroupCreateStart) + SUBROUTINE cmfe_WorkGroup_CreateStart(userNumber,parentWorkGroup,workGroup,err) + !DLLEXPORT(cmfe_WorkGroup_CreateStart) !Argument Variables - TYPE(cmfe_ComputationWorkGroupType), INTENT(INOUT) :: parentWorkGroup !Finish the creation of a computation work group - SUBROUTINE cmfe_Computation_WorkGroupCreateFinish(workGroup,err) - !DLLEXPORT(cmfe_Computation_WorkGroupCreateFinish) + SUBROUTINE cmfe_WorkGroup_CreateFinish(workGroup,err) + !DLLEXPORT(cmfe_WorkGroup_CreateFinish) + !Argument Variables + TYPE(cmfe_WorkGroupType), INTENT(INOUT) :: workGroup !Returns the group communicator for a work group specified by a user number. + SUBROUTINE cmfe_WorkGroup_GroupCommunicatorGetNumber(workGroupUserNumber,groupCommunicator,err) + !DLLEXPORT(cmfe_WorkGroup_GroupCommunicatorNumber) + !Argument Variables + INTEGER(INTG), INTENT(IN) :: workGroupUserNumber !Returns the group communicator for a work group specified by an object. + SUBROUTINE cmfe_WorkGroup_GroupCommunicatorGetObj(workGroup,groupCommunicator,err) + !DLLEXPORT(cmfe_WorkGroup_GroupCommunicatorGetObj) !Argument Variables - TYPE(cmfe_ComputationWorkGroupType), INTENT(INOUT) :: workGroup !Returns the group node number a work group specified by a user number. + SUBROUTINE cmfe_WorkGroup_GroupNodeNumberGetNumber(workGroupUserNumber,groupNodeNumber,err) + !DLLEXPORT(cmfe_WorkGroup_GroupNodeNumberGetNumber) + !Argument Variables + INTEGER(INTG), INTENT(IN) :: workGroupUserNumber !Add a work sub-group to the parent work group based on the computational requirements - SUBROUTINE cmfe_Computation_WorkGroupSubGroupAdd(parentWorkGroup,numberComputationNodes,addedWorkGroup,err) - !DLLEXPORT(cmfe_Computation_WorkGroupSubGroupAdd) + !>Returns the group node number for a work group specified by an object. + SUBROUTINE cmfe_WorkGroup_GroupNodeNumberGetObj(workGroup,groupNodeNumber,err) + !DLLEXPORT(cmfe_WorkGroup_GroupNodeNumberGetObj) !Argument Variables - TYPE(cmfe_ComputationWorkGroupType), INTENT(INOUT) :: parentWorkGroup - TYPE(cmfe_ComputationWorkGroupType), INTENT(INOUT) :: addedWorkGroup - INTEGER(INTG),INTENT(IN) :: numberComputationNodes + TYPE(cmfe_WorkGroupType), INTENT(INOUT) :: workGroup !Returns the character label a work group specified by a user number. + SUBROUTINE cmfe_WorkGroup_LabelGetCNumber(workGroupUserNumber,label,err) + !DLLEXPORT(cmfe_WorkGroup_LabelGetCNumber) + !Argument Variables + INTEGER(INTG), INTENT(IN) :: workGroupUserNumber !Returns the character label for a work group specified by an object. + SUBROUTINE cmfe_WorkGroup_LabelGetCObj(workGroup,label,err) + !DLLEXPORT(cmfe_WorkGroup_LabelGetCObj) + !Argument Variables + TYPE(cmfe_WorkGroupType), INTENT(INOUT) :: workGroup !Returns the varying string label a work group specified by a user number. + SUBROUTINE cmfe_WorkGroup_LabelGetVSNumber(workGroupUserNumber,label,err) + !DLLEXPORT(cmfe_WorkGroup_LabelGetVSNumber) + !Argument Variables + INTEGER(INTG), INTENT(IN) :: workGroupUserNumber !Returns the varying string label for a work group specified by an object. + SUBROUTINE cmfe_WorkGroup_LabelGetVSObj(workGroup,label,err) + !DLLEXPORT(cmfe_WorkGroup_LabelGetVSObj) + !Argument Variables + TYPE(cmfe_WorkGroupType), INTENT(INOUT) :: workGroup !Sets/changes the character label a work group specified by a user number. + SUBROUTINE cmfe_WorkGroup_LabelSetCNumber(workGroupUserNumber,label,err) + !DLLEXPORT(cmfe_WorkGroup_LabelSetCNumber) + !Argument Variables + INTEGER(INTG), INTENT(IN) :: workGroupUserNumber !Sets/changes the character label for a work group specified by an object. + SUBROUTINE cmfe_WorkGroup_LabelSetCObj(workGroup,label,err) + !DLLEXPORT(cmfe_WorkGroup_LabelSetCObj) + !Argument Variables + TYPE(cmfe_WorkGroupType), INTENT(INOUT) :: workGroup !Sets/changes the varying string label a work group specified by a user number. + SUBROUTINE cmfe_WorkGroup_LabelSetVSNumber(workGroupUserNumber,label,err) + !DLLEXPORT(cmfe_WorkGroup_LabelSetVSNumber) + !Argument Variables + INTEGER(INTG), INTENT(IN) :: workGroupUserNumber !Sets/changes the varying string label for a work group specified by an object. + SUBROUTINE cmfe_WorkGroup_LabelSetVSObj(workGroup,label,err) + !DLLEXPORT(cmfe_WorkGroup_LabelSetVSObj) + !Argument Variables + TYPE(cmfe_WorkGroupType), INTENT(INOUT) :: workGroup !Returns the group number of nodes in a work group specified by a user number. + SUBROUTINE cmfe_WorkGroup_NumberOfGroupNodesGetNumber(workGroupUserNumber,numberOfGroupNodes,err) + !DLLEXPORT(cmfe_WorkGroup_NumberOfGroupNodesGetNumber) + !Argument Variables + INTEGER(INTG), INTENT(IN) :: workGroupUserNumber !Returns the group number of nodes for a work group specified by an object. + SUBROUTINE cmfe_WorkGroup_NumberOfGroupNodesGetObj(workGroup,numberOfGroupNodes,err) + !DLLEXPORT(cmfe_WorkGroup_NumberOfGroupNodesGetObj) + !Argument Variables + TYPE(cmfe_WorkGroupType), INTENT(INOUT) :: workGroup !Sets/Changes the group number of nodes for a work group specified by a user number. + SUBROUTINE cmfe_WorkGroup_NumberOfGroupNodesSetNumber(workGroupUserNumber,numberOfGroupNodes,err) + !DLLEXPORT(cmfe_WorkGroup_NumberOfGroupNodesSetNumber) + !Argument Variables + INTEGER(INTG), INTENT(IN) :: workGroupUserNumber !Sets/Changes the group number of nodes for a work group specified by an object. + SUBROUTINE cmfe_WorkGroup_NumberOfGroupNodesSetObj(workGroup,numberOfGroupNodes,err) + !DLLEXPORT(cmfe_WorkGroup_NumberOfGroupNodesSetObj) + !Argument Variables + TYPE(cmfe_WorkGroupType), INTENT(INOUT) :: workGroup ! REGION%equations_sets%equations_sets(EQUATIONS_SET_GLOBAL_NUMBER)%ptr NULLIFY(SOURCE_FIELD) COMPUTATION_DOMAIN=>REGION%MESHES%MESHES(1) & & %ptr%DECOMPOSITIONS%DECOMPOSITIONS(1)%ptr%DOMAIN(1)%ptr - myWorldComputationNodeNumber = ComputationEnvironment_NodeNumberGet(ERR,ERROR) NumberOfDimensions = COMPUTATION_DOMAIN%NUMBER_OF_DIMENSIONS NumberOfNodes = COMPUTATION_DOMAIN%TOPOLOGY%NODES%NUMBER_OF_NODES NodesInMeshComponent = REGION%meshes%meshes(1)%ptr%topology(1)%ptr%nodes%numberOfNodes diff --git a/src/reaction_diffusion_equation_routines.f90 b/src/reaction_diffusion_equation_routines.f90 index 05c4525c..edc6c7f9 100755 --- a/src/reaction_diffusion_equation_routines.f90 +++ b/src/reaction_diffusion_equation_routines.f90 @@ -48,6 +48,7 @@ MODULE REACTION_DIFFUSION_EQUATION_ROUTINES USE BASIS_ROUTINES USE BOUNDARY_CONDITIONS_ROUTINES USE ComputationRoutines + USE ComputationAccessRoutines USE Constants USE CONTROL_LOOP_ROUTINES USE ControlLoopAccessRoutines @@ -1558,7 +1559,8 @@ SUBROUTINE REACTION_DIFFUSION_POST_SOLVE_OUTPUT_DATA(CONTROL_LOOP,SOLVER,err,err CURRENT_LOOP_ITERATION=CONTROL_LOOP%TIME_LOOP%ITERATION_NUMBER OUTPUT_FREQUENCY=CONTROL_LOOP%TIME_LOOP%OUTPUT_NUMBER - myWorldComputationNodeNumber = ComputationEnvironment_NodeNumberGet(err,error) + CALL ComputationEnvironment_WorldNodeNumberGet(computationEnvironment,myWorldComputationNodeNumber, & + & err,error,*999) IF(OUTPUT_FREQUENCY>0) THEN IF(MOD(CURRENT_LOOP_ITERATION,OUTPUT_FREQUENCY)==0) THEN IF(CONTROL_LOOP%TIME_LOOP%CURRENT_TIME<=CONTROL_LOOP%TIME_LOOP%STOP_TIME) THEN diff --git a/src/region_routines.f90 b/src/region_routines.f90 index 4be8544e..6885bf03 100755 --- a/src/region_routines.f90 +++ b/src/region_routines.f90 @@ -278,7 +278,7 @@ END SUBROUTINE REGION_CREATE_START !================================================================================================================================ ! - !>Destroys a region given by USER_NUMBER and all sub-regions under it. \todo create destroy by pointer method. \see OPENCMISS::Iron::cmfe_RegionDestroy + !>Destroys a region given by USER_NUMBER and all sub-regions under it. \todo create destroy by pointer method. \see OpenCMISS::Iron::cmfe_Region_Destroy RECURSIVE SUBROUTINE REGION_DESTROY_NUMBER(USER_NUMBER,ERR,ERROR,*) !Argument variables diff --git a/src/solver_access_routines.f90 b/src/solver_access_routines.f90 index f4983319..241c1492 100644 --- a/src/solver_access_routines.f90 +++ b/src/solver_access_routines.f90 @@ -250,7 +250,6 @@ SUBROUTINE Solver_SolversGet(solver,solvers,err,error,*) INTEGER(INTG), INTENT(OUT) :: err !SOLVER_MAPPING%ROW_DOFS_MAPPING ALLOCATE(ROW_DOMAIN_MAPPING%GLOBAL_TO_LOCAL_MAP(NUMBER_OF_GLOBAL_SOLVER_ROWS),STAT=ERR) IF(ERR/=0) CALL FlagError("Could not allocate row dofs mapping global to local map.",ERR,ERROR,*999) @@ -788,7 +787,7 @@ SUBROUTINE SOLVER_MAPPING_CALCULATE(SOLVER_MAPPING,ERR,ERROR,*) IF(err/=0) CALL FlagError("Could not allocate dummy DOF coupling values.",err,error,*999) dummyDofCoupling%numberOfDofs=1 !Loop over the ranks to ensure that the lowest ranks have the lowest numbered solver variables - DO rank=0,computationEnvironment%numberOfWorldComputationNodes-1 + DO rank=0,numberOfWorldComputationNodes-1 NUMBER_OF_LOCAL_SOLVER_ROWS=0 !Calculate the solver row <-> equations row & interface row mappings. @@ -1226,9 +1225,9 @@ SUBROUTINE SOLVER_MAPPING_CALCULATE(SOLVER_MAPPING,ERR,ERROR,*) !dof_type is 1 for domain local DOFs and 2 for ghost DOFs ALLOCATE(RANK_GLOBAL_COLS_LISTS(2,SOLVER_MAPPING%NUMBER_OF_EQUATIONS_SETS+SOLVER_MAPPING% & & NUMBER_OF_INTERFACE_CONDITIONS,SOLVER_MAPPING%VARIABLES_LIST(solver_matrix_idx)%NUMBER_OF_VARIABLES, & - & 0:computationEnvironment%numberOfWorldComputationNodes-1),STAT=ERR) + & 0:numberOfWorldComputationNodes-1),STAT=ERR) IF(ERR/=0) CALL FlagError("Could not allocate rank global columns lists.",ERR,ERROR,*999) - DO rank=0,computationEnvironment%numberOfWorldComputationNodes-1 + DO rank=0,numberOfWorldComputationNodes-1 DO solver_variable_idx=1,SOLVER_MAPPING%VARIABLES_LIST(solver_matrix_idx)%NUMBER_OF_VARIABLES DO equations_idx=1,SOLVER_MAPPING%NUMBER_OF_EQUATIONS_SETS+SOLVER_MAPPING%NUMBER_OF_INTERFACE_CONDITIONS DO dof_type=1,2 @@ -1870,13 +1869,13 @@ SUBROUTINE SOLVER_MAPPING_CALCULATE(SOLVER_MAPPING,ERR,ERROR,*) IF(ERR/=0) CALL FlagError("Could not allocate solver col to equations sets map column dofs mapping.",ERR,ERROR,*999) !!TODO: what is the real number of domains for a solver??? CALL DOMAIN_MAPPINGS_MAPPING_INITIALISE(SOLVER_MAPPING%SOLVER_COL_TO_EQUATIONS_COLS_MAP(solver_matrix_idx)% & - & COLUMN_DOFS_MAPPING,computationEnvironment%numberOfWorldComputationNodes,ERR,ERROR,*999) + & COLUMN_DOFS_MAPPING,numberOfWorldComputationNodes,ERR,ERROR,*999) COL_DOMAIN_MAPPING=>SOLVER_MAPPING%SOLVER_COL_TO_EQUATIONS_COLS_MAP(solver_matrix_idx)%COLUMN_DOFS_MAPPING ALLOCATE(COL_DOMAIN_MAPPING%GLOBAL_TO_LOCAL_MAP(NUMBER_OF_GLOBAL_SOLVER_DOFS),STAT=ERR) IF(ERR/=0) CALL FlagError("Could not allocate column dofs mapping global to local.",ERR,ERROR,*999) COL_DOMAIN_MAPPING%NUMBER_OF_GLOBAL=NUMBER_OF_GLOBAL_SOLVER_DOFS ALLOCATE(VARIABLE_RANK_PROCESSED(SOLVER_MAPPING%VARIABLES_LIST(solver_matrix_idx)%NUMBER_OF_VARIABLES, & - & 0:computationEnvironment%numberOfWorldComputationNodes-1),STAT=ERR) + & 0:numberOfWorldComputationNodes-1),STAT=ERR) IF(ERR/=0) CALL FlagError("Could not allocate variable rank processed.",ERR,ERROR,*999) VARIABLE_RANK_PROCESSED=.FALSE. !Calculate the column mappings @@ -2260,7 +2259,7 @@ SUBROUTINE SOLVER_MAPPING_CALCULATE(SOLVER_MAPPING,ERR,ERROR,*) DOF_MAP(solver_variable_idx)%PTR=0 ENDDO !solver_variable_idx - ALLOCATE(solver_local_dof(0:computationEnvironment%numberOfWorldComputationNodes-1),STAT=ERR) + ALLOCATE(solver_local_dof(0:numberOfWorldComputationNodes-1),STAT=ERR) IF(ERR/=0) CALL FlagError("Could not allocate solver local dof array.",ERR,ERROR,*999) ! @@ -2271,7 +2270,7 @@ SUBROUTINE SOLVER_MAPPING_CALCULATE(SOLVER_MAPPING,ERR,ERROR,*) solver_global_dof=0 solver_local_dof=0 DO dof_type=1,2 - DO rank=0,computationEnvironment%numberOfWorldComputationNodes-1 + DO rank=0,numberOfWorldComputationNodes-1 DO solver_variable_idx=1,SOLVER_MAPPING%VARIABLES_LIST(solver_matrix_idx)%NUMBER_OF_VARIABLES diff --git a/src/solver_routines.f90 b/src/solver_routines.f90 index de41f789..09a3bb89 100644 --- a/src/solver_routines.f90 +++ b/src/solver_routines.f90 @@ -53,6 +53,7 @@ MODULE SOLVER_ROUTINES USE CmissPetsc USE CmissPetscTypes USE ComputationRoutines + USE ComputationAccessRoutines USE Constants USE DISTRIBUTED_MATRIX_VECTOR USE EquationsAccessRoutines @@ -9717,6 +9718,7 @@ SUBROUTINE SOLVER_LINEAR_DIRECT_CREATE_FINISH(LINEAR_DIRECT_SOLVER,ERR,ERROR,*) INTEGER(INTG), INTENT(OUT) :: ERR !LINEAR_SOLVER%SOLVER IF(ASSOCIATED(SOLVER)) THEN + CALL ComputationEnvironment_WorldCommunicatorGet(computationEnvironment,worldCommunicator,err,error,*999) SELECT CASE(LINEAR_DIRECT_SOLVER%DIRECT_SOLVER_TYPE) CASE(SOLVER_DIRECT_LU) IF(ASSOCIATED(SOLVER%LINKING_SOLVER)) THEN @@ -9807,7 +9810,7 @@ SUBROUTINE SOLVER_LINEAR_DIRECT_CREATE_FINISH(LINEAR_DIRECT_SOLVER,ERR,ERROR,*) !Nothing else to do CASE(SOLVER_MUMPS_LIBRARY,SOLVER_SUPERLU_LIBRARY,SOLVER_PASTIX_LIBRARY,SOLVER_LAPACK_LIBRARY) !Set up solver through PETSc - CALL Petsc_KSPCreate(computationEnvironment%mpiWorldCommunicator,LINEAR_DIRECT_SOLVER%KSP,ERR,ERROR,*999) + CALL Petsc_KSPCreate(worldCommunicator,LINEAR_DIRECT_SOLVER%KSP,ERR,ERROR,*999) !Set any further KSP options from the command line options CALL Petsc_KSPSetFromOptions(LINEAR_DIRECT_SOLVER%KSP,ERR,ERROR,*999) @@ -10923,6 +10926,7 @@ SUBROUTINE SOLVER_LINEAR_ITERATIVE_CREATE_FINISH(LINEAR_ITERATIVE_SOLVER,ERR,ERR INTEGER(INTG), INTENT(OUT) :: ERR !LINEAR_SOLVER%SOLVER IF(ASSOCIATED(SOLVER)) THEN + CALL ComputationEnvironment_WorldCommunicatorGet(computationEnvironment,worldCommunicator,err,error,*999) !Should really check iterative types here and then the solver library but as they are all PETSc for now hold off. SELECT CASE(LINEAR_ITERATIVE_SOLVER%SOLVER_LIBRARY) CASE(SOLVER_CMISS_LIBRARY) @@ -11060,7 +11065,7 @@ SUBROUTINE SOLVER_LINEAR_ITERATIVE_CREATE_FINISH(LINEAR_ITERATIVE_SOLVER,ERR,ERR CALL FlagError("Solver linking solve is not associated.",ERR,ERROR,*999) ENDIF ELSE - CALL Petsc_KSPCreate(computationEnvironment%mpiWorldCommunicator,LINEAR_ITERATIVE_SOLVER%KSP,ERR,ERROR,*999) + CALL Petsc_KSPCreate(worldCommunicator,LINEAR_ITERATIVE_SOLVER%KSP,ERR,ERROR,*999) ENDIF !Set the iterative solver type SELECT CASE(LINEAR_ITERATIVE_SOLVER%ITERATIVE_SOLVER_TYPE) @@ -15715,7 +15720,7 @@ SUBROUTINE Solver_QuasiNewtonLinesearchCreateFinish(LINESEARCH_SOLVER,ERR,ERROR, EXTERNAL :: Problem_SolverResidualEvaluatePetsc EXTERNAL :: Problem_SolverConvergenceTestPetsc EXTERNAL :: Problem_SolverNonlinearMonitorPETSC - INTEGER(INTG) :: equations_matrix_idx,equations_set_idx,interface_condition_idx,interface_matrix_idx + INTEGER(INTG) :: equations_matrix_idx,equations_set_idx,interface_condition_idx,interface_matrix_idx,worldCommunicator TYPE(DISTRIBUTED_MATRIX_TYPE), POINTER :: JACOBIAN_MATRIX TYPE(DISTRIBUTED_VECTOR_TYPE), POINTER :: RESIDUAL_VECTOR TYPE(EquationsType), POINTER :: equations @@ -15752,6 +15757,7 @@ SUBROUTINE Solver_QuasiNewtonLinesearchCreateFinish(LINESEARCH_SOLVER,ERR,ERROR, IF(ASSOCIATED(NONLINEAR_SOLVER)) THEN SOLVER=>NONLINEAR_SOLVER%SOLVER IF(ASSOCIATED(SOLVER)) THEN + CALL ComputationEnvironment_WorldCommunicatorGet(computationEnvironment,worldCommunicator,err,error,*999) SOLVER_EQUATIONS=>SOLVER%SOLVER_EQUATIONS IF(ASSOCIATED(SOLVER_EQUATIONS)) THEN SELECT CASE(LINESEARCH_SOLVER%SOLVER_LIBRARY) @@ -15893,7 +15899,7 @@ SUBROUTINE Solver_QuasiNewtonLinesearchCreateFinish(LINESEARCH_SOLVER,ERR,ERROR, ENDIF ENDDO !interface_idx !Create the PETSc SNES solver - CALL Petsc_SnesCreate(computationEnvironment%mpiWorldCommunicator,LINESEARCH_SOLVER%snes,ERR,ERROR,*999) + CALL Petsc_SnesCreate(worldCommunicator,LINESEARCH_SOLVER%snes,ERR,ERROR,*999) !Set the nonlinear solver type to be a Quasi-Newton line search solver CALL Petsc_SnesSetType(LINESEARCH_SOLVER%snes,PETSC_SNESQN,ERR,ERROR,*999) !Following routines don't work for petsc version < 3.5. @@ -16956,7 +16962,7 @@ SUBROUTINE Solver_QuasiNewtonTrustRegionCreateFinish(TRUSTREGION_SOLVER,ERR,ERRO TYPE(VARYING_STRING), INTENT(OUT) :: ERROR !NONLINEAR_SOLVER%SOLVER IF(ASSOCIATED(SOLVER)) THEN + CALL ComputationEnvironment_WorldCommunicatorGet(computationEnvironment,worldCommunicator,err,error,*999) SOLVER_EQUATIONS=>SOLVER%SOLVER_EQUATIONS IF(ASSOCIATED(SOLVER_EQUATIONS)) THEN SELECT CASE(TRUSTREGION_SOLVER%SOLVER_LIBRARY) @@ -17075,7 +17082,7 @@ SUBROUTINE Solver_QuasiNewtonTrustRegionCreateFinish(TRUSTREGION_SOLVER,ERR,ERRO END SELECT CALL SOLVER_MATRICES_CREATE_FINISH(SOLVER_MATRICES,ERR,ERROR,*999) !Create the PETSc SNES solver - CALL Petsc_SnesCreate(computationEnvironment%mpiWorldCommunicator,TRUSTREGION_SOLVER%snes,ERR,ERROR,*999) + CALL Petsc_SnesCreate(worldCommunicator,TRUSTREGION_SOLVER%snes,ERR,ERROR,*999) !Set the nonlinear solver type to be a Quasi-Newton trust region solver CALL Petsc_SnesSetType(TRUSTREGION_SOLVER%snes,PETSC_SNESNEWTONTR,ERR,ERROR,*999) !Set the nonlinear function @@ -18489,7 +18496,7 @@ SUBROUTINE SOLVER_NEWTON_LINESEARCH_CREATE_FINISH(LINESEARCH_SOLVER,ERR,ERROR,*) EXTERNAL :: Problem_SolverResidualEvaluatePetsc EXTERNAL :: Problem_SolverConvergenceTestPetsc EXTERNAL :: Problem_SolverNonlinearMonitorPetsc - INTEGER(INTG) :: equations_matrix_idx,equations_set_idx,interface_condition_idx,interface_matrix_idx + INTEGER(INTG) :: equations_matrix_idx,equations_set_idx,interface_condition_idx,interface_matrix_idx,worldCommunicator TYPE(DISTRIBUTED_MATRIX_TYPE), POINTER :: JACOBIAN_MATRIX TYPE(DISTRIBUTED_VECTOR_TYPE), POINTER :: RESIDUAL_VECTOR TYPE(EquationsType), POINTER :: equations @@ -18526,6 +18533,7 @@ SUBROUTINE SOLVER_NEWTON_LINESEARCH_CREATE_FINISH(LINESEARCH_SOLVER,ERR,ERROR,*) IF(ASSOCIATED(NONLINEAR_SOLVER)) THEN SOLVER=>NONLINEAR_SOLVER%SOLVER IF(ASSOCIATED(SOLVER)) THEN + CALL ComputationEnvironment_WorldCommunicatorGet(computationEnvironment,worldCommunicator,err,error,*999) SOLVER_EQUATIONS=>SOLVER%SOLVER_EQUATIONS IF(ASSOCIATED(SOLVER_EQUATIONS)) THEN SELECT CASE(LINESEARCH_SOLVER%SOLVER_LIBRARY) @@ -18667,7 +18675,7 @@ SUBROUTINE SOLVER_NEWTON_LINESEARCH_CREATE_FINISH(LINESEARCH_SOLVER,ERR,ERROR,*) ENDIF ENDDO !interface_idx !Create the PETSc SNES solver - CALL Petsc_SnesCreate(computationEnvironment%mpiWorldCommunicator,LINESEARCH_SOLVER%snes,ERR,ERROR,*999) + CALL Petsc_SnesCreate(worldCommunicator,LINESEARCH_SOLVER%snes,ERR,ERROR,*999) !Set the nonlinear solver type to be a Newton line search solver CALL Petsc_SnesSetType(LINESEARCH_SOLVER%snes,PETSC_SNESNEWTONLS,ERR,ERROR,*999) @@ -19713,7 +19721,7 @@ SUBROUTINE SOLVER_NEWTON_TRUSTREGION_CREATE_FINISH(TRUSTREGION_SOLVER,ERR,ERROR, TYPE(VARYING_STRING), INTENT(OUT) :: ERROR !NONLINEAR_SOLVER%SOLVER IF(ASSOCIATED(SOLVER)) THEN + CALL ComputationEnvironment_WorldCommunicatorGet(computationEnvironment,worldCommunicator,err,error,*999) SOLVER_EQUATIONS=>SOLVER%SOLVER_EQUATIONS IF(ASSOCIATED(SOLVER_EQUATIONS)) THEN SELECT CASE(TRUSTREGION_SOLVER%SOLVER_LIBRARY) @@ -19832,7 +19841,7 @@ SUBROUTINE SOLVER_NEWTON_TRUSTREGION_CREATE_FINISH(TRUSTREGION_SOLVER,ERR,ERROR, END SELECT CALL SOLVER_MATRICES_CREATE_FINISH(SOLVER_MATRICES,ERR,ERROR,*999) !Create the PETSc SNES solver - CALL Petsc_SnesCreate(computationEnvironment%mpiWorldCommunicator,TRUSTREGION_SOLVER%snes,ERR,ERROR,*999) + CALL Petsc_SnesCreate(worldCommunicator,TRUSTREGION_SOLVER%snes,ERR,ERROR,*999) !Set the nonlinear solver type to be a Newton trust region solver CALL Petsc_SnesSetType(TRUSTREGION_SOLVER%snes,PETSC_SNESNEWTONTR,ERR,ERROR,*999) !Set the solver as the SNES application context diff --git a/tests/CellML/CellMLModelIntegration.f90 b/tests/CellML/CellMLModelIntegration.f90 index c09eeec2..4aabc8a5 100644 --- a/tests/CellML/CellMLModelIntegration.f90 +++ b/tests/CellML/CellMLModelIntegration.f90 @@ -189,8 +189,8 @@ PROGRAM CELLMLINTEGRATIONFORTRANEXAMPLE CALL cmfe_ErrorHandlingModeSet(CMFE_ERRORS_TRAP_ERROR,Err) !Get the computation nodes information - CALL cmfe_ComputationNumberOfNodesGet(NumberOfComputationNodes,Err) - CALL cmfe_ComputationNodeNumberGet(ComputationNodeNumber,Err) + CALL cmfe_ComputationEnvironment_NumberOfWorldNodesGet(NumberOfComputationNodes,Err) + CALL cmfe_ComputationEnvironment_WorldNodeNumberGet(ComputationNodeNumber,Err) ! IF (NumberOfComputationNodes .gt. 2) ! WRITE(*,'(">>NOTE: ",A)') "It doesn't make any sense to use more than 2 computation nodes for this example?" diff --git a/tests/CellML/Monodomain.f90 b/tests/CellML/Monodomain.f90 index a8ef4804..68c79aef 100644 --- a/tests/CellML/Monodomain.f90 +++ b/tests/CellML/Monodomain.f90 @@ -181,8 +181,8 @@ PROGRAM MONODOMAINEXAMPLE CALL cmfe_ErrorHandlingModeSet(CMFE_ERRORS_TRAP_ERROR,Err) !Get the computation nodes information - CALL cmfe_ComputationNumberOfNodesGet(NumberOfComputationNodes,Err) - CALL cmfe_ComputationNodeNumberGet(ComputationNodeNumber,Err) + CALL cmfe_ComputationEnvironment_NumberOfWorldNodesGet(NumberOfComputationNodes,Err) + CALL cmfe_ComputationEnvironment_WorldNodeNumberGet(ComputationNodeNumber,Err) !CALL cmfe_OutputSetOn("Monodomain",Err) diff --git a/tests/ClassicalField/AnalyticNonlinearPoisson.f90 b/tests/ClassicalField/AnalyticNonlinearPoisson.f90 index a40f8769..0834dc48 100644 --- a/tests/ClassicalField/AnalyticNonlinearPoisson.f90 +++ b/tests/ClassicalField/AnalyticNonlinearPoisson.f90 @@ -180,8 +180,8 @@ PROGRAM NONLINEARPOISSONEXAMPLE CALL cmfe_OutputSetOn("NonlinearPoisson",Err) !Get the computation nodes information - CALL cmfe_ComputationNumberOfNodesGet(NumberOfComputationNodes,Err) - CALL cmfe_ComputationNodeNumberGet(ComputationNodeNumber,Err) + CALL cmfe_ComputationEnvironment_NumberOfWorldNodesGet(NumberOfComputationNodes,Err) + CALL cmfe_ComputationEnvironment_WorldNodeNumberGet(ComputationNodeNumber,Err) !Start the creation of a new RC coordinate system CALL cmfe_CoordinateSystem_Initialise(CoordinateSystem,Err) diff --git a/tests/ClassicalField/Laplace.f90 b/tests/ClassicalField/Laplace.f90 index b84b501f..26378da6 100644 --- a/tests/ClassicalField/Laplace.f90 +++ b/tests/ClassicalField/Laplace.f90 @@ -184,8 +184,8 @@ PROGRAM LAPLACEEXAMPLE CALL cmfe_OutputSetOn(Filename,Err) !Get the computation nodes information - CALL cmfe_ComputationNumberOfNodesGet(NumberOfComputationNodes,Err) - CALL cmfe_ComputationNodeNumberGet(ComputationNodeNumber,Err) + CALL cmfe_ComputationEnvironment_NumberOfWorldNodesGet(NumberOfComputationNodes,Err) + CALL cmfe_ComputationEnvironment_WorldNodeNumberGet(ComputationNodeNumber,Err) !Start the creation of a new RC coordinate system CALL cmfe_CoordinateSystem_Initialise(CoordinateSystem,Err) diff --git a/tests/FieldML_IO/cube.f90 b/tests/FieldML_IO/cube.f90 index fa1ff835..ad1b2b83 100644 --- a/tests/FieldML_IO/cube.f90 +++ b/tests/FieldML_IO/cube.f90 @@ -128,8 +128,8 @@ SUBROUTINE ReadCube(worldRegion, inputFilename, region, mesh, geometricField, & ! Get computation nodes information - CALL cmfe_ComputationNumberOfNodesGet(numberOfComputationNodes, err) - CALL cmfe_ComputationNodeNumberGet(computationNodeNumber, err) + CALL cmfe_ComputationEnvironment_NumberOfWorldNodesGet(numberOfComputationNodes, err) + CALL cmfe_ComputationEnvironment_WorldNodeNumberGet(computationNodeNumber, err) ! Initialise FieldML and parse input file diff --git a/tests/FieldML_IO/fieldml_io.f90 b/tests/FieldML_IO/fieldml_io.f90 index 170f1871..24bf9ec8 100644 --- a/tests/FieldML_IO/fieldml_io.f90 +++ b/tests/FieldML_IO/fieldml_io.f90 @@ -65,8 +65,8 @@ PROGRAM IRON_TEST_FIELDML_IO ! Get computation nodes information - CALL cmfe_ComputationNumberOfNodesGet(numberOfComputationNodes, err) - CALL cmfe_ComputationNodeNumberGet(computationNodeNumber, err) + CALL cmfe_ComputationEnvironment_NumberOfWorldNodesGet(numberOfComputationNodes, err) + CALL cmfe_ComputationEnvironment_WorldNodeNumberGet(computationNodeNumber, err) CALL TestFieldMLIOCube(worldRegion) CALL TestFieldMLArguments(worldRegion) diff --git a/tests/FiniteElasticity/Cantilever.f90 b/tests/FiniteElasticity/Cantilever.f90 index be9ef1ca..85085ea9 100644 --- a/tests/FiniteElasticity/Cantilever.f90 +++ b/tests/FiniteElasticity/Cantilever.f90 @@ -209,8 +209,8 @@ PROGRAM CANTILEVEREXAMPLE WRITE(*,'("Scaling type: ", i3)') ScalingType !Get the number of computation nodes and this computation node number - CALL cmfe_ComputationNumberOfNodesGet(NumberOfComputationNodes,Err) - CALL cmfe_ComputationNodeNumberGet(ComputationNodeNumber,Err) + CALL cmfe_ComputationEnvironment_NumberOfWorldNodesGet(NumberOfComputationNodes,Err) + CALL cmfe_ComputationEnvironment_WorldNodeNumberGet(ComputationNodeNumber,Err) NumberOfDomains=NumberOfComputationNodes diff --git a/tests/FiniteElasticity/SimpleShear.f90 b/tests/FiniteElasticity/SimpleShear.f90 index 73cc83fe..c1825d3a 100644 --- a/tests/FiniteElasticity/SimpleShear.f90 +++ b/tests/FiniteElasticity/SimpleShear.f90 @@ -159,8 +159,8 @@ PROGRAM SIMPLESHEAREXAMPLE CALL cmfe_OutputSetOn("SimpleShear",Err) !Get the number of computation nodes and this computation node number - CALL cmfe_ComputationNumberOfNodesGet(NumberOfComputationNodes,Err) - CALL cmfe_ComputationNodeNumberGet(ComputationNodeNumber,Err) + CALL cmfe_ComputationEnvironment_NumberOfWorldNodesGet(NumberOfComputationNodes,Err) + CALL cmfe_ComputationEnvironment_WorldNodeNumberGet(ComputationNodeNumber,Err) NumberGlobalXElements=2 NumberGlobalYElements=2 diff --git a/tests/LinearElasticity/CantileverBeam.f90 b/tests/LinearElasticity/CantileverBeam.f90 index f7435318..002a79fc 100644 --- a/tests/LinearElasticity/CantileverBeam.f90 +++ b/tests/LinearElasticity/CantileverBeam.f90 @@ -233,8 +233,8 @@ SUBROUTINE ANALYTIC_LINEAR_ELASTICITY_GENERIC(NumberGlobalXElements,NumberGlobal FieldDependentNumberOfComponents=NumberOfXi !Get the number of computation nodes and this computation node number - CALL cmfe_ComputationNumberOfNodesGet(NumberOfComputationNodes,Err) - CALL cmfe_ComputationNodeNumberGet(ComputationNodeNumber,Err) + CALL cmfe_ComputationEnvironment_NumberOfWorldNodesGet(NumberOfComputationNodes,Err) + CALL cmfe_ComputationEnvironment_WorldNodeNumberGet(ComputationNodeNumber,Err) !Broadcast the number of elements in the X,Y and Z directions and the number of partitions to the other computation nodes CALL MPI_BCAST(NumberGlobalXElements,1,MPI_INTEGER,0,MPI_COMM_WORLD,MPI_IERROR) diff --git a/tests/LinearElasticity/Extension.f90 b/tests/LinearElasticity/Extension.f90 index f286bdd4..944c7e52 100644 --- a/tests/LinearElasticity/Extension.f90 +++ b/tests/LinearElasticity/Extension.f90 @@ -285,8 +285,8 @@ SUBROUTINE ANALYTIC_LINEAR_ELASTICITY_GENERIC(NumberGlobalXElements,NumberGlobal FieldDependentNumberOfComponents=NumberOfXi !Get the number of computation nodes and this computation node number - CALL cmfe_ComputationNumberOfNodesGet(NumberOfComputationNodes,Err) - CALL cmfe_ComputationNodeNumberGet(ComputationNodeNumber,Err) + CALL cmfe_ComputationEnvironment_NumberOfWorldNodesGet(NumberOfComputationNodes,Err) + CALL cmfe_ComputationEnvironment_WorldNodeNumberGet(ComputationNodeNumber,Err) !Broadcast the number of elements in the X,Y and Z directions and the number of partitions to the other computation nodes CALL MPI_BCAST(NumberGlobalXElements,1,MPI_INTEGER,0,MPI_COMM_WORLD,MPI_IERROR) From 107492b7ac84109ffa72ff2819d0293384833aeb Mon Sep 17 00:00:00 2001 From: Chris Bradley Date: Wed, 27 Sep 2017 15:58:37 +1300 Subject: [PATCH 04/13] Fixes for workgroups. --- bindings/c/tests/laplace.c | 6 +- src/Navier_Stokes_equations_routines.f90 | 2 +- src/computation_access_routines.f90 | 34 +-- src/computation_routines.f90 | 87 ++++--- src/equations_matrices_routines.f90 | 4 +- src/equations_routines.f90 | 2 +- src/opencmiss_iron.f90 | 236 +++++++++++------- tests/CellML/CellMLModelIntegration.f90 | 6 +- tests/CellML/Monodomain.f90 | 6 +- .../AnalyticNonlinearPoisson.f90 | 6 +- tests/ClassicalField/Laplace.f90 | 6 +- tests/FieldML_IO/cube.f90 | 7 +- tests/FieldML_IO/fieldml_io.f90 | 7 +- tests/FiniteElasticity/Cantilever.f90 | 6 +- tests/FiniteElasticity/SimpleShear.f90 | 6 +- tests/LinearElasticity/CantileverBeam.f90 | 6 +- tests/LinearElasticity/Extension.f90 | 6 +- 17 files changed, 268 insertions(+), 165 deletions(-) diff --git a/bindings/c/tests/laplace.c b/bindings/c/tests/laplace.c index 8e9dd05b..30d4afc6 100755 --- a/bindings/c/tests/laplace.c +++ b/bindings/c/tests/laplace.c @@ -90,6 +90,7 @@ int main() { cmfe_BasisType Basis = (cmfe_BasisType)NULL; cmfe_BoundaryConditionsType BoundaryConditions=(cmfe_BoundaryConditionsType)NULL; + cmfe_ComputationEnvironmentType ComputationEnvironment = (cmfe_ComputationEnvironmentType)NULL; cmfe_CoordinateSystemType CoordinateSystem=(cmfe_CoordinateSystemType)NULL,WorldCoordinateSystem=(cmfe_CoordinateSystemType)NULL; cmfe_DecompositionType Decomposition=(cmfe_DecompositionType)NULL; cmfe_EquationsType Equations=(cmfe_EquationsType)NULL; @@ -127,8 +128,9 @@ int main() CHECK_ERROR("Initialising OpenCMISS-Iron"); Err = cmfe_ErrorHandlingModeSet(CMFE_ERRORS_TRAP_ERROR); - Err = cmfe_ComputationEnvironment_NumberOfWorldNodesGet(&NumberOfComputationNodes); - Err = cmfe_ComputationEnvironment_WorldNodeNumberGet(&ComputationNodeNumber); + Err = cmfe_ComputationEnvironment_Initialise(&ComputationEnvironment); + Err = cmfe_ComputationEnvironment_NumberOfWorldNodesGet(ComputationEnvironment,&NumberOfComputationNodes); + Err = cmfe_ComputationEnvironment_WorldNodeNumberGet(ComputationEnvironment,&ComputationNodeNumber); /* Start the creation of a new RC coordinate system */ Err = cmfe_CoordinateSystem_Initialise(&CoordinateSystem); diff --git a/src/Navier_Stokes_equations_routines.f90 b/src/Navier_Stokes_equations_routines.f90 index d22c0099..0f1d45e3 100644 --- a/src/Navier_Stokes_equations_routines.f90 +++ b/src/Navier_Stokes_equations_routines.f90 @@ -8763,7 +8763,7 @@ SUBROUTINE NavierStokes_PreSolveAleUpdateMesh(solver,err,error,*) LOGICAL :: fluidEquationsSetFound=.FALSE. LOGICAL :: solidEquationsSetFound=.FALSE. - ENTERS("NavierStokes_PreSolveALEUpdateMesh",err,error,*999) + ENTERS("NavierStokes_PreSolveAleUpdateMesh",err,error,*999) NULLIFY(controlLoop) NULLIFY(dynamicSolver) diff --git a/src/computation_access_routines.f90 b/src/computation_access_routines.f90 index f7866d6b..edb69536 100644 --- a/src/computation_access_routines.f90 +++ b/src/computation_access_routines.f90 @@ -130,7 +130,7 @@ MODULE ComputationAccessRoutines !Module variables - TYPE(ComputationEnvironmentType), TARGET :: computationEnvironment !Gets the current world communicator. - SUBROUTINE ComputationEnvironment_WorldCommunicatorGet(computationEnvironment,worldCommunicator,err,error,*) + SUBROUTINE ComputationEnvironment_WorldCommunicatorGet(computationEnviron,worldCommunicator,err,error,*) !Argument Variables - TYPE(ComputationEnvironmentType), INTENT(IN) :: computationEnvironment !Returns the number/rank of the computation node in the world communicator - SUBROUTINE ComputationEnvironment_WorldNodeNumberGet(computationEnvironment,worldNodeNumber,err,error,*) + SUBROUTINE ComputationEnvironment_WorldNodeNumberGet(computationEnviron,worldNodeNumber,err,error,*) !Argument Variables - TYPE(ComputationEnvironmentType), INTENT(IN) :: computationEnvironment !Gets the number of computation nodes in the world communicator. - SUBROUTINE ComputationEnvironment_NumberOfWorldNodesGet(computationEnvironment,numberOfWorldNodes,err,error,*) + SUBROUTINE ComputationEnvironment_NumberOfWorldNodesGet(computationEnviron,numberOfWorldNodes,err,error,*) !Argument Variables - TYPE(ComputationEnvironmentType), INTENT(IN) :: computationEnvironment !Gets the world work group from a computational environment. - SUBROUTINE ComputationEnvironment_WorldWorkGroupGet(computationEnvironment,worldWorkGroup,err,error,*) + SUBROUTINE ComputationEnvironment_WorldWorkGroupGet(computationEnviron,worldWorkGroup,err,error,*) !Argument variables - TYPE(ComputationEnvironmentType), INTENT(IN) :: computationEnvironment !computationEnvironment%worldWorkGroup + worldWorkGroup=>computationEnviron%worldWorkGroup !Check world work group is associated. IF(.NOT.ASSOCIATED(worldWorkGroup)) & & CALL FlagError("World work group is not associated for the computation environment.",err,error,*999) diff --git a/src/computation_routines.f90 b/src/computation_routines.f90 index 33eed5c0..18e2390c 100755 --- a/src/computation_routines.f90 +++ b/src/computation_routines.f90 @@ -200,7 +200,7 @@ END SUBROUTINE Computation_MPIComputationNodeFinalise SUBROUTINE Computation_MPIComputationNodeInitialise(computationEnvironment,rank,err,error,*) !Argument Variables - TYPE(ComputationEnvironmentType), INTENT(INOUT) :: computationEnvironment !computationEnvironment%numberOfWorldComputationNodes) THEN @@ -348,6 +348,7 @@ SUBROUTINE Computation_Initialise(err,error,*) cmissMPIInitialised=.TRUE. ENDIF + NULLIFY(computationEnvironment) CALL ComputationEnvironment_Initialise(computationEnvironment,err,error,*999) !Initialise node numbers in base routines. @@ -377,7 +378,7 @@ END SUBROUTINE Computation_Initialise SUBROUTINE ComputationEnvironment_Finalise(computationEnvironment,err,error,*) !Argument Variables - TYPE(ComputationEnvironmentType) :: computationEnvironment !parentWorkGroup%computationEnvironment + workGroup%computationEnvironment=>parentWorkGroup%computationEnvironment !Add the work group to the list of parent sub groups ALLOCATE(newSubGroups(parentWorkGroup%numberOfSubGroups+1),STAT=err) IF(err/=0) CALL FlagError("Could not allocate new sub groups.",err,error,*999) @@ -676,7 +677,7 @@ SUBROUTINE WorkGroup_CreateFinish(workGroup,err,error,*) TYPE(VARYING_STRING),INTENT(OUT) :: error !Contains information on a computation environment + TYPE cmfe_ComputationEnvironmentType + PRIVATE + TYPE(ComputationEnvironmentType), POINTER :: computationEnvironment_ + END TYPE cmfe_ComputationEnvironmentType + !>Contains information on a control loop. TYPE cmfe_ControlLoopType PRIVATE @@ -356,7 +362,7 @@ MODULE OpenCMISS_Iron PUBLIC cmfe_CellMLEquationsType,cmfe_CellMLEquations_Finalise,cmfe_CellMLEquations_Initialise - PUBLIC cmfe_WorkGroupType,cmfe_WorkGroup_Initialise,cmfe_WorkGroup_Finalise + PUBLIC cmfe_ComputationEnvironmentType,cmfe_ComputationEnvironment_Initialise,cmfe_ComputationEnvironment_Finalise PUBLIC cmfe_ControlLoopType,cmfe_ControlLoop_Finalise,cmfe_ControlLoop_Initialise,cmfe_ControlLoop_LoadOutputSet @@ -370,6 +376,10 @@ MODULE OpenCMISS_Iron PUBLIC cmfe_Decomposition_CalculateFacesSet,cmfe_Decomposition_CalculateLinesSet + PUBLIC cmfe_DistributedMatrixType,cmfe_DistributedVectorType + + PUBLIC cmfe_DistributedMatrix_Initialise,cmfe_DistributedVector_Initialise + PUBLIC cmfe_EquationsType,cmfe_Equations_Finalise,cmfe_Equations_Initialise PUBLIC cmfe_EquationsSetType,cmfe_EquationsSet_Finalise,cmfe_EquationsSet_Initialise @@ -394,10 +404,6 @@ MODULE OpenCMISS_Iron PUBLIC cmfe_InterfacePointsConnectivityType,cmfe_InterfacePointsConnectivity_Initialise, & & cmfe_InterfacePointsConnectivity_Finalise - PUBLIC cmfe_DistributedMatrixType,cmfe_DistributedVectorType - - PUBLIC cmfe_DistributedMatrix_Initialise,cmfe_DistributedVector_Initialise - PUBLIC cmfe_MeshType,cmfe_Mesh_Finalise,cmfe_Mesh_Initialise PUBLIC cmfe_MeshElementsType,cmfe_MeshElements_Finalise,cmfe_MeshElements_Initialise @@ -416,6 +422,8 @@ MODULE OpenCMISS_Iron PUBLIC cmfe_SolverEquationsType,cmfe_SolverEquations_Finalise,cmfe_SolverEquations_Initialise + PUBLIC cmfe_WorkGroupType,cmfe_WorkGroup_Initialise,cmfe_WorkGroup_Finalise + !!================================================================================================================================== !! !! ANALYTIC_ANALYSIS_ROUTINES @@ -8125,51 +8133,51 @@ END SUBROUTINE cmfe_CellMLEquations_Initialise !================================================================================================================================ ! - !>Finalises a cmfe_WorkGroupType object. - SUBROUTINE cmfe_WorkGroup_Finalise(cmfe_WorkGroup,err) - !DLLEXPORT(cmfe_WorkGroup_Finalise) + !>Finalises a cmfe_ComputationEnvironmentType object. + SUBROUTINE cmfe_ComputationEnvironment_Finalise(cmfe_ComputationEnvironment,err) + !DLLEXPORT(cmfe_ComputationEnvironment_Finalise) !Argument variables - TYPE(cmfe_WorkGroupType), INTENT(OUT) :: cmfe_WorkGroup !Initialises a cmfe_WorkGroupType object. - SUBROUTINE cmfe_WorkGroup_Initialise(cmfe_WorkGroup,err) - !DLLEXPORT(cmfe_WorkGroup_Initialise) + !>Initialises a cmfe_ComputationEnvironmentType object. + SUBROUTINE cmfe_ComputationEnvironment_Initialise(cmfe_ComputationEnvironment,err) + !DLLEXPORT(cmfe_ComputationEnvironment_Initialise) !Argument variables - TYPE(cmfe_WorkGroupType), INTENT(OUT) :: cmfe_WorkGroup !computationEnvironment - EXITS("cmfe_WorkGroup_Initialise") + EXITS("cmfe_ComputationEnvironment_Initialise") RETURN -999 ERRORSEXITS("cmfe_WorkGroup_Initialise",err,error) +999 ERRORSEXITS("cmfe_ComputationEnvironment_Initialise",err,error) CALL cmfe_HandleError(err,error) RETURN - END SUBROUTINE cmfe_WorkGroup_Initialise + END SUBROUTINE cmfe_ComputationEnvironment_Initialise ! !================================================================================================================================ @@ -8429,6 +8437,56 @@ END SUBROUTINE cmfe_Decomposition_Initialise !================================================================================================================================ ! + !>Initialises a cmfe_DistributedMatrixType object. + SUBROUTINE cmfe_DistributedMatrix_Initialise(cmfe_DistributedMatrix,err) + !DLLEXPORT(cmfe_DistributedMatrix_Initialise) + + !Argument variables + TYPE(cmfe_DistributedMatrixType), INTENT(OUT) :: cmfe_DistributedMatrix !Initialises a cmfe_DistributedVectorType object. + SUBROUTINE cmfe_DistributedVector_Initialise(cmfe_DistributedVector,err) + !DLLEXPORT(cmfe_DistributedVector_Initialise) + + !Argument variables + TYPE(cmfe_DistributedVectorType), INTENT(OUT) :: cmfe_DistributedVector !Finalises a cmfe_EquationsType object. SUBROUTINE cmfe_Equations_Finalise(cmfe_Equations,err) !DLLEXPORT(cmfe_Equations_Finalise) @@ -9064,56 +9122,6 @@ END SUBROUTINE cmfe_History_Initialise !================================================================================================================================ ! - !>Initialises a cmfe_DistributedMatrixType object. - SUBROUTINE cmfe_DistributedMatrix_Initialise(cmfe_DistributedMatrix,err) - !DLLEXPORT(cmfe_DistributedMatrix_Initialise) - - !Argument variables - TYPE(cmfe_DistributedMatrixType), INTENT(OUT) :: cmfe_DistributedMatrix !Initialises a cmfe_DistributedVectorType object. - SUBROUTINE cmfe_DistributedVector_Initialise(cmfe_DistributedVector,err) - !DLLEXPORT(cmfe_DistributedVector_Initialise) - - !Argument variables - TYPE(cmfe_DistributedVectorType), INTENT(OUT) :: cmfe_DistributedVector !Finalises a cmfe_MeshType object. SUBROUTINE cmfe_Mesh_Finalise(cmfe_Mesh,err) !DLLEXPORT(cmfe_Mesh_Finalise) @@ -9566,6 +9574,56 @@ SUBROUTINE cmfe_SolverEquations_Initialise(cmfe_SolverEquations,err) END SUBROUTINE cmfe_SolverEquations_Initialise + ! + !================================================================================================================================ + ! + + !>Finalises a cmfe_WorkGroupType object. + SUBROUTINE cmfe_WorkGroup_Finalise(cmfe_WorkGroup,err) + !DLLEXPORT(cmfe_WorkGroup_Finalise) + + !Argument variables + TYPE(cmfe_WorkGroupType), INTENT(OUT) :: cmfe_WorkGroup !Initialises a cmfe_WorkGroupType object. + SUBROUTINE cmfe_WorkGroup_Initialise(cmfe_WorkGroup,err) + !DLLEXPORT(cmfe_WorkGroup_Initialise) + + !Argument variables + TYPE(cmfe_WorkGroupType), INTENT(OUT) :: cmfe_WorkGroup !Returns the number of computation nodes in the world communicator. - SUBROUTINE cmfe_ComputationEnvironment_NumberOfWorldNodesGet(numberOfWorldNodes,err) + SUBROUTINE cmfe_ComputationEnvironment_NumberOfWorldNodesGet(computationEnvironment,numberOfWorldNodes,err) !DLLEXPORT(cmfe_ComputationEnvironment_NumberOfWorldNodesGet) !Argument variables - !TYPE(cmfe_ComputationEnvironmentType), INTENT(IN) :: computationEnvironment !Returns the current world communicator for the computation environment. - SUBROUTINE cmfe_ComputationEnvironment_WorldCommunicatorGet(worldCommunicator,err) + SUBROUTINE cmfe_ComputationEnvironment_WorldCommunicatorGet(computationEnvironment,worldCommunicator,err) !DLLEXPORT(cmfe_ComputationEnvironment_WorldCommunicatorGet) !Argument variables - !TYPE(cmfe_ComputationEnvironmentType), INTENT(IN) :: computationEnvironment !Returns the computation node number in the world communicator. - SUBROUTINE cmfe_ComputationEnvironment_WorldNodeNumberGet(worldNodeNumber,err) + SUBROUTINE cmfe_ComputationEnvironment_WorldNodeNumberGet(computationEnvironment,worldNodeNumber,err) !DLLEXPORT(cmfe_ComputationEnvironment_WorldNodeNumberGet) !Argument variables - !TYPE(cmfe_ComputationEnvironmentType), INTENT(IN) :: computationEnvironment !Returns the world work group for the computation environment. - SUBROUTINE cmfe_ComputationEnvironment_WorldWorkGroupGet(worldWorkGroup,err) + SUBROUTINE cmfe_ComputationEnvironment_WorldWorkGroupGet(computationEnvironment,worldWorkGroup,err) !DLLEXPORT(cmfe_ComputationEnvironment_WorldWorkGroupGet) !Argument variables - !TYPE(cmfe_ComputationEnvironmentType), INTENT(IN) :: computationEnvironment !>NOTE: ",A)') "It doesn't make any sense to use more than 2 computation nodes for this example?" diff --git a/tests/CellML/Monodomain.f90 b/tests/CellML/Monodomain.f90 index 68c79aef..9e2fecc2 100644 --- a/tests/CellML/Monodomain.f90 +++ b/tests/CellML/Monodomain.f90 @@ -122,6 +122,7 @@ PROGRAM MONODOMAINEXAMPLE TYPE(cmfe_BoundaryConditionsType) :: BoundaryConditions TYPE(cmfe_CellMLType) :: CellML TYPE(cmfe_CellMLEquationsType) :: CellMLEquations + TYPE(cmfe_ComputationEnvironmentType) :: ComputationEnvironment TYPE(cmfe_ControlLoopType) :: ControlLoop TYPE(cmfe_CoordinateSystemType) :: CoordinateSystem,WorldCoordinateSystem TYPE(cmfe_DecompositionType) :: Decomposition @@ -181,8 +182,9 @@ PROGRAM MONODOMAINEXAMPLE CALL cmfe_ErrorHandlingModeSet(CMFE_ERRORS_TRAP_ERROR,Err) !Get the computation nodes information - CALL cmfe_ComputationEnvironment_NumberOfWorldNodesGet(NumberOfComputationNodes,Err) - CALL cmfe_ComputationEnvironment_WorldNodeNumberGet(ComputationNodeNumber,Err) + CALL cmfe_ComputationEnvironment_Initialise(ComputationEnvironment,Err) + CALL cmfe_ComputationEnvironment_NumberOfWorldNodesGet(ComputationEnvironment,NumberOfComputationNodes,Err) + CALL cmfe_ComputationEnvironment_WorldNodeNumberGet(ComputationEnvironment,ComputationNodeNumber,Err) !CALL cmfe_OutputSetOn("Monodomain",Err) diff --git a/tests/ClassicalField/AnalyticNonlinearPoisson.f90 b/tests/ClassicalField/AnalyticNonlinearPoisson.f90 index 0834dc48..dcb7e8eb 100644 --- a/tests/ClassicalField/AnalyticNonlinearPoisson.f90 +++ b/tests/ClassicalField/AnalyticNonlinearPoisson.f90 @@ -97,6 +97,7 @@ PROGRAM NONLINEARPOISSONEXAMPLE !CMISS variables TYPE(cmfe_BasisType) :: Basis + TYPE(cmfe_ComputationEnvironmentType) :: ComputationEnvironment TYPE(cmfe_CoordinateSystemType) :: CoordinateSystem,WorldCoordinateSystem TYPE(cmfe_DecompositionType) :: Decomposition TYPE(cmfe_EquationsType) :: Equations @@ -180,8 +181,9 @@ PROGRAM NONLINEARPOISSONEXAMPLE CALL cmfe_OutputSetOn("NonlinearPoisson",Err) !Get the computation nodes information - CALL cmfe_ComputationEnvironment_NumberOfWorldNodesGet(NumberOfComputationNodes,Err) - CALL cmfe_ComputationEnvironment_WorldNodeNumberGet(ComputationNodeNumber,Err) + CALL cmfe_ComputationEnvironment_Initialise(ComputationEnvironment,Err) + CALL cmfe_ComputationEnvironment_NumberOfWorldNodesGet(ComputationEnvironment,NumberOfComputationNodes,Err) + CALL cmfe_ComputationEnvironment_WorldNodeNumberGet(ComputationEnvironment,ComputationNodeNumber,Err) !Start the creation of a new RC coordinate system CALL cmfe_CoordinateSystem_Initialise(CoordinateSystem,Err) diff --git a/tests/ClassicalField/Laplace.f90 b/tests/ClassicalField/Laplace.f90 index 26378da6..592e8fcd 100644 --- a/tests/ClassicalField/Laplace.f90 +++ b/tests/ClassicalField/Laplace.f90 @@ -97,6 +97,7 @@ PROGRAM LAPLACEEXAMPLE TYPE(cmfe_BasisType) :: Basis TYPE(cmfe_BoundaryConditionsType) :: BoundaryConditions + TYPE(cmfe_ComputationEnvironmentType) :: ComputationEnvironment TYPE(cmfe_CoordinateSystemType) :: CoordinateSystem,WorldCoordinateSystem TYPE(cmfe_DecompositionType) :: Decomposition TYPE(cmfe_EquationsType) :: Equations @@ -184,8 +185,9 @@ PROGRAM LAPLACEEXAMPLE CALL cmfe_OutputSetOn(Filename,Err) !Get the computation nodes information - CALL cmfe_ComputationEnvironment_NumberOfWorldNodesGet(NumberOfComputationNodes,Err) - CALL cmfe_ComputationEnvironment_WorldNodeNumberGet(ComputationNodeNumber,Err) + CALL cmfe_ComputationEnvironment_Initialise(ComputationEnvironment,Err) + CALL cmfe_ComputationEnvironment_NumberOfWorldNodesGet(ComputationEnvironment,NumberOfComputationNodes,Err) + CALL cmfe_ComputationEnvironment_WorldNodeNumberGet(ComputationEnvironment,ComputationNodeNumber,Err) !Start the creation of a new RC coordinate system CALL cmfe_CoordinateSystem_Initialise(CoordinateSystem,Err) diff --git a/tests/FieldML_IO/cube.f90 b/tests/FieldML_IO/cube.f90 index ad1b2b83..6e5d73ce 100644 --- a/tests/FieldML_IO/cube.f90 +++ b/tests/FieldML_IO/cube.f90 @@ -117,6 +117,7 @@ SUBROUTINE ReadCube(worldRegion, inputFilename, region, mesh, geometricField, & TYPE(cmfe_FieldType), INTENT(OUT) :: geometricField ! local variables TYPE(cmfe_BasisType) :: basis + TYPE(cmfe_ComputationEnvironmentType) :: ComputationEnvironment TYPE(cmfe_CoordinateSystemType) :: coordinateSystem TYPE(cmfe_DecompositionType) :: decomposition TYPE(cmfe_NodesType) :: nodes @@ -127,9 +128,9 @@ SUBROUTINE ReadCube(worldRegion, inputFilename, region, mesh, geometricField, & err = 0 ! Get computation nodes information - - CALL cmfe_ComputationEnvironment_NumberOfWorldNodesGet(numberOfComputationNodes, err) - CALL cmfe_ComputationEnvironment_WorldNodeNumberGet(computationNodeNumber, err) + CALL cmfe_ComputationEnvironment_Initialise(ComputationEnvironment,Err) + CALL cmfe_ComputationEnvironment_NumberOfWorldNodesGet(ComputationEnvironment,NumberOfComputationNodes,Err) + CALL cmfe_ComputationEnvironment_WorldNodeNumberGet(ComputationEnvironment,ComputationNodeNumber,Err) ! Initialise FieldML and parse input file diff --git a/tests/FieldML_IO/fieldml_io.f90 b/tests/FieldML_IO/fieldml_io.f90 index 24bf9ec8..74c1662d 100644 --- a/tests/FieldML_IO/fieldml_io.f90 +++ b/tests/FieldML_IO/fieldml_io.f90 @@ -48,6 +48,7 @@ PROGRAM IRON_TEST_FIELDML_IO IMPLICIT NONE ! CMISS variables + TYPE(cmfe_ComputationEnvironmentType) :: ComputationEnvironment TYPE(cmfe_CoordinateSystemType) :: worldCoordinateSystem TYPE(cmfe_RegionType) :: worldRegion @@ -64,9 +65,9 @@ PROGRAM IRON_TEST_FIELDML_IO CALL cmfe_ErrorHandlingModeSet(CMFE_ERRORS_TRAP_ERROR, err) ! Get computation nodes information - - CALL cmfe_ComputationEnvironment_NumberOfWorldNodesGet(numberOfComputationNodes, err) - CALL cmfe_ComputationEnvironment_WorldNodeNumberGet(computationNodeNumber, err) + CALL cmfe_ComputationEnvironment_Initialise(ComputationEnvironment,Err) + CALL cmfe_ComputationEnvironment_NumberOfWorldNodesGet(ComputationEnvironment,NumberOfComputationNodes,Err) + CALL cmfe_ComputationEnvironment_WorldNodeNumberGet(ComputationEnvironment,ComputationNodeNumber,Err) CALL TestFieldMLIOCube(worldRegion) CALL TestFieldMLArguments(worldRegion) diff --git a/tests/FiniteElasticity/Cantilever.f90 b/tests/FiniteElasticity/Cantilever.f90 index 85085ea9..36cec906 100644 --- a/tests/FiniteElasticity/Cantilever.f90 +++ b/tests/FiniteElasticity/Cantilever.f90 @@ -108,6 +108,7 @@ PROGRAM CANTILEVEREXAMPLE !CMISS variables TYPE(cmfe_BasisType) :: DisplacementBasis,PressureBasis TYPE(cmfe_BoundaryConditionsType) :: BoundaryConditions + TYPE(cmfe_ComputationEnvironmentType) :: ComputationEnvironment TYPE(cmfe_CoordinateSystemType) :: CoordinateSystem, WorldCoordinateSystem TYPE(cmfe_MeshType) :: Mesh TYPE(cmfe_DecompositionType) :: Decomposition @@ -209,8 +210,9 @@ PROGRAM CANTILEVEREXAMPLE WRITE(*,'("Scaling type: ", i3)') ScalingType !Get the number of computation nodes and this computation node number - CALL cmfe_ComputationEnvironment_NumberOfWorldNodesGet(NumberOfComputationNodes,Err) - CALL cmfe_ComputationEnvironment_WorldNodeNumberGet(ComputationNodeNumber,Err) + CALL cmfe_ComputationEnvironment_Initialise(ComputationEnvironment,Err) + CALL cmfe_ComputationEnvironment_NumberOfWorldNodesGet(ComputationEnvironment,NumberOfComputationNodes,Err) + CALL cmfe_ComputationEnvironment_WorldNodeNumberGet(ComputationEnvironment,ComputationNodeNumber,Err) NumberOfDomains=NumberOfComputationNodes diff --git a/tests/FiniteElasticity/SimpleShear.f90 b/tests/FiniteElasticity/SimpleShear.f90 index c1825d3a..dbb7159b 100644 --- a/tests/FiniteElasticity/SimpleShear.f90 +++ b/tests/FiniteElasticity/SimpleShear.f90 @@ -115,6 +115,7 @@ PROGRAM SIMPLESHEAREXAMPLE !CMISS variables TYPE(cmfe_BasisType) :: Basis, PressureBasis TYPE(cmfe_BoundaryConditionsType) :: BoundaryConditions + TYPE(cmfe_ComputationEnvironmentType) :: ComputationEnvironment TYPE(cmfe_CoordinateSystemType) :: CoordinateSystem, WorldCoordinateSystem TYPE(cmfe_MeshType) :: Mesh TYPE(cmfe_DecompositionType) :: Decomposition @@ -159,8 +160,9 @@ PROGRAM SIMPLESHEAREXAMPLE CALL cmfe_OutputSetOn("SimpleShear",Err) !Get the number of computation nodes and this computation node number - CALL cmfe_ComputationEnvironment_NumberOfWorldNodesGet(NumberOfComputationNodes,Err) - CALL cmfe_ComputationEnvironment_WorldNodeNumberGet(ComputationNodeNumber,Err) + CALL cmfe_ComputationEnvironment_Initialise(ComputationEnvironment,Err) + CALL cmfe_ComputationEnvironment_NumberOfWorldNodesGet(ComputationEnvironment,NumberOfComputationNodes,Err) + CALL cmfe_ComputationEnvironment_WorldNodeNumberGet(ComputationEnvironment,ComputationNodeNumber,Err) NumberGlobalXElements=2 NumberGlobalYElements=2 diff --git a/tests/LinearElasticity/CantileverBeam.f90 b/tests/LinearElasticity/CantileverBeam.f90 index 002a79fc..c1a2810b 100644 --- a/tests/LinearElasticity/CantileverBeam.f90 +++ b/tests/LinearElasticity/CantileverBeam.f90 @@ -190,6 +190,7 @@ SUBROUTINE ANALYTIC_LINEAR_ELASTICITY_GENERIC(NumberGlobalXElements,NumberGlobal !CMISS variables TYPE(cmfe_BasisType) :: Basis + TYPE(cmfe_ComputationEnvironmentType) :: ComputationEnvironment TYPE(cmfe_CoordinateSystemType) :: CoordinateSystem TYPE(cmfe_GeneratedMeshType) :: GeneratedMesh TYPE(cmfe_DecompositionType) :: Decomposition @@ -233,8 +234,9 @@ SUBROUTINE ANALYTIC_LINEAR_ELASTICITY_GENERIC(NumberGlobalXElements,NumberGlobal FieldDependentNumberOfComponents=NumberOfXi !Get the number of computation nodes and this computation node number - CALL cmfe_ComputationEnvironment_NumberOfWorldNodesGet(NumberOfComputationNodes,Err) - CALL cmfe_ComputationEnvironment_WorldNodeNumberGet(ComputationNodeNumber,Err) + CALL cmfe_ComputationEnvironment_Initialise(ComputationEnvironment,Err) + CALL cmfe_ComputationEnvironment_NumberOfWorldNodesGet(ComputationEnvironment,NumberOfComputationNodes,Err) + CALL cmfe_ComputationEnvironment_WorldNodeNumberGet(ComputationEnvironment,ComputationNodeNumber,Err) !Broadcast the number of elements in the X,Y and Z directions and the number of partitions to the other computation nodes CALL MPI_BCAST(NumberGlobalXElements,1,MPI_INTEGER,0,MPI_COMM_WORLD,MPI_IERROR) diff --git a/tests/LinearElasticity/Extension.f90 b/tests/LinearElasticity/Extension.f90 index 944c7e52..fae01d9d 100644 --- a/tests/LinearElasticity/Extension.f90 +++ b/tests/LinearElasticity/Extension.f90 @@ -242,6 +242,7 @@ SUBROUTINE ANALYTIC_LINEAR_ELASTICITY_GENERIC(NumberGlobalXElements,NumberGlobal !CMISS variables TYPE(cmfe_BasisType) :: Basis + TYPE(cmfe_ComputationEnvironmentType) :: ComputationEnvironment TYPE(cmfe_CoordinateSystemType) :: CoordinateSystem TYPE(cmfe_GeneratedMeshType) :: GeneratedMesh TYPE(cmfe_DecompositionType) :: Decomposition @@ -285,8 +286,9 @@ SUBROUTINE ANALYTIC_LINEAR_ELASTICITY_GENERIC(NumberGlobalXElements,NumberGlobal FieldDependentNumberOfComponents=NumberOfXi !Get the number of computation nodes and this computation node number - CALL cmfe_ComputationEnvironment_NumberOfWorldNodesGet(NumberOfComputationNodes,Err) - CALL cmfe_ComputationEnvironment_WorldNodeNumberGet(ComputationNodeNumber,Err) + CALL cmfe_ComputationEnvironment_Initialise(ComputationEnvironment,Err) + CALL cmfe_ComputationEnvironment_NumberOfWorldNodesGet(ComputationEnvironment,NumberOfComputationNodes,Err) + CALL cmfe_ComputationEnvironment_WorldNodeNumberGet(ComputationEnvironment,ComputationNodeNumber,Err) !Broadcast the number of elements in the X,Y and Z directions and the number of partitions to the other computation nodes CALL MPI_BCAST(NumberGlobalXElements,1,MPI_INTEGER,0,MPI_COMM_WORLD,MPI_IERROR) From cea17d45712ba2a09ac23f52db801c7fd8155458 Mon Sep 17 00:00:00 2001 From: Chris Bradley Date: Thu, 28 Sep 2017 10:14:38 +1300 Subject: [PATCH 05/13] More work group tidy ups. Allow decompositions and problem to have their work group set. --- src/computation_access_routines.f90 | 39 +++- src/computation_routines.f90 | 67 +----- src/field_IO_routines.f90 | 4 +- src/mesh_routines.f90 | 115 +++++++--- src/opencmiss_iron.f90 | 338 ++++++++++++++++++++++++---- src/problem_routines.f90 | 37 +++ src/types.f90 | 3 + 7 files changed, 454 insertions(+), 149 deletions(-) diff --git a/src/computation_access_routines.f90 b/src/computation_access_routines.f90 index edb69536..ebb19bde 100644 --- a/src/computation_access_routines.f90 +++ b/src/computation_access_routines.f90 @@ -45,12 +45,12 @@ MODULE ComputationAccessRoutines USE BaseRoutines + USE ISO_VARYING_STRING USE Kinds #ifndef NOMPIMOD USE MPI #endif USE Strings - USE Types #include "macros.h" @@ -118,7 +118,6 @@ MODULE ComputationAccessRoutines TYPE ComputationEnvironmentType INTEGER(INTG) :: mpiVersion !Finds and returns a pointer to the work group with the given user number. + SUBROUTINE WorkGroup_Get(computationEnvironment,workGroupUserNumber,workGroup,err,error,*) + + !Argument variables + TYPE(ComputationEnvironmentType), POINTER, INTENT(IN) :: computationEnvironment !Gets the group communicator from a work group. SUBROUTINE WorkGroup_GroupCommunicatorGet(workGroup,groupCommunicator,err,error,*) diff --git a/src/computation_routines.f90 b/src/computation_routines.f90 index 18e2390c..6375d292 100755 --- a/src/computation_routines.f90 +++ b/src/computation_routines.f90 @@ -86,8 +86,6 @@ MODULE ComputationRoutines PUBLIC Computation_Initialise,Computation_Finalise - PUBLIC ComputationEnvironment_WorldCommunicatorSet - PUBLIC WorkGroup_CreateFinish,WorkGroup_CreateStart PUBLIC WorkGroup_Destroy @@ -442,7 +440,6 @@ SUBROUTINE ComputationEnvironment_Initialise(computationEnvironment,err,error,*) computationEnvironment%mpiVersion=0 computationEnvironment%mpiSubversion=0 - computationEnvironment%mpiWorldCommunicator=MPI_COMM_NULL computationEnvironment%mpiCommWorld=MPI_COMM_NULL computationEnvironment%mpiGroupWorld=MPI_GROUP_NULL computationEnvironment%numberOfWorldComputationNodes=0 @@ -460,10 +457,10 @@ SUBROUTINE ComputationEnvironment_Initialise(computationEnvironment,err,error,*) CALL MPI_COMM_GROUP(computationEnvironment%mpiCommWorld,computationEnvironment%mpiGroupWorld,mpiIError) CALL MPI_ERROR_CHECK("MPI_COMM_GROUP",mpiIError,err,error,*999) !Set the default MPI world communicator to be the cloned communicator - computationEnvironment%mpiWorldCommunicator=computationEnvironment%mpiCommWorld + computationEnvironment%mpiCommWorld=computationEnvironment%mpiCommWorld !Determine the number of ranks/computation nodes we have in our world computation environment - CALL MPI_COMM_SIZE(computationEnvironment%mpiWorldCommunicator,computationEnvironment%numberOfWorldComputationNodes,mpiIError) + CALL MPI_COMM_SIZE(computationEnvironment%mpiCommWorld,computationEnvironment%numberOfWorldComputationNodes,mpiIError) CALL MPI_ERROR_CHECK("MPI_COMM_SIZE",mpiIError,err,error,*999) !Allocate the computation node data structures @@ -471,7 +468,7 @@ SUBROUTINE ComputationEnvironment_Initialise(computationEnvironment,err,error,*) IF(ERR /=0) CALL FlagError("Could not allocate computation environment computation nodes.",err,error,*999) !Determine my processes rank in the world communicator - CALL MPI_COMM_RANK(computationEnvironment%mpiWorldCommunicator,rank,mpiIError) + CALL MPI_COMM_RANK(computationEnvironment%mpiCommWorld,rank,mpiIError) CALL MPI_ERROR_CHECK("MPI_COMM_RANK",mpiIError,err,error,*999) computationEnvironment%myWorldComputationNodeNumber=rank @@ -489,7 +486,7 @@ SUBROUTINE ComputationEnvironment_Initialise(computationEnvironment,err,error,*) !information. CALL MPI_ALLGATHER(MPI_IN_PLACE,1,computationEnvironment%mpiComputationNode%mpiType, & & computationEnvironment%computationNodes(0),1,computationEnvironment%mpiComputationNode%mpiType, & - & computationEnvironment%mpiWorldCommunicator,mpiIError) + & computationEnvironment%mpiCommWorld,mpiIError) CALL MPI_ERROR_CHECK("MPI_ALLGATHER",mpiIError,err,error,*999) !Setup the world work group. @@ -514,11 +511,11 @@ SUBROUTINE ComputationEnvironment_Initialise(computationEnvironment,err,error,*) CALL MPI_GROUP_INCL(computationEnvironment%mpiGroupWorld,computationEnvironment%worldWorkGroup%numberOfGroupComputationNodes, & & computationEnvironment%worldWorkGroup%worldRanks,computationEnvironment%worldWorkGroup%mpiGroup,mpiIError) CALL MPI_ERROR_CHECK("MPI_GROUP_INCL",mpiIError,err,error,*999) - CALL MPI_COMM_CREATE(computationEnvironment%mpiWorldCommunicator,computationEnvironment%worldWorkGroup%mpiGroup, & + CALL MPI_COMM_CREATE(computationEnvironment%mpiCommWorld,computationEnvironment%worldWorkGroup%mpiGroup, & & computationEnvironment%worldWorkGroup%mpiGroupCommunicator,mpiIError) CALL MPI_ERROR_CHECK("MPI_COMM_CREATE",mpiIError,err,error,*999) !Determine ranks - CALL MPI_COMM_RANK(computationEnvironment%mpiWorldCommunicator,rank,mpiIError) + CALL MPI_COMM_RANK(computationEnvironment%mpiCommWorld,rank,mpiIError) CALL MPI_ERROR_CHECK("MPI_COMM_RANK",mpiIError,err,error,*999) computationEnvironment%worldWorkGroup%myWorldComputationNodeNumber=rank CALL MPI_COMM_RANK(computationEnvironment%worldWorkGroup%mpiGroupCommunicator,rank,mpiIError) @@ -566,52 +563,6 @@ SUBROUTINE ComputationEnvironment_Initialise(computationEnvironment,err,error,*) END SUBROUTINE ComputationEnvironment_Initialise - ! - !================================================================================================================================ - ! - - !>Sets the world communicator to the given on. Note: This routine should be called straight after the main OpenCMISS initialise - !>routine. If it is called after objects have started to be setup then good luck! - SUBROUTINE ComputationEnvironment_WorldCommunicatorSet(worldCommunicator,err,error,*) - - !Argument Variables - INTEGER(INTG), INTENT(IN) :: worldCommunicator !parentWorkGroup DO subGroupIdx=1,parentWorkGroup%numberOfSubGroups - newSubGroups(subGroupIdx)%ptr=parentWorkGroup%subGroups(subGroupIdx)%ptr + newSubGroups(subGroupIdx)%ptr=>parentWorkGroup%subGroups(subGroupIdx)%ptr ENDDO !subGroupIdx newSubGroups(parentWorkGroup%numberOfSubGroups+1)%ptr=>workGroup CALL MOVE_ALLOC(newSubGroups,parentWorkGroup%subGroups) @@ -736,7 +687,7 @@ SUBROUTINE WorkGroup_CreateFinish(workGroup,err,error,*) workGroup%myGroupComputationNodeNumber=-1 ENDIF !Determine my process rank in the world communicator - CALL MPI_COMM_RANK(computationEnvironment%mpiWorldCommunicator,worldRank,mpiIError) + CALL MPI_COMM_RANK(computationEnvironment%mpiCommWorld,worldRank,mpiIError) CALL MPI_ERROR_CHECK("MPI_COMM_RANK",mpiIError,err,error,*999) workGroup%myWorldComputationNodeNumber=worldRank @@ -824,7 +775,7 @@ RECURSIVE SUBROUTINE WorkGroup_DestroyNumber(workGroupUserNumber,err,error,*) count=0 DO subGroupIdx=1,parentWorkGroup%numberOfSubGroups NULLIFY(subGroup) - CALL WorkGroup_WorkSubGroupGet(workGroup,subGroupIdx,subGroup,err,error,*999) + CALL WorkGroup_WorkSubGroupGet(parentWorkGroup,subGroupIdx,subGroup,err,error,*999) IF(subGroup%userNumber/=workGroup%userNumber) THEN count=count+1 newSubGroups(count)%ptr=>parentWorkGroup%subGroups(subGroupIdx)%ptr diff --git a/src/field_IO_routines.f90 b/src/field_IO_routines.f90 index f44468fb..cbdd0d63 100755 --- a/src/field_IO_routines.f90 +++ b/src/field_IO_routines.f90 @@ -1780,7 +1780,7 @@ SUBROUTINE FIELD_IO_IMPORT_GLOBAL_MESH(NAME, REGION, MESH, MESH_USER_NUMBER, MAS !broadcasting the number of components in each field CALL MPI_BCAST(NUMBER_OF_FIELDS,1,MPI_INTEGER,MASTER_COMPUTATION_NUMBER, & - & computationEnvironment%mpiWorldCommunicator,MPI_IERROR) + & worldCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_BCAST",MPI_IERROR,ERR,ERROR,*999) IF(MASTER_COMPUTATION_NUMBER/=myWorldComputationNodeNumber) THEN CALL REALLOCATE( COMPONENTS_IN_FIELDS, NUMBER_OF_FIELDS, & @@ -2085,7 +2085,7 @@ SUBROUTINE FIELD_IO_IMPORT_GLOBAL_MESH(NAME, REGION, MESH, MESH_USER_NUMBER, MAS !broadcast the list of elements for mapping gloabl numbers and user numbers (elemental labels) CALL MPI_BCAST(LIST_ELEMENT_NUMBER,NUMBER_OF_ELEMENTS,MPI_INTEGER,MASTER_COMPUTATION_NUMBER, & - & computationEnvironment%mpiWorldCommunicator,MPI_IERROR) + & worldCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_BCAST",MPI_IERROR,ERR,ERROR,*999) !change the mapping between global elemental numbering and user elemental numbering diff --git a/src/mesh_routines.f90 b/src/mesh_routines.f90 index 63c68479..eb1f5324 100644 --- a/src/mesh_routines.f90 +++ b/src/mesh_routines.f90 @@ -154,6 +154,8 @@ MODULE MESH_ROUTINES PUBLIC DECOMPOSITION_NUMBER_OF_DOMAINS_GET,DECOMPOSITION_NUMBER_OF_DOMAINS_SET + PUBLIC Decomposition_WorkGroupSet + PUBLIC DecompositionTopology_DataPointCheckExists PUBLIC DecompositionTopology_DataProjectionCalculate @@ -282,7 +284,7 @@ END SUBROUTINE DECOMPOSITION_ADJACENT_ELEMENT_INITIALISE !================================================================================================================================ ! - !>Finishes the creation of a domain decomposition on a given mesh. \see OPENCMISS::Iron::cmfe_DecompositionCreateFinish + !>Finishes the creation of a domain decomposition on a given mesh. \see OpenCMISS::Iron::cmfe_Decomposition_CreateFinish SUBROUTINE DECOMPOSITION_CREATE_FINISH(DECOMPOSITION,ERR,ERROR,*) !Argument variables @@ -332,13 +334,14 @@ SUBROUTINE DECOMPOSITION_CREATE_FINISH(DECOMPOSITION,ERR,ERROR,*) RETURN 999 ERRORSEXITS("DECOMPOSITION_CREATE_FINISH",ERR,ERROR) RETURN 1 + END SUBROUTINE DECOMPOSITION_CREATE_FINISH ! !================================================================================================================================ ! - !>Starts the creation of a domain decomposition for a given mesh. \see OPENCMISS::Iron::cmfe_DecompositionCreateStart + !>Starts the creation of a domain decomposition for a given mesh. \see OpenCMISS::Iron::cmfe_Decomposition_CreateStart SUBROUTINE DECOMPOSITION_CREATE_START(USER_NUMBER,MESH,DECOMPOSITION,ERR,ERROR,*) !Argument variables @@ -349,9 +352,10 @@ SUBROUTINE DECOMPOSITION_CREATE_START(USER_NUMBER,MESH,DECOMPOSITION,ERR,ERROR,* TYPE(VARYING_STRING), INTENT(OUT) :: ERROR !worldWorkGroup newDecomposition%NUMBER_OF_DOMAINS=1 newDecomposition%numberOfElements=mesh%NUMBER_OF_ELEMENTS ALLOCATE(newDecomposition%ELEMENT_DOMAIN(MESH%NUMBER_OF_ELEMENTS),STAT=ERR) @@ -433,7 +440,7 @@ END SUBROUTINE DECOMPOSITION_CREATE_START !================================================================================================================================ ! - !>Destroys a domain decomposition identified by a user number and deallocates all memory. \see OPENCMISS::Iron::cmfe_DecompositionDestroy + !>Destroys a domain decomposition identified by a user number and deallocates all memory. \see OpenCMISS::Iron::cmfe_Decomposition_Destroy SUBROUTINE DECOMPOSITION_DESTROY_NUMBER(USER_NUMBER,MESH,ERR,ERROR,*) !Argument variables @@ -514,7 +521,7 @@ END SUBROUTINE DECOMPOSITION_DESTROY_NUMBER !================================================================================================================================ ! - !>Destroys a domain decomposition identified by an object and deallocates all memory. \see OPENCMISS::Iron::cmfe_DecompositionDestroy + !>Destroys a domain decomposition identified by an object and deallocates all memory. \see OpenCMISS::Iron::cmfe_Decomposition_Destroy SUBROUTINE DECOMPOSITION_DESTROY(DECOMPOSITION,ERR,ERROR,*) !Argument variables @@ -588,7 +595,7 @@ END SUBROUTINE DECOMPOSITION_DESTROY !================================================================================================================================ ! - !>Calculates the element domains for a decomposition of a mesh. \see OPENCMISS::Iron::cmfe_DecompositionElementDomainCalculate + !>Calculates the element domains for a decomposition of a mesh. \see OpenCMISS::Iron::cmfe_Decomposition_ElementDomainCalculate SUBROUTINE DECOMPOSITION_ELEMENT_DOMAIN_CALCULATE(DECOMPOSITION,ERR,ERROR,*) !Argument variables @@ -818,7 +825,7 @@ END SUBROUTINE DECOMPOSITION_ELEMENT_DOMAIN_CALCULATE !================================================================================================================================ ! - !>Gets the domain for a given element in a decomposition of a mesh. \todo should be able to specify lists of elements. \see OPENCMISS::Iron::cmfe_DecompositionElementDomainGet + !>Gets the domain for a given element in a decomposition of a mesh. \todo should be able to specify lists of elements. \see OpenCMISS::Iron::cmfe_Decomposition_ElementDomainGet SUBROUTINE DECOMPOSITION_ELEMENT_DOMAIN_GET(DECOMPOSITION,USER_ELEMENT_NUMBER,DOMAIN_NUMBER,ERR,ERROR,*) !Argument variables @@ -890,7 +897,7 @@ END SUBROUTINE DECOMPOSITION_ELEMENT_DOMAIN_GET !================================================================================================================================ ! - !>Sets the domain for a given element in a decomposition of a mesh. \todo move to user number, should be able to specify lists of elements. \see OPENCMISS::Iron::cmfe_DecompositionElementDomainSet + !>Sets the domain for a given element in a decomposition of a mesh. \todo move to user number, should be able to specify lists of elements. \see OpenCMISS::Iron::cmfe_Decomposition_ElementDomainSet SUBROUTINE DECOMPOSITION_ELEMENT_DOMAIN_SET(DECOMPOSITION,GLOBAL_ELEMENT_NUMBER,DOMAIN_NUMBER,ERR,ERROR,*) !Argument variables @@ -1013,6 +1020,7 @@ SUBROUTINE Decomposition_Initialise(decomposition,err,error,*) decomposition%numberOfDimensions=0 decomposition%numberOfComponents=0 decomposition%DECOMPOSITION_TYPE=DECOMPOSITION_ALL_TYPE + NULLIFY(decomposition%workGroup) decomposition%NUMBER_OF_DOMAINS=0 decomposition%NUMBER_OF_EDGES_CUT=0 decomposition%numberOfElements=0 @@ -1036,7 +1044,7 @@ END SUBROUTINE Decomposition_Initialise !!MERGE: ditto - !>Gets the mesh component number which will be used for the decomposition of a mesh. \see OPENCMISS::Iron::cmfe_DecompositionMeshComponentGet + !>Gets the mesh component number which will be used for the decomposition of a mesh. \see OpenCMISS::Iron::cmfe_DecompositionMeshComponentGet SUBROUTINE DECOMPOSITION_MESH_COMPONENT_NUMBER_GET(DECOMPOSITION,MESH_COMPONENT_NUMBER,ERR,ERROR,*) !Argument variables @@ -1073,7 +1081,7 @@ END SUBROUTINE DECOMPOSITION_MESH_COMPONENT_NUMBER_GET !================================================================================================================================ ! - !>Sets/changes the mesh component number which will be used for the decomposition of a mesh. \see OPENCMISS::Iron::cmfe_DecompositionMeshComponentSet + !>Sets/changes the mesh component number which will be used for the decomposition of a mesh. \see OpenCMISS::Iron::cmfe_DecompositionMeshComponentSet SUBROUTINE DECOMPOSITION_MESH_COMPONENT_NUMBER_SET(DECOMPOSITION,MESH_COMPONENT_NUMBER,ERR,ERROR,*) !Argument variables @@ -1119,7 +1127,7 @@ END SUBROUTINE DECOMPOSITION_MESH_COMPONENT_NUMBER_SET !!MERGE: ditto - !>Gets the number of domains for a decomposition. \see OPENCMISS::Iron::cmfe_DecompositionNumberOfDomainsGet + !>Gets the number of domains for a decomposition. \see OpenCMISS::Iron::cmfe_DecompositionNumberOfDomainsGet SUBROUTINE DECOMPOSITION_NUMBER_OF_DOMAINS_GET(DECOMPOSITION,NUMBER_OF_DOMAINS,ERR,ERROR,*) !Argument variables @@ -1152,7 +1160,7 @@ END SUBROUTINE DECOMPOSITION_NUMBER_OF_DOMAINS_GET !================================================================================================================================ ! - !>Sets/changes the number of domains for a decomposition. \see OPENCMISS::Iron::cmfe_DecompositionNumberOfDomainsSet + !>Sets/changes the number of domains for a decomposition. \see OpenCMISS::Iron::cmfe_DecompositionNumberOfDomainsSet SUBROUTINE DECOMPOSITION_NUMBER_OF_DOMAINS_SET(DECOMPOSITION,NUMBER_OF_DOMAINS,ERR,ERROR,*) !Argument variables @@ -1222,6 +1230,38 @@ END SUBROUTINE DECOMPOSITION_NUMBER_OF_DOMAINS_SET !================================================================================================================================ ! + !>Sets the workgroup to use for a decomposition on a given mesh. \see OpenCMISS::Iron::cmfe_Decomposition_WorkGroupSet + SUBROUTINE Decomposition_WorkGroupSet(decomposition,workGroup,err,error,*) + + !Argument variables + TYPE(DECOMPOSITION_TYPE), POINTER :: decomposition !workGroup + + EXITS("Decomposition_WorkGroupSet") + RETURN +999 ERRORSEXITS("Decomposition_WorkGroupSet",err,error) + RETURN 1 + + END SUBROUTINE Decomposition_WorkGroupSet + + ! + !================================================================================================================================ + ! + !>Calculates the topology for a decomposition. SUBROUTINE DECOMPOSITION_TOPOLOGY_CALCULATE(DECOMPOSITION,ERR,ERROR,*) @@ -3676,7 +3716,7 @@ END SUBROUTINE DECOMPOSITION_TOPOLOGY_FACES_INITIALISE !================================================================================================================================ ! - !>Gets the decomposition type for a decomposition. \see OPENCMISS::Iron::cmfe_DecompositionTypeGet + !>Gets the decomposition type for a decomposition. \see OpenCMISS::Iron::cmfe_DecompositionTypeGet SUBROUTINE DECOMPOSITION_TYPE_GET(DECOMPOSITION,TYPE,ERR,ERROR,*) !Argument variables @@ -3708,7 +3748,7 @@ END SUBROUTINE DECOMPOSITION_TYPE_GET !================================================================================================================================ ! - !>Sets/changes the decomposition type for a decomposition. \see OPENCMISS::Iron::cmfe_DecompositionTypeSet + !>Sets/changes the decomposition type for a decomposition. \see OpenCMISS::Iron::cmfe_DecompositionTypeSet SUBROUTINE DECOMPOSITION_TYPE_SET(DECOMPOSITION,TYPE,ERR,ERROR,*) !Argument variables @@ -3752,7 +3792,7 @@ END SUBROUTINE DECOMPOSITION_TYPE_SET !================================================================================================================================ ! - !>Sets/changes whether lines should be calculated in the the decomposition. \see OPENCMISS::Iron::cmfe_DecompositionCalculateLinesSet + !>Sets/changes whether lines should be calculated in the the decomposition. \see OpenCMISS::Iron::cmfe_DecompositionCalculateLinesSet SUBROUTINE DECOMPOSITION_CALCULATE_LINES_SET(DECOMPOSITION,CALCULATE_LINES_FLAG,ERR,ERROR,*) !Argument variables @@ -3783,7 +3823,7 @@ END SUBROUTINE DECOMPOSITION_CALCULATE_LINES_SET !================================================================================================================================ ! - !>Sets/changes whether faces should be calculated in the the decomposition. \see OPENCMISS::Iron::cmfe_DecompositionCalculateFacesSet + !>Sets/changes whether faces should be calculated in the the decomposition. \see OpenCMISS::Iron::cmfe_DecompositionCalculateFacesSet SUBROUTINE DECOMPOSITION_CALCULATE_FACES_SET(DECOMPOSITION,CALCULATE_FACES_FLAG,ERR,ERROR,*) !Argument variables @@ -6163,7 +6203,7 @@ END SUBROUTINE MESH_ADJACENT_ELEMENT_INITIALISE !================================================================================================================================ ! - !>Finishes the process of creating a mesh. \see OPENCMISS::Iron::cmfe_MeshCreateFinish + !>Finishes the process of creating a mesh. \see OpenCMISS::Iron::cmfe_MeshCreateFinish SUBROUTINE MESH_CREATE_FINISH(MESH,ERR,ERROR,*) !Argument variables @@ -6292,7 +6332,7 @@ END SUBROUTINE MESH_CREATE_START_GENERIC !================================================================================================================================ ! - !>Starts the process of creating a mesh defined by a user number with the specified NUMBER_OF_DIMENSIONS in an interface. \see OPENCMISS::Iron::cmfe_MeshCreateStart + !>Starts the process of creating a mesh defined by a user number with the specified NUMBER_OF_DIMENSIONS in an interface. \see OpenCMISS::Iron::cmfe_MeshCreateStart !>Default values set for the MESH's attributes are: !>- NUMBER_OF_COMPONENTS: 1 SUBROUTINE MESH_CREATE_START_INTERFACE(USER_NUMBER,INTERFACE,NUMBER_OF_DIMENSIONS,MESH,ERR,ERROR,*) @@ -6371,7 +6411,7 @@ END SUBROUTINE MESH_CREATE_START_INTERFACE !================================================================================================================================ ! - !>Starts the process of creating a mesh defined by a user number with the specified NUMBER_OF_DIMENSIONS in the region identified by REGION. \see OPENCMISS::Iron::cmfe_MeshCreateStart + !>Starts the process of creating a mesh defined by a user number with the specified NUMBER_OF_DIMENSIONS in the region identified by REGION. \see OpenCMISS::Iron::cmfe_MeshCreateStart !>Default values set for the MESH's attributes are: !>- NUMBER_OF_COMPONENTS: 1 SUBROUTINE MESH_CREATE_START_REGION(USER_NUMBER,REGION,NUMBER_OF_DIMENSIONS,MESH,ERR,ERROR,*) @@ -6441,7 +6481,7 @@ END SUBROUTINE MESH_CREATE_START_REGION !================================================================================================================================ ! - !>Destroys the mesh identified by a user number on the given region and deallocates all memory. \see OPENCMISS::Iron::cmfe_MeshDestroy + !>Destroys the mesh identified by a user number on the given region and deallocates all memory. \see OpenCMISS::Iron::cmfe_MeshDestroy SUBROUTINE MESH_DESTROY_NUMBER(USER_NUMBER,REGION,ERR,ERROR,*) !Argument variables @@ -6524,7 +6564,7 @@ END SUBROUTINE MESH_DESTROY_NUMBER !================================================================================================================================ ! - !>Destroys the mesh and deallocates all memory. \see OPENCMISS::Iron::cmfe_MeshDestroy + !>Destroys the mesh and deallocates all memory. \see OpenCMISS::Iron::cmfe_MeshDestroy SUBROUTINE MESH_DESTROY(MESH,ERR,ERROR,*) !Argument variables @@ -6716,7 +6756,7 @@ END SUBROUTINE MESH_INITIALISE !================================================================================================================================ ! - !>Gets the number of mesh components for a mesh identified by a pointer. \see OPENCMISS::Iron::cmfe_MeshNumberOfComponentsGet + !>Gets the number of mesh components for a mesh identified by a pointer. \see OpenCMISS::Iron::cmfe_MeshNumberOfComponentsGet SUBROUTINE MESH_NUMBER_OF_COMPONENTS_GET(MESH,NUMBER_OF_COMPONENTS,ERR,ERROR,*) !Argument variables @@ -6748,7 +6788,7 @@ END SUBROUTINE MESH_NUMBER_OF_COMPONENTS_GET !================================================================================================================================ ! - !>Changes/sets the number of mesh components for a mesh. \see OPENCMISS::Iron::cmfe_MeshNumberOfComponentsSet + !>Changes/sets the number of mesh components for a mesh. \see OpenCMISS::Iron::cmfe_MeshNumberOfComponentsSet SUBROUTINE MESH_NUMBER_OF_COMPONENTS_SET(MESH,NUMBER_OF_COMPONENTS,ERR,ERROR,*) !Argument variables @@ -6824,7 +6864,7 @@ END SUBROUTINE MESH_NUMBER_OF_COMPONENTS_SET !================================================================================================================================ ! - !>Gets the number of elements for a mesh identified by a pointer. \see OPENCMISS::Iron::cmfe_MeshNumberOfElementsGet + !>Gets the number of elements for a mesh identified by a pointer. \see OpenCMISS::Iron::cmfe_MeshNumberOfElementsGet SUBROUTINE MESH_NUMBER_OF_ELEMENTS_GET(MESH,NUMBER_OF_ELEMENTS,ERR,ERROR,*) !Argument variables @@ -6856,7 +6896,7 @@ END SUBROUTINE MESH_NUMBER_OF_ELEMENTS_GET !================================================================================================================================ ! - !>Changes/sets the number of elements for a mesh. \see OPENCMISS::Iron::cmfe_MeshNumberOfElementsSet + !>Changes/sets the number of elements for a mesh. \see OpenCMISS::Iron::cmfe_MeshNumberOfElementsSet SUBROUTINE MESH_NUMBER_OF_ELEMENTS_SET(MESH,NUMBER_OF_ELEMENTS,ERR,ERROR,*) !Argument variables @@ -6915,7 +6955,7 @@ END SUBROUTINE MESH_NUMBER_OF_ELEMENTS_SET !================================================================================================================================ ! - !>Changes/sets the surrounding elements calculate flag. \see OPENCMISS::Iron::cmfe_MeshSurroundingElementsCalculateSet + !>Changes/sets the surrounding elements calculate flag. \see OpenCMISS::Iron::cmfe_MeshSurroundingElementsCalculateSet SUBROUTINE MESH_SURROUNDING_ELEMENTS_CALCULATE_SET(MESH,SURROUNDING_ELEMENTS_CALCULATE_FLAG,ERR,ERROR,*) !Argument variables @@ -7215,7 +7255,7 @@ END SUBROUTINE MeshTopology_DofsInitialise !================================================================================================================================ ! - !>Finishes the process of creating elements for a specified mesh component in a mesh topology. \see OPENCMISS::Iron::cmfe_MeshElementsCreateFinish + !>Finishes the process of creating elements for a specified mesh component in a mesh topology. \see OpenCMISS::Iron::cmfe_MeshElementsCreateFinish SUBROUTINE MESH_TOPOLOGY_ELEMENTS_CREATE_FINISH(ELEMENTS,ERR,ERROR,*) !Argument variables @@ -7292,7 +7332,7 @@ END SUBROUTINE MESH_TOPOLOGY_ELEMENTS_CREATE_FINISH !================================================================================================================================ ! - !>Starts the process of creating elements in the mesh component identified by MESH and component_idx. The elements will be created with a default basis of BASIS. ELEMENTS is the returned pointer to the MESH_ELEMENTS data structure. \see OPENCMISS::Iron::cmfe_MeshElementsCreateStart + !>Starts the process of creating elements in the mesh component identified by MESH and component_idx. The elements will be created with a default basis of BASIS. ELEMENTS is the returned pointer to the MESH_ELEMENTS data structure. \see OpenCMISS::Iron::cmfe_MeshElementsCreateStart SUBROUTINE MESH_TOPOLOGY_ELEMENTS_CREATE_START(MESH,MESH_COMPONENT_NUMBER,BASIS,ELEMENTS,ERR,ERROR,*) !Argument variables @@ -7468,7 +7508,7 @@ END SUBROUTINE MESH_TOPOLOGY_ELEMENT_INITIALISE !!MERGE: Take user number - !>Gets the basis for a mesh element identified by a given global number. \todo should take user number \see OPENCMISS::Iron::cmfe_MeshElementsBasisGet + !>Gets the basis for a mesh element identified by a given global number. \todo should take user number \see OpenCMISS::Iron::cmfe_MeshElementsBasisGet SUBROUTINE MESH_TOPOLOGY_ELEMENTS_ELEMENT_BASIS_GET(GLOBAL_NUMBER,ELEMENTS,BASIS,ERR,ERROR,*) !Argument variables @@ -7589,7 +7629,7 @@ END SUBROUTINE MESH_TOPOLOGY_ELEMENTS_ELEMENT_BASIS_SET !================================================================================================================================ ! - !>Returns the adjacent element number for a mesh element identified by a global number. \todo specify by user number not global number \see OPENCMISS::Iron::cmfe_MeshElementsNo + !>Returns the adjacent element number for a mesh element identified by a global number. \todo specify by user number not global number \see OpenCMISS::Iron::cmfe_MeshElementsNo SUBROUTINE MESH_TOPOLOGY_ELEMENTS_ADJACENT_ELEMENT_GET(GLOBAL_NUMBER,ELEMENTS,ADJACENT_ELEMENT_XI,ADJACENT_ELEMENT_NUMBER, & & ERR,ERROR,*) @@ -7645,7 +7685,7 @@ END SUBROUTINE MESH_TOPOLOGY_ELEMENTS_ADJACENT_ELEMENT_GET !================================================================================================================================ ! - !>Gets the element nodes for a mesh element identified by a given global number. \todo specify by user number not global number \see OPENCMISS::Iron::cmfe_MeshElementsNodesGet + !>Gets the element nodes for a mesh element identified by a given global number. \todo specify by user number not global number \see OpenCMISS::Iron::cmfe_MeshElementsNodesGet SUBROUTINE MESH_TOPOLOGY_ELEMENTS_ELEMENT_NODES_GET(GLOBAL_NUMBER,ELEMENTS,USER_ELEMENT_NODES,ERR,ERROR,*) !Argument variables @@ -7693,7 +7733,7 @@ END SUBROUTINE MESH_TOPOLOGY_ELEMENTS_ELEMENT_NODES_GET !================================================================================================================================ ! - !>Changes/sets the element nodes for a mesh element identified by a given global number. \todo specify by user number not global number \see OPENCMISS::Iron::cmfe_MeshElementsNodesSet + !>Changes/sets the element nodes for a mesh element identified by a given global number. \todo specify by user number not global number \see OpenCMISS::Iron::cmfe_MeshElementsNodesSet SUBROUTINE MESH_TOPOLOGY_ELEMENTS_ELEMENT_NODES_SET(GLOBAL_NUMBER,ELEMENTS,USER_ELEMENT_NODES,ERR,ERROR,*) !Argument variables @@ -7824,7 +7864,7 @@ END SUBROUTINE MESH_TOPOLOGY_ELEMENTS_ELEMENT_NODES_SET !================================================================================================================================ ! - !>Changes/sets an element node's version for a mesh element identified by a given global number. \todo specify by user number not global number \see OPENCMISS::Iron::cmfe_MeshElementsNodesSet + !>Changes/sets an element node's version for a mesh element identified by a given global number. \todo specify by user number not global number \see OpenCMISS::Iron::cmfe_MeshElementsNodesSet SUBROUTINE MeshElements_ElementNodeVersionSet(GLOBAL_NUMBER,ELEMENTS,VERSION_NUMBER,DERIVATIVE_NUMBER, & & USER_ELEMENT_NODE_INDEX,ERR,ERROR,*) @@ -8307,7 +8347,7 @@ END SUBROUTINE MESH_TOPOLOGY_DATA_POINTS_INITIALISE !!MERGE: ditto. - !>Gets the user number for a global element identified by a given global number. \todo Check that the user number doesn't already exist. \see OPENCMISS::Iron::cmfe_MeshElementsUserNumberGet + !>Gets the user number for a global element identified by a given global number. \todo Check that the user number doesn't already exist. \see OpenCMISS::Iron::cmfe_MeshElementsUserNumberGet SUBROUTINE MESH_TOPOLOGY_ELEMENTS_NUMBER_GET(GLOBAL_NUMBER,USER_NUMBER,ELEMENTS,ERR,ERROR,*) !Argument variables @@ -8348,7 +8388,7 @@ END SUBROUTINE MESH_TOPOLOGY_ELEMENTS_NUMBER_GET !================================================================================================================================ ! - !>Returns the user number for a global element identified by a given global number. \see OPENCMISS::Iron::cmfe_MeshElementsUserNumberGet + !>Returns the user number for a global element identified by a given global number. \see OpenCMISS::Iron::cmfe_MeshElementsUserNumberGet SUBROUTINE MeshElements_ElementUserNumberGet(GLOBAL_NUMBER,USER_NUMBER,ELEMENTS,ERR,ERROR,*) !Argument variables @@ -8390,7 +8430,7 @@ END SUBROUTINE MeshElements_ElementUserNumberGet !================================================================================================================================ ! - !>Changes/sets the user number for a global element identified by a given global number. \see OPENCMISS::Iron::cmfe_MeshElementsUserNumberSet + !>Changes/sets the user number for a global element identified by a given global number. \see OpenCMISS::Iron::cmfe_MeshElementsUserNumberSet SUBROUTINE MeshElements_ElementUserNumberSet(GLOBAL_NUMBER,USER_NUMBER,ELEMENTS,ERR,ERROR,*) !Argument variables @@ -10108,7 +10148,7 @@ END SUBROUTINE MESHES_INITIALISE_REGION !================================================================================================================================ ! - !>Gets the domain for a given node in a decomposition of a mesh. \todo should be able to specify lists of elements. \see OPENCMISS::Iron::cmfe_DecompositionNodeDomainGet + !>Gets the domain for a given node in a decomposition of a mesh. \todo should be able to specify lists of elements. \see OpenCMISS::Iron::cmfe_Decomposition_NodeDomainGet SUBROUTINE DECOMPOSITION_NODE_DOMAIN_GET(DECOMPOSITION,USER_NODE_NUMBER,MESH_COMPONENT_NUMBER,DOMAIN_NUMBER,ERR,ERROR,*) !Argument variables @@ -10347,3 +10387,4 @@ END SUBROUTINE MESH_EMBEDDING_SET_GAUSS_POINT_DATA END MODULE MESH_ROUTINES + diff --git a/src/opencmiss_iron.f90 b/src/opencmiss_iron.f90 index a949b8c0..1fec8835 100644 --- a/src/opencmiss_iron.f90 +++ b/src/opencmiss_iron.f90 @@ -1274,6 +1274,24 @@ MODULE OpenCMISS_Iron !Interfaces + !>Starts the creation of a work group + INTERFACE cmfe_WorkGroup_CreateStart + MODULE PROCEDURE cmfe_WorkGroup_CreateStartNumber + MODULE PROCEDURE cmfe_WorkGroup_CreateStartObj + END INTERFACE cmfe_WorkGroup_CreateStart + + !>Finishes the creation of a work group + INTERFACE cmfe_WorkGroup_CreateFinish + MODULE PROCEDURE cmfe_WorkGroup_CreateFinishNumber + MODULE PROCEDURE cmfe_WorkGroup_CreateFinishObj + END INTERFACE cmfe_WorkGroup_CreateFinish + + !>Destroys a work group + INTERFACE cmfe_WorkGroup_Destroy + MODULE PROCEDURE cmfe_WorkGroup_DestroyNumber + MODULE PROCEDURE cmfe_WorkGroup_DestroyObj + END INTERFACE cmfe_WorkGroup_Destroy + !>Gets the group communicator for a work group INTERFACE cmfe_WorkGroup_GroupCommunicatorGet MODULE PROCEDURE cmfe_WorkGroup_GroupCommunicatorGetNumber @@ -1326,6 +1344,8 @@ MODULE OpenCMISS_Iron PUBLIC cmfe_WorkGroup_CreateFinish + PUBLIC cmfe_WorkGroup_Destroy + PUBLIC cmfe_WorkGroup_GroupCommunicatorGet PUBLIC cmfe_WorkGroup_GroupNodeNumberGet @@ -1333,8 +1353,6 @@ MODULE OpenCMISS_Iron PUBLIC cmfe_WorkGroup_LabelGet,cmfe_WorkGroup_LabelSet PUBLIC cmfe_WorkGroup_NumberOfGroupNodesGet,cmfe_WorkGroup_NumberOfGroupNodesSet - - PUBLIC cmfe_Decomposition_WorldWorkGroupSet !!================================================================================================================================== !! @@ -5301,6 +5319,12 @@ MODULE OpenCMISS_Iron MODULE PROCEDURE cmfe_Decomposition_TypeSetObj END INTERFACE cmfe_Decomposition_TypeSet + !>Sets/changes the work group for a decomposition. + INTERFACE cmfe_Decomposition_WorkGroupSet + MODULE PROCEDURE cmfe_Decomposition_WorkGroupSetNumber + MODULE PROCEDURE cmfe_Decomposition_WorkGroupSetObj + END INTERFACE cmfe_Decomposition_WorkGroupSet + !>Sets/changes whether lines should be calculated for the decomposition. INTERFACE cmfe_Decomposition_CalculateLinesSet MODULE PROCEDURE cmfe_Decomposition_CalculateLinesSetNumber @@ -5553,6 +5577,8 @@ MODULE OpenCMISS_Iron PUBLIC cmfe_Decomposition_TypeGet,cmfe_Decomposition_TypeSet + PUBLIC cmfe_Decomposition_WorkGroupSet + PUBLIC cmfe_Decomposition_NodeDomainGet PUBLIC cmfe_Mesh_CreateFinish,cmfe_Mesh_CreateStart @@ -6308,6 +6334,12 @@ MODULE OpenCMISS_Iron MODULE PROCEDURE cmfe_Problem_SpecificationSizeGetObj END INTERFACE cmfe_Problem_SpecificationSizeGet + !>Sets/changes the work group for a problem. + INTERFACE cmfe_Problem_WorkGroupSet + MODULE PROCEDURE cmfe_Problem_WorkGroupSetNumber + MODULE PROCEDURE cmfe_Problem_WorkGroupSetObj + END INTERFACE cmfe_Problem_WorkGroupSet + PUBLIC cmfe_Problem_CellMLEquationsCreateFinish,cmfe_Problem_CellMLEquationsCreateStart PUBLIC cmfe_Problem_CellMLEquationsGet @@ -6340,6 +6372,8 @@ MODULE OpenCMISS_Iron PUBLIC cmfe_Problem_SpecificationGet,cmfe_Problem_SpecificationSizeGet + PUBLIC cmfe_Problem_WorkGroupSet + !!================================================================================================================================== !! !! REGION_ROUTINES @@ -15952,53 +15986,159 @@ SUBROUTINE cmfe_ComputationEnvironment_WorldWorkGroupGet(computationEnvironment, END SUBROUTINE cmfe_ComputationEnvironment_WorldWorkGroupGet + ! + !================================================================================================================================ + ! + + !>Start the creation of a computation work group specified by number. + SUBROUTINE cmfe_WorkGroup_CreateStartNumber(workGroupUserNumber,parentWorkGroupUserNumber,err) + !DLLEXPORT(cmfe_WorkGroup_CreateStartNumber) + !Argument Variables + INTEGER(INTG), INTENT(IN) :: workGroupUserNumber !Start the creation of a computation work group under a parent work group - SUBROUTINE cmfe_WorkGroup_CreateStart(userNumber,parentWorkGroup,workGroup,err) - !DLLEXPORT(cmfe_WorkGroup_CreateStart) + !>Start the creation of a computation work group specified by object under a parent work group + SUBROUTINE cmfe_WorkGroup_CreateStartObj(userNumber,parentWorkGroup,workGroup,err) + !DLLEXPORT(cmfe_WorkGroup_CreateStartObj) !Argument Variables INTEGER(INTG), INTENT(IN) :: userNumber !Finish the creation of a computation work group - SUBROUTINE cmfe_WorkGroup_CreateFinish(workGroup,err) - !DLLEXPORT(cmfe_WorkGroup_CreateFinish) + !>Finish the creation of a computation work group specified by number. + SUBROUTINE cmfe_WorkGroup_CreateFinishNumber(workGroupUserNumber,err) + !DLLEXPORT(cmfe_WorkGroup_CreateFinishNumber) + !Argument Variables + INTEGER(INTG), INTENT(IN) :: workGroupUserNumber !Finish the creation of a computation work group specified by object. + SUBROUTINE cmfe_WorkGroup_CreateFinishObj(workGroup,err) + !DLLEXPORT(cmfe_WorkGroup_CreateFinishObj) !Argument Variables TYPE(cmfe_WorkGroupType), INTENT(INOUT) :: workGroup !Destroy a work group specified by number. + SUBROUTINE cmfe_WorkGroup_DestroyNumber(workGroupUserNumber,err) + !DLLEXPORT(cmfe_WorkGroup_DestroyNumber) + !Argument Variables + INTEGER(INTG), INTENT(IN) :: workGroupUserNumber !Destroy a work group specified by object. + SUBROUTINE cmfe_WorkGroup_DestroyObj(workGroup,err) + !DLLEXPORT(cmfe_WorkGroup_DestroyObj) + !Argument Variables + TYPE(cmfe_WorkGroupType), INTENT(INOUT) :: workGroup !Set the decomposition work group - SUBROUTINE cmfe_Decomposition_WorldWorkGroupSet(decomposition,workGroup,err) - !DLLEXPORT(cmfe_Decomposition_WorldWorkGroupSet) - !Argument Variables - TYPE(cmfe_DecompositionType), INTENT(INOUT) :: decomposition !Sets/changes the work group of a decomposition identified by a user number. + SUBROUTINE cmfe_Decomposition_WorkGroupSetNumber(regionUserNumber,meshUserNumber,decompositionUserNumber,workGroupUserNumber,err) + !DLLEXPORT(cmfe_Decomposition_WorkGroupSetNumber) + + !Argument variables + INTEGER(INTG), INTENT(IN) :: regionUserNumber !Sets/changes the work group for a decomposition identified by an object. + SUBROUTINE cmfe_Decomposition_WorkGroupSetObj(decomposition,workGroup,err) + !DLLEXPORT(cmfe_Decomposition_WorkGroupSetObj) + + !Argument variables + TYPE(cmfe_DecompositionType), INTENT(IN) :: decomposition !Sets whether lines should be calculated SUBROUTINE cmfe_Decomposition_CalculateLinesSetNumber(regionUserNumber,meshUserNumber,& & decompositionUserNumber,calculateLinesFlag,err) @@ -48670,6 +48851,65 @@ SUBROUTINE cmfe_Problem_SpecificationSizeGetObj(problem,specificationSize,err) RETURN END SUBROUTINE cmfe_Problem_SpecificationSizeGetObj + + ! + !================================================================================================================================ + ! + + !>Sets/changes the work group of a problem identified by a user number. + SUBROUTINE cmfe_Problem_WorkGroupSetNumber(problemUserNumber,workGroupUserNumber,err) + !DLLEXPORT(cmfe_Problem_WorkGroupSetNumber) + + !Argument variables + INTEGER(INTG), INTENT(IN) :: problemUserNumber !Sets/changes the work group for a problem identified by an object. + SUBROUTINE cmfe_Problem_WorkGroupSetObj(problem,workGroup,err) + !DLLEXPORT(cmfe_Problem_WorkGroupSetObj) + + !Argument variables + TYPE(cmfe_ProblemType), INTENT(INOUT) :: problem !PROBLEMS + NULLIFY(worldWorkGroup) + CALL ComputationEnvironment_WorldWorkGroupGet(computationEnvironment,worldWorkGroup,err,error,*999) + NEW_PROBLEM%workGroup=>worldWorkGroup !Set problem specification CALL Problem_SpecificationSet(NEW_PROBLEM,PROBLEM_SPECIFICATION,err,error,*999) !For compatibility with old code, set class, type and subtype @@ -923,6 +929,7 @@ SUBROUTINE PROBLEM_INITIALISE(PROBLEM,err,error,*) PROBLEM%GLOBAL_NUMBER=0 PROBLEM%PROBLEM_FINISHED=.FALSE. NULLIFY(PROBLEM%PROBLEMS) + NULLIFY(problem%workGroup) NULLIFY(PROBLEM%CONTROL_LOOP) ELSE CALL FlagError("Problem is not associated.",err,error,*999) @@ -3777,6 +3784,36 @@ END SUBROUTINE Problem_SpecificationSizeGet !================================================================================================================================ ! + !>Sets the work group for a problem. \see OpenCMISS::cmfe_Problem_WorkGroupGet + SUBROUTINE Problem_WorkGroupSet(problem,workGroup,err,error,*) + + !Argument variables + TYPE(PROBLEM_TYPE), POINTER, INTENT(INOUT) :: problem !workGroup + + EXITS("Problem_WorkGroupSet") + RETURN +999 ERRORSEXITS("Problem_WorkGroupSet",err,error) + RETURN 1 + + END SUBROUTINE Problem_WorkGroupSet + + ! + !================================================================================================================================ + ! + !>Finalises all problems and deallocates all memory. SUBROUTINE PROBLEMS_FINALISE(err,error,*) diff --git a/src/types.f90 b/src/types.f90 index 1f9b0398..0cabfd4a 100644 --- a/src/types.f90 +++ b/src/types.f90 @@ -71,6 +71,7 @@ MODULE Types USE CmissPetscTypes, ONLY : PetscISColoringType,PetscKspType,PetscMatType,PetscMatColoringType,PetscMatFDColoringType, & & PetscPCType,PetscSnesType,PetscSnesLineSearchType,PetscTaoType,PetscVecType + USE ComputationAccessRoutines USE Constants USE Kinds USE ISO_C_BINDING @@ -1122,6 +1123,7 @@ MODULE Types INTEGER(INTG) :: numberOfComponents ! Date: Wed, 11 Apr 2018 12:49:55 +1200 Subject: [PATCH 06/13] Tidy up --- doc/latex/Latex_Makefile | 293 - doc/latex/Latex_make.sh | 77 - doc/latex/Makefigs | 48 - doc/latex/Makeplots | 76 - doc/latex/Makesvgs | 57 - doc/latex/abbreviations.tex | 156 - doc/latex/abconference.tex | 24 - doc/latex/defns.tex | 36 - doc/latex/genfigs.sh | 15 - doc/latex/genfigs1.sh | 12 - doc/latex/genpstex.sh | 17 - doc/latex/genpstex1.sh | 16 - doc/latex/macros.tex | 814 -- doc/latex/references.tex | 12 - doc/latex/shell.tex | 21 - doc/latex/shell_article.tex | 23 - doc/latex/shell_book.tex | 29 - doc/latex/shell_letter.tex | 30 - doc/latex/shell_report.tex | 34 - .../ElasticityClass/FiniteElasticity.tex | 878 -- doc/notes/Latex_make.sh | 105 - doc/notes/OpenCMISSNotes.tex | 56 - doc/notes/Theory/Theory.tex | 2054 ----- doc/notes/TitlePage/TitlePage.tex | 32 - doc/notes/svgs/Theory/cubichermiteelem.svg | 397 - src/#1657# | 0 src/Burgers_equation_routines.f90.fsicpb | 2576 ------ src/Darcy_equations_routines.f90.fsicpb | 8009 ----------------- src/Stokes_equations_routines.f90.fsicpb | 4170 --------- src/developerslines.txt | 137 - 30 files changed, 20204 deletions(-) delete mode 100755 doc/latex/Latex_Makefile delete mode 100755 doc/latex/Latex_make.sh delete mode 100755 doc/latex/Makefigs delete mode 100755 doc/latex/Makeplots delete mode 100755 doc/latex/Makesvgs delete mode 100755 doc/latex/abbreviations.tex delete mode 100755 doc/latex/abconference.tex delete mode 100755 doc/latex/defns.tex delete mode 100755 doc/latex/genfigs.sh delete mode 100755 doc/latex/genfigs1.sh delete mode 100755 doc/latex/genpstex.sh delete mode 100755 doc/latex/genpstex1.sh delete mode 100755 doc/latex/macros.tex delete mode 100755 doc/latex/references.tex delete mode 100755 doc/latex/shell.tex delete mode 100755 doc/latex/shell_article.tex delete mode 100755 doc/latex/shell_book.tex delete mode 100755 doc/latex/shell_letter.tex delete mode 100755 doc/latex/shell_report.tex delete mode 100755 doc/notes/EquationSets/ElasticityClass/FiniteElasticity.tex delete mode 100755 doc/notes/Latex_make.sh delete mode 100755 doc/notes/OpenCMISSNotes.tex delete mode 100755 doc/notes/Theory/Theory.tex delete mode 100755 doc/notes/TitlePage/TitlePage.tex delete mode 100755 doc/notes/svgs/Theory/cubichermiteelem.svg delete mode 100644 src/#1657# delete mode 100644 src/Burgers_equation_routines.f90.fsicpb delete mode 100644 src/Darcy_equations_routines.f90.fsicpb delete mode 100644 src/Stokes_equations_routines.f90.fsicpb delete mode 100644 src/developerslines.txt diff --git a/doc/latex/Latex_Makefile b/doc/latex/Latex_Makefile deleted file mode 100755 index 3daba123..00000000 --- a/doc/latex/Latex_Makefile +++ /dev/null @@ -1,293 +0,0 @@ -#*********************************************************************** -# FILE : -# Latex_Makefile -# -# CREATED : -# Chris Bradley and Martyn Nash, Feburary 1996 -# UPDATES : -# Leo Cheng, November 1998 - Adding option to generate 2 to a page ps. -# Martyn Nash, Feb 2006 - Adding option to generate 2 to a page pdf. -# Chris Bradley, Feb 2011 - Adding option to have svg figures. -# -# -# DESCRIPTION : -# Generic Makefile for LaTeX documents. Document specific parameters -# defined anare invoked from the shell script within the individual -# directory. See the Latex_make.sh script. -# -# The following options are implemented. -# -# (none) - Latex the document. -# clean - Clean up. Removes as in qclean + figs and plot cleans -# clobber - Removes as in clean + the .aux, .toc, .dvi and .ps files -# help - print this message -# html - Generate the html version of the document -# index - Generate the index of the document -# qclean - Quick clean. Removes .log, .bbl and .blg files -# quick - Always latex the document quickly (i.e. no rerun) -# pdf - Generate the pdf version of the document -# pdf2 - Generate the 2 page landscape pdf version of the document -# pics - Make sure the .pstex versions of the figures, svgs and the plots -# are up to date. -# pics_clean - Clean the figures, svgs and the plots. -# print - Print the document to the specified printer. -# print_range FIRST=# LAST=# - Print only the pages in the range -# FIRST-LAST to the specified printer. -# ps - Generate the postcript version of the document. -# ps2 - Generate 2 to a page landscape postscipt version." -# ps_range FIRST=# LAST=# - Generate the postscript version of only -# the pages in the range FIRST-LAST. -# update_html - Move the html version of the document to the -# directory where the html version will be referenced -# -#*********************************************************************** - -SHELL = /bin/sh - -# fixed commands -BIBTEX = bibtex - -# This cannot be found on esu1 - using ps2pdf now -#DVIPDF = dvipdf -#DVIPDF_OPTS = - -PS2PDF = ps2pdf -PS2PDF_OPTS = - - -DVIPS = dvips -DVIPS_OPTS = -Z -n 500 -t a4 -K0 -N0 - -# latex2html98.1 uses undef as a list operator which is not perl5.6 -LATEX2HTML = perl -S latex2html -LATEX2HTML_OPTS = -address ' ' -no_navigation -info ' ' -split 0 -tmp /tmp -FIXL2HTML = ${OPENCMISS_ROOT}/src/iron/doc/html_utils/fixl2html.sh -MAKEINDEX = makeindex -PRINT = lpr -PSNUP = psnup -2 -d0.1 - -# plot, figure and svg files -MAKEFIGS = make -f ${OPENCMISS_ROOT}/src/iron/doc/latex/Makefigs -MAKESVGS = make -f ${OPENCMISS_ROOT}/src/iron/doc/latex/Makesvgs -MAKEPLOTS = make -f ${OPENCMISS_ROOT}/src/iron/doc/latex/Makeplots - -# -# Standard TeX makefile follows -# - -.SUFFIXES: .pdf .ps .tex .fig .svg .gnu .eps - -.PRECIOUS: $(MAINFILE).dvi - -LATEX_CHECK = latex '\def\inputfigure{\input}' \\syntax \\input -LATEX_DVI = latex '\def\inputfigure{\input}' \\input -LATEX_DVIQ = latex \\batchmode '\def\inputfigure{\input}' \\input -LATEX_PS = latex '\def\inputfigure\#1{\psfig{figure=\#1.ps,silent=}}' \\input -LATEX_PSQ = latex \\batchmode \ - '\def\inputfigure\#1{\psfig{figure=\#1.ps}}' \ - \\input - -$(MAINFILE).dvi : $(MAINFILE).tex $(TEX_SRC) $(BIBS) $(EPS_SRC) $(FIG_SRC) $(PLOT_SRC) - @if test -d figs ; \ - then $(MAKE) -f ${OPENCMISS_ROOT}/src/iron/doc/latex/Latex_Makefile figsmake ; \ - else : ; \ - fi - @if test -d svgs ; \ - then $(MAKE) -f ${OPENCMISS_ROOT}/src/iron/doc/latex/Latex_Makefile svgsmake ; \ - else : ; \ - fi - @if test -d plots ; \ - then $(MAKE) -f ${OPENCMISS_ROOT}/src/iron/doc/latex/Latex_Makefile plotsmake ; \ - else : ; \ - fi - @if test -r $(MAINFILE).aux ; \ - then : ; \ - else $(LATEX_DVI) $(MAINFILE) ; \ - fi - @if grep 'Warning.*: Citation' $(MAINFILE).log >/dev/null ; \ - then $(BIBTEX) $(MAINFILE) ; $(LATEX_DVIQ) $(MAINFILE) ; \ - fi - $(LATEX_DVI) $(MAINFILE) - @if grep Rerun $(MAINFILE).log >/dev/null ; \ - then $(LATEX_DVIQ) $(MAINFILE) ; \ - else : ; \ - fi - -$(MAINFILE).pdf : $(MAINFILE).ps - $(PS2PDF) $(PS2PDF_OPTS) $(MAINFILE).ps $@ - -$(MAINFILE)_2.pdf : $(MAINFILE)_2.ps - $(PS2PDF) $(PS2PDF_OPTS) $(MAINFILE)_2.ps $@ - -$(MAINFILE)_range.pdf : range.ps - $(PS2PDF) $(PS2PDF_OPTS) range.ps $@ - -$(MAINFILE).ps : $(MAINFILE).dvi - $(DVIPS) $(DVIPS_OPTS) -o $@ $(MAINFILE) - -$(MAINFILE)_2.ps : $(MAINFILE).ps - $(PSNUP) $(MAINFILE).ps $(MAINFILE)_2.ps - -help : - @echo "General make for OpenCMISS latex documents:" - @echo "" - @echo "Usage: latexmake [options]" - @echo - @echo "The following options are implemented -" - @echo - @echo " (none) - Latex the document." - @echo " bib - Always bibtex then latex the document." - @echo " clean - Clean up. Removes as in qclean + figs and plot cleans." - @echo " clobber - Removes as in clean + the .aux, .toc, .dvi and .ps files." - @echo " help - print this message." - @echo " html - Generate the html version of the document." - @echo " index - Generate the index of the document." - @echo " qclean - Quick clean. Removes .log, .bbl and .blg files." - @echo " quick - Always latex the document quickly (i.e. no rerun)." - @echo " pdf - Generate the pdf version of the document." - @echo " pdf2 - Generate the 2 page landscape pdf version of the document." - @echo " pdf_range FIRST=# LAST=# - Generate the pdf version of only" - @echo " the pages in the range FIRST-LAST." - @echo " pics - Make sure the .pstex versions of the figures, svgs and " - @echo " the plots are up to date." - @echo " pics_clean - Clean the figures, svgs and plots." - @echo " print - Print the document to the specified printer." - @echo " print_range FIRST=# LAST=# - Print only the pages in the range" - @echo " FIRST-LAST to the specified printer." - @echo " ps - Generate the postcript version of the document." - @echo " ps2 - Generate 2 to a page landscape postscipt version." - @echo " ps_range FIRST=# LAST=# - Generate the postscript version of only" - @echo " the pages in the range FIRST-LAST." - @echo " update_html - Move the html version of the document to the" - @echo " directory where the html version will be referenced." - @echo "" - @echo "See the file Latex_make.sh for document specific options." - -bib : - $(BIBTEX) $(MAINFILE) - $(LATEX_DVI) $(MAINFILE) - @if grep Rerun $(MAINFILE).log >/dev/null ; \ - then $(LATEX_DVIQ) $(MAINFILE) ; \ - else : ; \ - fi - -html : $(MAINFILE)/index.html - -$(MAINFILE)/index.html : $(MAINFILE).tex - $(LATEX2HTML) $(LATEX2HTML_OPTS) $(MAINFILE).tex - -quick : - $(LATEX_DVI) $(MAINFILE) - -pics : $(FIG_SRC) $(SVG_SRC) $(PLOT_SRC) - @if test -d figs ; \ - then $(MAKE) -f ${OPENCMISS_ROOT}/src/iron/doc/latex/Latex_Makefile figsmake ; \ - else : ; \ - fi - @if test -d svgs ; \ - then $(MAKE) -f ${OPENCMISS_ROOT}/src/iron/doc/latex/Latex_Makefile svgsmake ; \ - else : ; \ - fi - @if test -d plots ; \ - then $(MAKE) -f ${OPENCMISS_ROOT}/src/iron/doc/latex/Latex_Makefile plotsmake ; \ - else : ; \ - fi - -pics_clean : - @if test -d figs ; \ - then $(MAKE) -f ${OPENCMISS_ROOT}/src/iron/doc/latex/Latex_Makefile figsclean ; \ - else : ; \ - fi - @if test -d svgs ; \ - then $(MAKE) -f ${OPENCMISS_ROOT}/src/iron/doc/latex/Latex_Makefile svgsclean ; \ - else : ; \ - fi - @if test -d plots ; \ - then $(MAKE) -f ${OPENCMISS_ROOT}/src/iron/doc/latex/Latex_Makefile plotsclean ; \ - else : ; \ - fi - -pdf : $(MAINFILE).pdf - -pdf2 : $(MAINFILE)_2.pdf - -pdf_range : $(MAINFILE)_range.pdf - -ps : $(MAINFILE).ps - -ps2: $(MAINFILE)_2.ps - -ps_range : $(MAINFILE).dvi - $(DVIPS) $(DVIPS_OPTS) -p $(FIRST) -l $(LAST) -o range.ps $(MAINFILE) - -range.ps : $(MAINFILE).dvi - $(DVIPS) $(DVIPS_OPTS) -p $(FIRST) -l $(LAST) -o range.ps $(MAINFILE) - -print : $(MAINFILE).ps - $(PRINT) -P$(PRINTER) $(MAINFILE).ps - -print_range : $(MAINFILE).dvi - $(DVIPS) $(DVIPS_OPTS) -p $(FIRST) -l $(LAST) -o range.ps $(MAINFILE) - $(PRINT) -P$(PRINTER) range.ps - - -update_html : $(HTMLUPDATE_DIR)/$(MAINFILE)/index.html - -$(HTMLUPDATE_DIR)/$(MAINFILE)/index.html : $(MAINFILE)/index.html - $(FIXL2HTML) $(HTMLIDXTYPE) $(MAINFILE)/index.html $(MAINFILE) - @if test -d $(HTMLUPDATE_DIR)/$(MAINFILE) ; \ - then : ; \ - else mkdir $(HTMLUPDATE_DIR)/$(MAINFILE) ; \ - fi - cp $(MAINFILE)/*.* $(HTMLUPDATE_DIR)/$(MAINFILE)/. - -index : $(MAINFILE).ind - -$(MAINFILE).ind : $(MAINFILE).idx - $(MAKEINDEX) $(MAINFILE).idx - @if grep 'Output written in '$(MAINFILE)'.ind' $(MAINFILE).ilg >/dev/null ; \ - then $(LATEX_DVIQ) $(MAINFILE) ; \ - else : ; \ - fi - -qclean : - -rm -f $(MAINFILE).dvi $(MAINFILE).bbl $(MAINFILE).blg $(MAINFILE).log - -clean : qclean - @if test -d figs ; \ - then $(MAKE) -f ${OPENCMISS_ROOT}/src/iron/doc/latex/Latex_Makefile figsclean ; \ - else : ; \ - fi - @if test -d svgs ; \ - then $(MAKE) -f ${OPENCMISS_ROOT}/src/iron/doc/latex/Latex_Makefile svgsclean ; \ - else : ; \ - fi - @if test -d plots ; \ - then $(MAKE) -f ${OPENCMISS_ROOT}/src/iron/doc/latex/Latex_Makefile plotsclean ; \ - else : ; \ - fi - -clobber : clean - find . -name "*.aux" -exec rm -f {} \; - -rm -f *.toc *.lof *.lot - -rm -f $(MAINFILE).dvi $(MAINFILE).ps range.ps - -figsmake : - @(cd figs ; $(MAKEFIGS)) - -figsclean : - @(cd figs ; $(MAKEFIGS) clean) - -svgsmake : - @(cd svgs ; $(MAKESVGS)) - -svgsclean : - @(cd svgs ; $(MAKESVGS) clean) - -plotsmake : - @(cd plots ; $(MAKEPLOTS)) - -plotsclean : - @(cd plots ; $(MAKEPLOTS) clean) - - diff --git a/doc/latex/Latex_make.sh b/doc/latex/Latex_make.sh deleted file mode 100755 index f4c68e3a..00000000 --- a/doc/latex/Latex_make.sh +++ /dev/null @@ -1,77 +0,0 @@ -#!/bin/sh -f -# -# This shell script is used to invoke the Latex_Makefile for general -# documents. It should be copied into the individual document directory -# as a new document is created. It is used to pass document specific -# parameters to the makefile. NOTE that if parameters may be omitted -# by simply deleting them from the "make" command line. -# -# Usage: -# Latex_make.sh [makefile_options] -# Created: -# Martyn Nash, 22 March 1996 -# Updates: -# -# Changable options: -# -# This is the overall name of the document - -MY_MAINFILE=themainfilename - -# -# These are the names of the tex sources for the document. If there is -# more than one source quotation (") marks must be used around the -# individual sources seperated by spaces. - -MY_TEX_SRC="chapter1/chapter1.tex chapter2/chapter2.tex" - -# -# The names of the eps/figs/(gnu)plot files that go into the document. -# if there are none then leave after the ='s sign blank. If there is -# more than one source quotation (") marks must be used around the -# individual sources seperated by spaces. - -MY_EPS_SRC=epsfiles/*.eps -MY_FIG_SRC=figs/*.fig -MY_PLOT_SRC=plots/*.gnu - -# -# The name of the directory to place the html version of the document. -# Note that the actual file will be placed in the directory -# MY_HTMLUPDATE_DIR/MY_MAINFILE with filename index.html - -MY_HTMLUPDATE_DIR=${OPENCMISS_ROOT}/src/iron/doc/www/help - -# -# This next option controls the type of backlinks to add to the footer -# of the HTML file. It should be "user" if the document is intended for -# general users or "programmer" if the document is intended for -# cmiss programmers. If no backlinks are required use "none". - -MY_HTMLIDXTYPE=user - -# -# The name of the bibliography database for the document - -MY_BIBS=${OPENCMISS_ROOT}/src/iron/doc/references/references.bib - -# -# The name of the printer to print the document to - -MY_PRINTER=laserjet_postscript - -# -# Below this line should not need changing -# -# Actual make command: -# -make -f ${OPENCMISS_ROOT}/src/iron/doc/latex/Latex_Makefile $* \ - MAINFILE=$MY_MAINFILE \ - TEX_SRC="$MY_TEX_SRC" \ - EPS_SRC="$MY_EPS_SRC" \ - FIG_SRC="$MY_FIG_SRC" \ - PLOT_SRC="$MY_PLOT_SRC" \ - HTMLUPDATE_DIR=$MY_HTMLUPDATE_DIR \ - HTMLIDXTYPE=$MY_HTMLIDXTYPE \ - BIBS=$MY_BIBS \ - PRINTER=$MY_PRINTER diff --git a/doc/latex/Makefigs b/doc/latex/Makefigs deleted file mode 100755 index 7a9d1481..00000000 --- a/doc/latex/Makefigs +++ /dev/null @@ -1,48 +0,0 @@ -# -# Makefile for figs -# -# Usage: -# make -f Makefigs filename.fig -# Created: -# Chris Bradley -# Updates: -# Glen Harris 8 August 1996 -# Correcting rule for '*.fig' so that new .fig files are picked up -# Chris Bradley 4 October 1996 -# Adding directories under the 'plots' directory -# Leo Cheng 27 November 1998 -# Allowing specfication of fig2dev -# - -#FIGS = *.fig -#EPS_FIGS = $(FIGS:.fig=.eps) -#PSTEX_FIGS = $(FIGS:.fig=.pstex) -#FIG2DEV = /usr/local/bin/fig2dev -FIG2DEV=fig2dev - - -SHELL=/bin/bash - -.SUFFIXES: .ps .tex .pstex .fig - -all : all_pstex - -.fig.ps: - ( cd ${@D} ; ${FIG2DEV} -Lps ${*F}.fig > ${@F} ) - -.fig.tex: - ( cd ${@D} ; ${FIG2DEV} -Leepic ${*F}.fig > ${@F} ) - -.fig.pstex: - ( cd ${@D} ; ${FIG2DEV} -Lpstex ${*F}.fig > ${*F}.eps ) - ( cd ${@D} ; ${FIG2DEV} -Lpstex_t -F -p${*F}.eps ${*F}.fig | sed -f ${OPENCMISS_ROOT}/src/iron/doc/latex/Strip_pstex_figs | sed s%CUR_DIR%${@D}% | sed s%=figs/./%=figs/% | sed s%=figs//%=figs/% | sed s%{figs/./%{figs/% | sed s%{figs//%{figs/% > ${@F} ) - -all_pstex: - @${OPENCMISS_ROOT}/src/iron/doc/latex/call_makefile.sh ${OPENCMISS_ROOT}/src/iron/doc/latex/Makefigs pstex `find . -name "*.fig" -print` - -clean: - find . -name "*.eps" -exec rm -f {} \; - find . -name "*.pstex" -exec rm -f {} \; - -clobber: clean - diff --git a/doc/latex/Makeplots b/doc/latex/Makeplots deleted file mode 100755 index 45ad971f..00000000 --- a/doc/latex/Makeplots +++ /dev/null @@ -1,76 +0,0 @@ -# -# Makefile for plots -# -# Usage: -# make -f Makeplots filename.gnu -# Created: -# Chris Bradley -# Updates: -# Glen Harris 8 August 1996 -# Correcting rule for '*.gnu' so that new .gnu files are picked up -# Chris Bradley 4 October 1996 -# Adding directories under the 'plots' directory -# Chris Bradley 4 October 1996 -# Automatically convert gnuplot \ to \\\\ so that the escape -# sequence is read by xfig properly -# Chris Bradley 25 October 1996 -# Directly output pstex from gnuplot. The old gnuplot->xfig->pstex -# way is in the Makeplots_old file. -# Chris Bradley 20 April 1998 -# Added .gnus for small gnuplots which can then be used in subfigures. -# Chris Bradley 29 November 1999 -# Added code to translate title "$\\ sequences into title "$\ sequences. -# - -SHELL=/bin/bash - -.SUFFIXES: .pstex .gnu .gnuc .gnucs .gnus .ps .eepic - -all : all_pstex all_pstexc all_pstexcs all_pstexs - -.gnu.pstex: - ( cd ${@D} ; echo "set terminal pslatex rotate auxfile" > Output_pstex.gnu_tmp ; echo "set output \""${*F}.pstex"\"" >> Output_pstex.gnu_tmp ; sed -e s%'\\\([A-Za-z#\]\)'%'\\\\\1'%g ${*F}.gnu |sed -e s%'title '\"'\\'%"title "\"%g | sed -e s%'title '\"'$$\\'%"title "\"$$%g > ${*F}.gnu_tmp ; gnuplot Output_pstex.gnu_tmp ${*F}.gnu_tmp ; rm -f Output_pstex.gnu_tmp ; rm -f ${*F}.gnu_tmp ) - ( cd ${@D} ; grep -v showpage ${*F}.ps > ${*F}.eps ; rm -f ${*F}.ps ; echo '\begin{picture}(-5,0)' > ${*F}.pstex_tmp ; echo '\epsfig{file='${*F}.eps"}" >> ${*F}.pstex_tmp ; echo '\end{picture}' >> ${*F}.pstex_tmp ; grep -v "special{psfile=" ${*F}.pstex >> ${*F}.pstex_tmp ; mv ${*F}.pstex_tmp ${*F}.pstex ; cp ${*F}.pstex junk.pstex ) - ( cd ${@D} ; sed -f ${OPENCMISS_ROOT}/src/iron/doc/latex/Strip_pstex_gnuplot ${*F}.pstex | sed s%CUR_DIR%${@D}% | sed s%=plots/./%=plots/% | sed s%=plots//%=plots/% > ${@F}_tmp ; mv ${@F}_tmp ${@F} ) - -.gnuc.pstex: - ( cd ${@D} ; echo "set terminal pslatex color rotate auxfile" > Output_pstex.gnuc_tmp ; echo "set output \""${*F}.pstex"\"" >> Output_pstex.gnuc_tmp; sed -e s%'\\\([A-Za-z#\]\)'%'\\\\\1'%g ${*F}.gnuc | sed -e s%'title '\"'\\'%"title "\"%g | sed -e s%'title '\"'$$\\'%"title "\"$$%g > ${*F}.gnuc_tmp ; gnuplot Output_pstex.gnuc_tmp ${*F}.gnuc_tmp ; rm -f Output_pstex.gnuc_tmp ; rm -f ${*F}.gnuc_tmp ) - ( cd ${@D} ; grep -v showpage ${*F}.ps > ${*F}.eps ; rm -f ${*F}.ps ; echo '\\begin{picture}(-5,0)' > ${*F}.pstex_tmp ; echo '\\epsfig{file='${*F}.eps"}" >> ${*F}.pstex_tmp ; echo '\\end{picture}' >> ${*F}.pstex_tmp ; grep -v "special{psfile=" ${*F}.pstex >> ${*F}.pstex_tmp ; mv ${*F}.pstex_tmp ${*F}.pstex ) - ( cd ${@D} ; sed -f ${OPENCMISS_ROOT}/src/iron/doc/latex/Strip_pstex_gnuplot ${*F}.pstex | sed s%CUR_DIR%${@D}% | sed s%=plots/./%=plots/% | sed s%=plots//%=plots/% > ${@F}_tmp ; mv ${@F}_tmp ${@F} ) - -.gnucs.pstex: - ( cd ${@D} ; echo "set terminal pslatex color rotate auxfile" > Output_pstex.gnucs_tmp ; echo "set output \""${*F}.pstex"\"" >> Output_pstex.gnucs_tmp ; echo "set size 0.55,0.55" >> Output_pstex.gnus_tmp ; sed -e s%'\\\([A-Za-z#\]\)'%'\\\\\1'%g ${*F}.gnucs | sed -e s%'title '\"'\\'%"title "\"%g | sed -e s%'title '\"'$$\\'%"title "\"$$%g > ${*F}.gnucs_tmp ; gnuplot Output_pstex.gnucs_tmp ${*F}.gnucs_tmp ; rm -f Output_pstex.gnucs_tmp ; rm -f ${*F}.gnucs_tmp ) - ( cd ${@D} ; grep -v showpage ${*F}.ps > ${*F}.eps ; rm -f ${*F}.ps ; echo '\\begin{picture}(-5,0)' > ${*F}.pstex_tmp ; echo '\\epsfig{file='${*F}.eps"}" >> ${*F}.pstex_tmp ; echo '\\end{picture}' >> ${*F}.pstex_tmp ; grep -v "special{psfile=" ${*F}.pstex >> ${*F}.pstex_tmp ; mv ${*F}.pstex_tmp ${*F}.pstex ) - ( cd ${@D} ; sed -f ${OPENCMISS_ROOT}/src/iron/doc/latex/Strip_pstex_gnuplot ${*F}.pstex | sed s%CUR_DIR%${@D}% | sed s%=plots/./%=plots/% | sed s%=plots//%=plots/% > ${@F}_tmp ; mv ${@F}_tmp ${@F} ) - -.gnus.pstex: - ( cd ${@D} ; echo "set terminal pslatex rotate auxfile" > Output_pstex.gnus_tmp ; echo "set output \""${*F}.pstex"\"" >> Output_pstex.gnus_tmp ; echo "set size 0.55,0.55" >> Output_pstex.gnus_tmp ; sed -e s%'\\\([A-Za-z#\]\)'%'\\\\\1'%g ${*F}.gnus | sed -e s%'title '\"'\\'%"title "\"%g | sed -e s%'title '\"'$$\\'%"title "\"$$%g > ${*F}.gnus_tmp ; gnuplot Output_pstex.gnus_tmp ${*F}.gnus_tmp ; rm -f Output_pstex.gnus_tmp ; rm -f ${*F}.gnus_tmp ) - ( cd ${@D} ; grep -v showpage ${*F}.ps > ${*F}.eps ; rm -f ${*F}.ps ; echo '\\begin{picture}(-5,0)' > ${*F}.pstex_tmp ; echo '\\epsfig{file='${*F}.eps"}" >> ${*F}.pstex_tmp ; echo '\\end{picture}' >> ${*F}.pstex_tmp ; grep -v "special{psfile=" ${*F}.pstex >> ${*F}.pstex_tmp ; mv ${*F}.pstex_tmp ${*F}.pstex ) - ( cd ${@D} ; sed -f ${OPENCMISS_ROOT}/src/iron/doc/latex/Strip_pstex_gnuplot ${*F}.pstex | sed s%CUR_DIR%${@D}% | sed s%=plots/./%=plots/% | sed s%=plots//%=plots/% > ${@F}_tmp ; mv ${@F}_tmp ${@F} ) - -.gnu.eepic: - ( cd ${@D} ; gnuplot ${OPENCMISS_ROOT}/src/iron/doc/latex/Output_eepic.gnu ${*F}.gnu > ${@F} ) - -.gnu.ps: - ( cd ${@D} ; gnuplot ${OPENCMISS_ROOT}/src/iron/doc/latex/Output_ps ${*F}.gnu > ${@F} ) - -all_pstex: - @${OPENCMISS_ROOT}/src/iron/doc/latex/call_makefile.sh ${OPENCMISS_ROOT}/src/iron/doc/latex/Makeplots pstex `find . -name "*.gnu" -print` - -all_pstexc: - @${OPENCMISS_ROOT}/src/iron/doc/latex/call_makefile.sh ${OPENCMISS_ROOT}/src/iron/doc/latex/Makeplots pstex `find . -name "*.gnuc" -print` - -all_pstexcs: - @${OPENCMISS_ROOT}/src/iron/doc/latex/call_makefile.sh ${OPENCMISS_ROOT}/src/iron/doc/latex/Makeplots pstex `find . -name "*.gnucs" -print` - -all_pstexs: - @${OPENCMISS_ROOT}/src/iron/doc/latex/call_makefile.sh ${OPENCMISS_ROOT}/src/iron/doc/latex/Makeplots pstex `find . -name "*.gnus" -print` - -clean: - find . -name "*.eps" -exec rm -f {} \; - find . -name "*.pstex" -exec rm -f {} \; - find . -name "*.eepic" -exec rm -f {} \; - find . -name "*.ps" -exec rm -f {} \; - -clobber: clean - diff --git a/doc/latex/Makesvgs b/doc/latex/Makesvgs deleted file mode 100755 index 98198d12..00000000 --- a/doc/latex/Makesvgs +++ /dev/null @@ -1,57 +0,0 @@ -# -# Makefile for svgs -# -# Usage: -# make -f Makesvgs filename.svg -# Created: -# Chris Bradley -# Updates: -# - -INKSCAPE=inkscape - -SHELL=/bin/bash - -.SUFFIXES: .pdf .ps .eps .tex .pdf_tex .ps_tex .eps_tex .svg - -#all : all_pdf_tex -#all : all_ps_tex -all : all_eps_tex - -.svg.pdf: - ( cd ${@D} ; ${INKSCAPE} -D -z --export-pdf=${@F} ${*F}.svg ) - -.svg.ps: - ( cd ${@D} ; ${INKSCAPE} -D -z --export-ps=${@F} ${*F}.svg ) - -.svg.eps: - ( cd ${@D} ; ${INKSCAPE} -D -z --export-eps=${@F} ${*F}.svg ) - -.svg.tex: - ( cd ${@D} ; ${INKSCAPE} -D -z --export-latex ${*F}.svg ) - -.svg.pdf_tex: - ( cd ${@D} ; ${INKSCAPE} -D -z --export-pdf=${*F}.pdf --export-latex ${*F}.svg ; sed -f ${OPENCMISS_ROOT}/src/iron/doc/latex/Strip_pdftex_svgs ${@F} | sed s%CUR_DIR%${@D}% | sed s%=svgs/./%=svgs/% | sed s%=svgs//%=svgs/% | sed s%{svgs/./%{svgs/% | sed s%{svgs//%{svgs/% > ${*F}.tmp ; mv ${*F}.tmp ${@F} ) - -.svg.ps_tex: - ( cd ${@D} ; ${INKSCAPE} -D -z --export-ps=${*F}.ps --export-latex ${*F}.svg ; sed -f ${OPENCMISS_ROOT}/src/iron/doc/latex/Strip_pdftex_svgs ${@F} | sed s%CUR_DIR%${@D}% | sed s%=svgs/./%=svgs/% | sed s%=svgs//%=svgs/% | sed s%{svgs/./%{svgs/% | sed s%{svgs//%{svgs/% > ${*F}.tmp ; mv ${*F}.tmp ${@F} ) - -.svg.eps_tex: - ( cd ${@D} ; ${INKSCAPE} -D -z --export-eps=${*F}.eps --export-latex ${*F}.svg ; sed -f ${OPENCMISS_ROOT}/src/iron/doc/latex/Strip_epstex_svgs ${@F} | sed s%CUR_DIR%${@D}% | sed s%=svgs/./%=svgs/% | sed s%=svgs//%=svgs/% | sed s%{svgs/./%{svgs/% | sed s%{svgs//#%{svgs/% > ${*F}.tmp ; mv ${*F}.tmp ${@F} ) - -all_pdf_tex: - @${OPENCMISS_ROOT}/src/iron/doc/latex/call_makefile.sh ${OPENCMISS_ROOT}/src/iron/doc/latex/Makesvgs pdf_tex `find . -name "*.svg" -print` - -all_ps_tex: - @${OPENCMISS_ROOT}/src/iron/doc/latex/call_makefile.sh ${OPENCMISS_ROOT}/src/iron/doc/latex/Makesvgs ps_tex `find . -name "*.svg" -print` - -all_eps_tex: - @${OPENCMISS_ROOT}/src/iron/doc/latex/call_makefile.sh ${OPENCMISS_ROOT}/src/iron/doc/latex/Makesvgs eps_tex `find . -name "*.svg" -print` - -clean: - find . -name "*.pdf_tex" -exec rm -f {} \; - find . -name "*.ps_tex" -exec rm -f {} \; - find . -name "*.eps_tex" -exec rm -f {} \; - -clobber: clean - diff --git a/doc/latex/abbreviations.tex b/doc/latex/abbreviations.tex deleted file mode 100755 index aca33d9d..00000000 --- a/doc/latex/abbreviations.tex +++ /dev/null @@ -1,156 +0,0 @@ -% -% abbreviations.tex -% -% This file contains the list of common words and phrases and their tex -% abbreviations -% -% Created: -% 10 September 1996 -% -% Updated: -% Leo Cheng 31 May 1998 Moved \CMISS to macros.tex -% Leo Cheng 24 Apr 1999 experimental terms -% Mark Trew 14 Feb 2001 added abbreviation for cf. -% Leo Cheng 26 Feb 2001 added insilico - - - - -\newcommand{\wrt}{with respect to\xspace} - - - -% -% Experimental terms -% -\newcommand{\invivo}{\emph{in-vivo\xspace}} -\newcommand{\Invivo}{\emph{In-vivo}\xspace} - -\newcommand{\exvivo}{\emph{ex-vivo\xspace}} -\newcommand{\Exvivo}{\emph{Ex-vivo\xspace}} - - -\newcommand{\invitro}{\emph{in-vitro}\xspace} -\newcommand{\Invitro}{\emph{In-vitro}\xspace} - -\newcommand{\insitu}{\emph{in-situ}\xspace} -\newcommand{\Insitu}{\emph{In-situ}\xspace} - -\newcommand{\insilico}{\emph{in-silico}\xspace} -\newcommand{\Insilico}{\emph{In-silico}\xspace} - - - - -% -% Latin abbreviations -% -\newcommand{\eg}{\emph{e.g.,}\xspace} % e.g., -\newcommand{\apriori}{\emph{a priori}\xspace} % a priori -\newcommand{\etal}{\emph{et al.}\xspace} % et al. -\newcommand{\etc}{\emph{etc.}\xspace} % etc. -\newcommand{\ie}{\emph{i.e.,}\xspace} % i.e., -\newcommand{\nb}{\emph{n.b.}\xspace} % n.b. -\newcommand{\cf}{\emph{cf.}\xspace} % cf. confer -% - - -% -% Numerical methods -% -\newcommand{\boundelem}{boundary element\xspace} -\newcommand{\boundelems}{boundary elements\xspace} -\newcommand{\Boundelem}{Boundary element\xspace} -\newcommand{\Boundelems}{Boundary elements\xspace} -\newcommand{\finelem}{finite element\xspace} -\newcommand{\finelems}{finite elements\xspace} -\newcommand{\Finelem}{Finite element\xspace} -\newcommand{\Finelems}{Finite elements\xspace} -\newcommand{\findiff}{finite difference\xspace} -\newcommand{\findiffs}{finite differences\xspace} -\newcommand{\Findiff}{Finite difference\xspace} -\newcommand{\Findiffs}{Finite differences\xspace} -\newcommand{\bem}{boundary element method\xspace} -\newcommand{\bems}{boundary element methods\xspace} -\newcommand{\Bem}{Boundary element method\xspace} -\newcommand{\Bems}{Boundary element methods\xspace} -\newcommand{\fem}{finite element method\xspace} -\newcommand{\fems}{finite element methods\xspace} -\newcommand{\Fem}{Finite element method\xspace} -\newcommand{\Fems}{Finite element methods\xspace} -\newcommand{\fdm}{finite difference method\xspace} -\newcommand{\fdms}{finite difference methods\xspace} -\newcommand{\Fdm}{Finite difference method\xspace} -\newcommand{\Fdms}{Finite difference methods\xspace} -\newcommand{\nonlin}{non-linear\xspace} -\newcommand{\Nonlin}{Non-linear\xspace} - - -% -% Differential equations -% -\newcommand{\diffeqn}{differential equation\xspace} -\newcommand{\diffeqns}{differential equations\xspace} -\newcommand{\pde}{partial differential equation\xspace} -\newcommand{\pdes}{partial differential equations\xspace} - -% -% Geometry -% -\newcommand{\arclen}{arc-length\xspace} -\newcommand{\arclens}{arc-lengths\xspace} -\newcommand{\Arclen}{Arc-length\xspace} -\newcommand{\Arclens}{Arc-lengths\xspace} - -% -% Basis functions and interpolation -% -\newcommand{\bicubicherm}{bicubic Hermite\xspace} -\newcommand{\Bicubicherm}{Bicubic Hermite\xspace} -\newcommand{\cubicherm}{cubic Hermite\xspace} -\newcommand{\Cubicherm}{Cubic Hermite\xspace} -\newcommand{\linlagran}{linear Lagrange\xspace} -\newcommand{\Linlagran}{Linear Lagrange\xspace} - -% -% Coordinates and dimensions -% -\newcommand{\xicoord}{$\xi$-coordinate\xspace} -\newcommand{\xicoords}{$\xi$-coordinates\xspace} - -\newcommand{\xcoord}{$x$-coordinate\xspace} -\newcommand{\ycoord}{$y$-coordinate\xspace} -\newcommand{\zcoord}{$z$-coordinate\xspace} - -\newcommand{\rcoord}{$r$-coordinate\xspace} -\newcommand{\tcoord}{$\theta$-coordinate\xspace} -\newcommand{\pcoord}{$\phi$-coordinate\xspace} -\newcommand{\mcoord}{$\mu$-coordinate\xspace} -\newcommand{\lcoord}{$\lambda$-coordinate\xspace} - - -\newcommand{\oned}{one-dimension\xspace} -\newcommand{\oneds}{one-dimensions\xspace} -\newcommand{\Oned}{One-dimension\xspace} -\newcommand{\Oneds}{One-dimensions\xspace} -\newcommand{\onedal}{one-dimensional\xspace} -\newcommand{\Onedal}{One-dimensional\xspace} - -\newcommand{\twod}{two-dimension\xspace} -\newcommand{\twods}{two-dimensions\xspace} -\newcommand{\Twod}{Two-dimension\xspace} -\newcommand{\Twods}{Two-dimensions\xspace} -\newcommand{\twodal}{two-dimensional\xspace} -\newcommand{\Twodal}{Two-dimensional\xspace} - -\newcommand{\threed}{three-dimension\xspace} -\newcommand{\threeds}{three-dimensions\xspace} -\newcommand{\Threed}{Three-dimension\xspace} -\newcommand{\Threeds}{Three-dimensions\xspace} -\newcommand{\threedal}{three-dimensional\xspace} -\newcommand{\Threedal}{Three-dimensional\xspace} - -%%% Local Variables: -%%% mode: latex -%%% TeX-master: t -%%% End: diff --git a/doc/latex/abconference.tex b/doc/latex/abconference.tex deleted file mode 100755 index 100c1a87..00000000 --- a/doc/latex/abconference.tex +++ /dev/null @@ -1,24 +0,0 @@ -\documentclass[12pt,twoside,dvips]{article} - -\usepackage{times} -\usepackage{/data/OpenCMISS/src/iron/doc/latex/abconference} - -%\starteven -\startodd - -\title{The Title} -\author{The Authors} - -\begin{document} - -\maketitle - -\section{INTRODUCTION} - -\bibliographystyle{plain} - -\section{SPEAKER INFORMATION} - -\end{document} - - diff --git a/doc/latex/defns.tex b/doc/latex/defns.tex deleted file mode 100755 index 6feb71c9..00000000 --- a/doc/latex/defns.tex +++ /dev/null @@ -1,36 +0,0 @@ -\usepackage{etex} %increase the size of fixed (register) arrays -\usepackage{epic} %package for epic -\usepackage{eepic} %package for extended epic -\def\tenrm{} -\usepackage{rotating} -\usepackage{subfigure} -\usepackage{ifthen} -\usepackage{epsfig} -\usepackage{graphicx} -\usepackage{harvard} -\usepackage{color} -\usepackage{multirow} -\usepackage{makeidx} % makes index - -\gdef\SetFigFont#1#2#3{#3} -\gdef\SetFigFontNFSS#1#2#3{#3} - -% line spacing definitions -\usepackage{setspace} % Line spacing package -\newcommand{\singlespc}{\setstretch{1.00}} % Single spacing -\newcommand{\oneandhalfspc}{\setstretch{1.24}} % One and a half spacing -\newcommand{\doublespc}{\setstretch{1.66}} % Double spacing -\oneandhalfspc - -% Page style definitions -%\setlength{\parskip}{\baselineskip} % these two lines for -%\setlength{\parindent}{0mm} % no paragraph indents -\usepackage{vmargin} -\setpapersize{A4} -\setmargrb{25mm}{35mm}{25mm}{35mm} -\addtolength{\headheight}{6pt} - -% Local Variables: -% mode: latex -% TeX-master: t -% End: diff --git a/doc/latex/genfigs.sh b/doc/latex/genfigs.sh deleted file mode 100755 index 1c6c9e7f..00000000 --- a/doc/latex/genfigs.sh +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/sh -# -# Shell file for generating fig files (for the first time) from -# gnu files. -# -# Usage: -# genfigs *.gnu -# Created: -# Chris Bradley 9 March 1996 -# Updates: -# -for filename -do - ${OPENCMISS_ROOT}/src/iron/doc/latex/genfigs1.sh $filename -done diff --git a/doc/latex/genfigs1.sh b/doc/latex/genfigs1.sh deleted file mode 100755 index e380e743..00000000 --- a/doc/latex/genfigs1.sh +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/csh -f -# -# Shell file for generating fig files (for the first time) from -# gnu files. -# -# Usage: -# see genfigs.sh for usage details -# Created: -# Chris Bradley -# Updates: -# -make -f ${OPENCMISS_ROOT}/src/iron/doc/latex/Makeplots $1:r.fig diff --git a/doc/latex/genpstex.sh b/doc/latex/genpstex.sh deleted file mode 100755 index 0745ae83..00000000 --- a/doc/latex/genpstex.sh +++ /dev/null @@ -1,17 +0,0 @@ -#!/bin/sh -# -# Shell file for generating pstex files (for the first time) -# -# Usage: -# genpstex [figs]/plots *.fig -# Created: -# Chris Bradley -# Updates: -# Chris Bradley 10/3/96 Added figs/plots option -# -type=$1 -shift -for filename -do - ${OPENCMISS_ROOT}/src/iron/doc/latex/genpstex1.sh $type $filename -done diff --git a/doc/latex/genpstex1.sh b/doc/latex/genpstex1.sh deleted file mode 100755 index e2987a0b..00000000 --- a/doc/latex/genpstex1.sh +++ /dev/null @@ -1,16 +0,0 @@ -#!/bin/csh -f -# -# Shell file for generating pstex files (for the first time) -# -# Usage: -# see genpstex.sh for usage details -# Created: -# Chris Bradley -# Updates: -# Chris Braldey 10/3/96 Using the same file for plots and figs -# -if($1 == 'plots') then -make -f ${OPENCMISS_ROOT}/src/iron/doc/latex/Makeplots $2:r.pstex -else -make -f ${OPENCMISS_ROOT}/src/iron/doc/latex/Makefigs $2:r.pstex -endif diff --git a/doc/latex/macros.tex b/doc/latex/macros.tex deleted file mode 100755 index 9b9c2784..00000000 --- a/doc/latex/macros.tex +++ /dev/null @@ -1,814 +0,0 @@ -% -% Macros.tex - global macros file -% -% Created: -% 10 September 1996 -% -% Updates: -% Leo Cheng 31 May 1998, macros for DES software names -% Leo Cheng 19 August 1998, added units for grams and kg -% Leo Cheng 18 January 1999, added units for ohmcm -% Leo Cheng 17 May 1999, adding modified url package and macros -% Chris Bradley, 1 Dec 1999, adding \unitseparator. -% Chris Bradley, 7 September 2000, Changed \lps to \Lps and \mMpLpms etc. -% to \mmolpLpms etc. -% Mark Trew, 8 June 2001. Made all macro arguments raised to a power -% protected by {}, e.g. replaced #2^ with {#2}^. -% Chris Bradley, 22 Feb 2011. Added svg figure support. -% Chris Bradley, 6 August 2014, Differential geometry support. - - -% -% Necessary packages -% -\usepackage{alltt} -\usepackage[centertags]{amsmath} -\usepackage{amssymb} -\usepackage{calc} -\usepackage{epsfig} %package for eps figures -\usepackage{eufrak} %For math Fraktur fonts -\usepackage{ifthen} -\usepackage{xspace} -\usepackage{url} - - -% URL commands -% -\newcommand{\email} {\begingroup \urlstyle{sf}\Url} -\newcommand{\directory} {\begingroup \urlstyle{sf}\Url} -\newcommand{\file} {\begingroup \urlstyle{sf}\Url} -\renewcommand{\url} {\begingroup \urlstyle{sf}\Url} - - -% -% Software and systmes -% -\newcommand{\OpenCMISS} {\textsf{OpenCMISS}\xspace} -\newcommand{\CMISS} {\textsf{CMISS}\xspace} -\newcommand{\CM} {\textsf{CM}\xspace} %note upper case to distinguish from centimeters -\newcommand{\CMGUI} {\textsf{CMGUI}\xspace} -\newcommand{\UNEMAP}{\textsf{UnEmap}\xspace} -\newcommand{\FieldML}{\textsf{FieldML}\xspace} -\newcommand{\CellML}{\textsf{CellML}\xspace} - -% -% New commands -% -\newcommand{\Index}[1]{#1\index{#1}} -\newcommand{\subsubsubsection}[1]{\noindent\textbf{#1}} -%\newcommand{\newabbrev}[2]{\newcommand{#1}{#2\xspace}} -%\newcommand{\newabbrevs}[3]{\newcommand{#1}{#2\xspace}\newcommand{#3}{#2s\xspace}} -\newcommand{\clearemptydoublepage}{\newpage{\pagestyle{empty}\cleardoublepage}} -%\newcommand{\newion}[3]{\newcommand{#1}{\ion{#2}{#3}}} % new ion -%\newcommand{\newunit}[2]{\newcommand{#1}{\units{#2}}} % new unit -% -% New enironments -% -\newenvironment{code}[0]{\small\begin{alltt}}{\end{alltt}\normalsize} -% -% Figures etc. -% -\newcommand{\pdftexfigure}[5]{ % - \begin{figure}[htbp] \centering % - \ifthenelse{\equal{#5}{}}{ % - \def\svgwidth{\columnwidth}}{ % - \def\svgscale{#5} % - } % - \input{#1} % - \ifthenelse{\equal{#2}{}}{ % - \caption{#3}}{ % - \caption[#2]{#3} % - } % - \label{#4} % - \end{figure} % - } % pdftex figure i.e. inkscape svgs - % e.g. \pdftexfigure{figure}{short caption}{long caption}{label}{scale} - % or \pdftexfigure{figure}{}{caption}{label}{} - -\newcommand{\epstexfigure}[5]{ % - \begin{figure}[htbp] \centering % - \ifthenelse{\equal{#5}{}}{ % - \def\svgwidth{\columnwidth}}{ % - \def\svgscale{#5} % - } % - \input{#1} % - \ifthenelse{\equal{#2}{}}{ % - \caption{#3}}{ % - \caption[#2]{#3} % - } % - \label{#4} % - \end{figure} % - } % epstex figure i.e. inkscape svgs - % e.g. \epstexfigure{figure}{short caption}{long caption}{label}{scale} - % or \epstexfigure{figure}{}{caption}{label}{} - -\newcommand{\pstexfigure}[5]{ % - \begin{figure}[htbp] \centering % - \ifthenelse{\equal{#5}{}}{ % - \def\svgwidth{\columnwidth}}{ % - \def\svgscale{#5} % - } % - \input{#1} % - \ifthenelse{\equal{#2}{}}{ % - \caption{#3}}{ % - \caption[#2]{#3} % - } % - \label{#4} % - \end{figure} % - } % pstex figure i.e. inkscape, xfig or gnuplot - % e.g. \pstexfigure{figure}{short caption}{long caption}{label}{scale} - % or \pstexfigure{figure}{}{caption}{label}{} - -\newcommand{\epsfigure}[4]{ % - \begin{figure}[htbp] \centering % - \epsfig{#1} % - \ifthenelse{\equal{#2}{}}{ % - \caption{#3}}{ % - \caption[#2]{#3} % - } % - \label{#4} % - \end{figure} % - } % eps figure - % e.g. \epsfigure{epsfig options}{short caption}{long caption}{label} - % or \epsfigure{epsfig options}{}{caption}{label} - -\newcommand{\incgrfigure}[5]{ % - \begin{figure}[htbp] \centering % - \includegraphics[#1]{#2} % - \ifthenelse{\equal{#3}{}}{ % - \caption{#4}}{ % - \caption[#3]{#4} % - } % - \label{#5} % - \end{figure} % - } % include graphics figure - % e.g. \incgrfigure{height/width options}{epsfig options}{short caption} - % {long caption}{label} - % or \incgrfigure{height/width options}{epsfig options}{}{caption}{label} - -% -% Formats for references to equations, tables etc. -% -\newcommand{\appendref}[1]{Appendix~\ref{#1}} % Appendix reference -\newcommand{\Appendref}[1]{Appendix~\ref{#1}} % Appendix reference -\newcommand{\appendrefs}[2]{Appendices~\ref{#1} and~\ref{#2}} % Appendices ref. -\newcommand{\Appendrefs}[2]{Appendices~\ref{#1} and~\ref{#2}} % Appendices ref. -\newcommand{\appendthrurefs}[2]{Appendices~\ref{#1}--\ref{#2}} % Appendices-- -\newcommand{\Appendthrurefs}[2]{Appendices~\ref{#1}--\ref{#2}} % Appendices-- -\newcommand{\bref}[1]{(\ref{#1})} % bracketed () reference -\newcommand{\chapref}[1]{Chapter~\ref{#1}} % Chapter reference -\newcommand{\Chapref}[1]{Chapter~\ref{#1}} % Chapter reference -\newcommand{\chaprefs}[2]{Chapters~\ref{#1} and~\ref{#2}} % Chapters reference -\newcommand{\Chaprefs}[2]{Chapters~\ref{#1} and~\ref{#2}} % Chapters reference -\newcommand{\chathrurefs}[2]{Chapters~\bref{#1}--\bref{#2}} % Chapters-- ref. -\newcommand{\Chathrurefs}[2]{Chapters~\bref{#1}--\bref{#2}} % Chapters-- ref. -\newcommand{\eqnref}[1]{Equation~\bref{#1}} % Equation reference -\newcommand{\Eqnref}[1]{Equation~\bref{#1}} % Equation reference -\newcommand{\eqnrefs}[2]{Equations~\bref{#1} and~\bref{#2}} % Equations ref. -\newcommand{\Eqnrefs}[2]{Equations~\bref{#1} and~\bref{#2}} % Equations ref. -\newcommand{\eqnthrurefs}[2]{Equations~\bref{#1}--\bref{#2}} % Equations-- ref. -\newcommand{\Eqnthrurefs}[2]{Equations~\bref{#1}--\bref{#2}} % Equations-- ref. -\newcommand{\figref}[1]{Figure~\ref{#1}} % Figure reference -\newcommand{\Figref}[1]{Figure~\ref{#1}} % Figure reference -\newcommand{\figrefs}[2]{Figures~\ref{#1} and~\ref{#2}} % Figures reference -\newcommand{\Figrefs}[2]{Figures~\ref{#1} and~\ref{#2}} % Figures reference -\newcommand{\figthrurefs}[2]{Figures~\bref{#1}--\bref{#2}} % Figures-- ref. -\newcommand{\Figthrurefs}[2]{Figures~\bref{#1}--\bref{#2}} % Figures-- ref. -\newcommand{\pagref}[1]{page~\pageref{#1}} % page reference -\newcommand{\Pagref}[1]{Page~\pageref{#1}} % Page reference -\newcommand{\pagrefs}[2]{pages~\pageref{#1} and~\pageref{#2}} % pages reference -\newcommand{\Pagrefs}[2]{Pages~\pageref{#1} and~\pageref{#2}} % Pages reference -\newcommand{\pagthrurefs}[2]{pages~\pageref{#1}--\pageref{#2}} % pages-- -\newcommand{\Pagthrurefs}[2]{Pages~\pageref{#1}--\pageref{#2}} % Pages-- -\newcommand{\secref}[1]{Section~\ref{#1}} % Section reference -\newcommand{\Secref}[1]{Section~\ref{#1}} % Section reference -\newcommand{\secrefs}[2]{Sections~\ref{#1} and~\ref{#2}} % Sections reference -\newcommand{\Secrefs}[2]{Sections~\ref{#1} and~\ref{#2}} % Sections reference -\newcommand{\secthrurefs}[2]{Sections~\bref{#1}--\bref{#2}} % Sections-- ref. -\newcommand{\Secthrurefs}[2]{Sections~\bref{#1}--\bref{#2}} % Sections-- ref. -\newcommand{\tabref}[1]{Table~\ref{#1}} % Table reference -\newcommand{\Tabref}[1]{Table~\ref{#1}} % Table reference -\newcommand{\tabrefs}[2]{Tables~\ref{#1} and~\ref{#2}} % Tables reference -\newcommand{\Tabrefs}[2]{Tables~\ref{#1} and~\ref{#2}} % Tables reference -\newcommand{\tabthrurefs}[2]{Tables~\bref{#1}--\bref{#2}} % Tables-- ref. -\newcommand{\Tabthrurefs}[2]{Tables~\bref{#1}--\bref{#2}} % Tables-- ref. - -% -% Miscellaneous -% -\newcommand{\remark}[1]{\textbf{[Remark: #1]}} -\newcommand{\todo}[1]{\textbf{[#1]}} -\newcommand{\colloq}[1]{``#1''} % colloquialism -\newcommand{\compfile}[1]{\texttt{#1}} -\newcommand{\compcode}[1]{\texttt{#1}} -\newcommand{\compcom}[1]{\texttt{#1}} -\newcommand{\compin}[1]{\texttt{#1}} -\newcommand{\compout}[1]{\texttt{#1}} - -% -% Ions -% -\newcommand{\chemical}[1]{\ensuremath{\mathrm{#1}}} % chemical formulae -\newcommand{\conc}[2]{\ensuremath{ % - [\mathrm{#1}]_{#2} % - }} % concentration e.g. \conc{Na}{o} => [Na]_o -\newcommand{\ion}[2]{\ensuremath{\mathrm{{#1}^{#2}}}\xspace} % ion -\newcommand{\ionCa}{\ion{Ca}{2+}} % calcium ion - - -\newcommand{\ionCl}{\ion{Cl}{-}} % chloride ion -\newcommand{\ionH}{\ion{H}{+}} % hydrogen ion -\newcommand{\ionK}{\ion{K}{+}} % potassium ion -\newcommand{\ionMg}{\ion{Mg}{2+}} % magnessium ion -\newcommand{\ionNa}{\ion{Na}{+}} % sodium ion -\newcommand{\ionphosphate}{\ion{PO_{4}}{3-}} % phosphate ion -\newcommand{\ionbicarbonate}{\ion{HCO_{3}}{-}} % bicarbonate ion -% -% Units -% -\newcommand{\units}[1]{\ensuremath{\mathrm{#1}}\xspace} % units -\newcommand{\nunit}[2]{\ensuremath{ % - #1~#2 % - }} % number + unit e.g. \nunit{10}{\m} => 10 m -\newcommand{\nrunit}[3]{\ensuremath{ % - #1\text{--}#2~#3 % - }} % number range + unit e.g. \nrunit{10}{20}{\m} => 10--20 m - - -\newcommand{\mg}{\units{mg}} % milligrams -\newcommand{\g}{\units{g}} % grams -\newcommand{\kg}{\units{kg}} % kilograms -\newcommand{\dB}{\units{dB}} % decibels -\newcommand{\degC}{\units{\degree C}} % degrees Celcius -\newcommand{\kPa}{\units{kPa}} % kilopascals -\newcommand{\MPa}{\units{MPa}} % Megapascals -\newcommand{\GPa}{\units{GPa}} % Gigapascals -\newcommand{\N}{\units{N}} % Newtons -\newcommand{\kN}{\units{kN}} % kilonewtons -\newcommand{\ml}{\units{ml}} % millilitres -%\newcommand{\L}{\units{L}} % litres -\newcommand{\Hz}{\units{Hz}} % Hertz -\newcommand{\kHz}{\units{kHz}} % kilohertz -\newcommand{\MHz}{\units{MHz}} % Megahertz -\newcommand{\nm}{\units{nm}} % nanometres -\newcommand{\um}{\units{\mu m}} % micrometres -\newcommand{\mm}{\units{mm}} % millimetres -\newcommand{\cm}{\units{cm}} % centimetres -\newcommand{\m}{\units{m}} % metres -\newcommand{\A}{\units{A}} % amps -\newcommand{\mA}{\units{mA}} % milliamps -\newcommand{\uA}{\units{\mu A}} % microamps -\newcommand{\nA}{\units{nA}} % nanoamps -\newcommand{\mM}{\units{mM}} % milliMolar -\newcommand{\mmol}{\units{mmol}} % millimolar -\newcommand{\us}{\units{\mu s}} % microseconds -\newcommand{\ms}{\units{ms}} % milliseconds -\newcommand{\s}{\units{s}} % seconds -\newcommand{\uS}{\units{\mu S}} % microSiemens -\newcommand{\mS}{\units{mS}} % milliSiemens -\newcommand{\V}{\units{V}} % volts -\newcommand{\mV}{\units{mV}} % millivolts -\newcommand{\uV}{\units{\mu V}} % micro volts -\newcommand{\ohm}{\units{\Omega}} % Ohms -\newcommand{\mohm}{\units{m\Omega}} % milli Ohms -\newcommand{\percent}{\units{\%}} % percent -\newcommand{\Henrys}{\units{H}} % Henrys -\newcommand{\uF}{\units{\mu F}} %micro-Farads -\newcommand{\kB}{\units{kB}} % kilobyte -\newcommand{\MB}{\units{MB}} % megabyte -\newcommand{\GB}{\units{GB}} % gigabyte - -% Derived units -%\newcommand{\unitseparator}{\cdot} -\newcommand{\unitseparator}{\thickspace} - - -\newcommand{\Hpm}{\units{\H\unitseparator\m^{-1}}} % Henrys/metre -\newcommand{\kNpm}{\units{\kN\unitseparator\m^{-1}}} % kilo-Newtons/metre -\newcommand{\Lps}{\units{L\unitseparator\s^{-1}}} % litres/second -\newcommand{\mhom}{\units{\mho\unitseparator\m}} % mho-metres -\newcommand{\mhopm}{\units{\mho\unitseparator\m^{-1}}} % mho/metres -\newcommand{\mps}{\units{\m\unitseparator\s^{-1}}} % metres/second -\newcommand{\msqps}{\units{\m^{2}\unitseparator\s^{-1}}} % metres/second -\newcommand{\mpsps}{\units{\m\unitseparator\s^{-2}}} % metres/(second^2) -\newcommand{\mmps}{\units{\mm\unitseparator\s^{-1}}} % millimetres/second -\newcommand{\mmpms}{\units{\mm\unitseparator\ms^{-1}}} % millimetres/millisecond -\newcommand{\mmtwops}{\units{\mm^{2}\unitseparator\s^{-1}}} % millimetres squared/second -\newcommand{\mtwo}{\units{\m^{2}}} % metres squared -\newcommand{\mmtwo}{\units{\mm^{2}}} % millimetres squared -\newcommand{\mmthree}{\units{\mm^{3}}} % millimetres cubed -\newcommand{\pum}{\units{\um^{-1}}} % per micrometer -\newcommand{\pmm}{\units{\mm^{-1}}} % per millimeter -\newcommand{\pms}{\units{\ms^{-1}}} % per millisecond -\newcommand{\uSpmmpmm}{\units{\uS\unitseparator\mm^{-2}}} % microSiemens per millimeter -\newcommand{\mSpmm}{\units{\mS\unitseparator\mm^{-1}}} % milliSiemens per millimeter -\newcommand{\Spm}{\units{S\unitseparator\m^{-1}}} % Siemens per meter -\newcommand{\Spmm}{\units{S\unitseparator\mm^{-1}}} % Siemens per millimeter -\newcommand{\nApmmpmm}{\units{\nA\unitseparator\mm^{-2}}} % nanoamps per millimeter^2 -\newcommand{\uAmm}{\units{\mu A\unitseparator\mm}} % microamps millimeter -\newcommand{\uApmmpmm}{\units{\uA\unitseparator\mm^{-2}}} % microamps per millimeter^2 -\newcommand{\uApmmpmmpmm}{\units{\uA\unitseparator\mm^{-3}}} % microamps per millimeter^3 -\newcommand{\ohmcm}{\units{\ohm\unitseparator\cm}} % ohm-cm -\newcommand{\uFpmmpmm}{\units{\mu F\unitseparator\mm^{-2}}} %micro-Farads per millimeter squared -\newcommand{\uFpcmpcm}{\units{\mu F\unitseparator\cm^{-2}}} %micro-Farads per centimeter squared -\newcommand{\mmolpL}{\units{\mmol\unitseparator L^{-1}}} %milli-moles per Litre -\newcommand{\mmolpLpms}{\units{\mmol\unitseparator L^{-1}\unitseparator\ms^{-1}}} %milli-moles per Litre per millisecond -\newcommand{\mVpms}{\units{\mV\unitseparator\ms^{-1}}} %microvolts per millisecond -\newcommand{\mgpkg}{\units{\mg\unitseparator\kg^{-1}}} % milligram/kilogram - -% -% Base numbers -% -\newcommand{\naturalnums}{\ensuremath{ % - \mathbb{N} % - }} % Natural numbers -\newcommand{\integernums}{\ensuremath{ % - \mathbb{Z} % - }} % Integer numbers -\newcommand{\realnums}{\ensuremath{ % - \mathbb{R} % - }} % Real numbers -\newcommand{\complexnums}{\ensuremath{ % - \mathbb{C} % - }} % Complex numbers -\newcommand{\quaternionnums}{\ensuremath{ % - \mathbb{H} % - }} % Quaternion numbers -\newcommand{\rationalnums}{\ensuremath{ % - \mathbb{Q} % - }} % Rational numbers -\newcommand{\irrationalnums}{\ensuremath{ % - \mathbb{I} % - }} % Irrational numbers - -% -% Sets -% -\newcommand{\union}[2]{\ensuremath{#1\cup#2}} % Union -\newcommand{\intersection}[2]{\ensuremath{#1\cap#2}} % Intersection - -% -% Topologies -% -\newcommand{\rntopology}[1]{\ensuremath{ % - \ifthenelse{\equal{#1}{}}{ % - \realnums}{ % - \realnums^{#1} % - } % - }} % R^n (real) topology -\newcommand{\sntopology}[1]{\ensuremath{ % - \ifthenelse{\equal{#1}{}}{ % - \mathbb{S}}{ % - \mathbb{S}^{#1} % - } % - }} % S^n (spherical) topology -\newcommand{\dntopology}[1]{\ensuremath{ % - \ifthenelse{\equal{#1}{}}{ % - \mathbb{D}}{ % - \mathbb{D}^{#1} % - } % - }} % D^n (discrete) topology - -% -% Commonly-used Math Symbols and operations -% -\newcommand{\brac}[3]{\ensuremath{\left#1 #2 \right#3}} % bracket -\newcommand{\dotprod}[2]{\ensuremath{#1\cdot#2}} % dot product -\newcommand{\doubledotprod}[2]{\ensuremath{#1:#2}} % double dot product -\newcommand{\crossprod}[2]{\ensuremath{#1\times#2}} % cross product -\newcommand{\pbrac}[1]{\brac{(}{#1}{)}} % parenthesis () bracket -\newcommand{\pbracr}[1]{\brac{(}{#1}{.}} % parenthesis ( bracket -\newcommand{\pbracl}[1]{\brac{.}{#1}{)}} % parenthesis ) bracket -\newcommand{\transpose}[1]{\ensuremath{{#1}^{T}}} % transpose -% -\newcommand{\abs}[1]{\brac{|}{#1}{|}} % absolute value -\newcommand{\bbrac}[1]{\brac{\{}{#1}{\}}} % Braces { bracket -\newcommand{\conjugate}[1]{\ensuremath{ % - \overline{#1} % _ - }} %% complex conjugate e.g. \conjugate{Z} => Z -\newcommand{\const}[1]{\ensuremath{\mathrm{#1}}} % constant -\newcommand{\cont}[1]{\ensuremath{C^{#1}}} % continuity e.g. \cont{1} => C1 -\newcommand{\convolution}[2]{\ensuremath{#1*#2}} % convolution e.g. \convolution{a}{b} => a*b -\newcommand{\curl}[1]{\ensuremath{ % - \crossprod{\nabla}{#1} % - }} % curl e.g. \curl{a} => nabla x a -\newcommand{\degree}{\ensuremath{^{\circ}}\xspace} % degree sign -\newcommand{\del}{\ensuremath{\partial}} % partial derivative sign -\newcommand{\diverg}[1]{\ensuremath{ % - \dotprod{\nabla}{#1} % - }} % divergence e.g. \diverg{a} => nabla . a -\newcommand{\dint}{\ensuremath{\displaystyle\int}} % display integral -\newcommand{\dintl}[2]{\ensuremath{ % - \displaystyle\int\limits_{#1}^{#2} % - }} % display integral with limits -\newcommand{\dotover}[1]{\ensuremath{ % - \stackrel{\scriptscriptstyle \bullet}{#1} % - }} % time derivative -\newcommand{\ddotover}[1]{\ensuremath{ % - \stackrel{\scriptscriptstyle \bullet\bullet}{#1} % - }} % double time derivative -\newcommand{\dprod}{\ensuremath{\displaystyle\prod}} % display product -\newcommand{\dprodl}[2]{\ensuremath{ % - \displaystyle\prod_{#1}^{#2} % - }} % display product with limits -\newcommand{\dsum}{\ensuremath{\displaystyle\sum}} % display summation -\newcommand{\dsuml}[2]{\ensuremath{ % - \displaystyle\sum_{#1}^{#2} % - }} % display summation with limits -\newcommand{\evalat}[2]{\ensuremath{ % - \brac{.}{#1}{|}_{#2} % - }} % Evaluation at e.g. \evalat{x}{1} => x|_1 -\newcommand{\factorial}[1]{\ensuremath{\pbrac{#1}!}} % factorial e.g. \factorial{n} => (n)! -\newcommand{\fnof}[2]{\ensuremath{ % - #1\brac{(}{#2}{)} % - }} % function of e.g. \fnof{x}{\xi} => x(xi) -\newcommand{\fntof}[2]{\ensuremath{ % - \transpose{#1}\brac{(}{#2}{)} % - }} % function transpose of e.g. \fntof{x}{\xi} => x^T(xi) -\newcommand{\gegenbauer}[3]{\ensuremath{ % - \fnof{C_{#1}^{#2}}{#3} % - }} % gegenbauer polynomial e.g. \gengenbauer{1}{2}{x} => C_1^2(x) -\newcommand{\genlimit}[2]{\ensuremath{ % - \operatornamewithlimits{\lim}_{#1\rightarrow#2} - }} % general limit e.g. \genlimit{a}{b} => lim a->b -\newcommand{\gint}[4]{\ensuremath{ % - \dintl{#1}{#2}\,#3\,d#4 % - }} % general integral with two limits. e.g. - % \gint{a}{b}{xxx}{c} => int_a^b xxx dc -\newcommand{\giint}[7]{\ensuremath{ % - \dintl{#1}{#2}\!\dintl{#3}{#4}\,#5\,d#6d#7 % - }} % general double integral with two limits. e.g. - % \gint{a}{b}{c}{d}{xxx}{e}{f} => int_a^b int_c^d xxx dedf -\newcommand{\gprod}[3]{\ensuremath{ % - \dprodl{#1}{#2}\,#3 % - }} % general product e.g. \gprod{a}{b}{c} => prod_a^b c -\newcommand{\gsum}[3]{\ensuremath{ % - \dsuml{#1}{#2}\,#3 % - }} % general sum e.g. \gsum{a}{b}{c} => sum_a^b c -\newcommand{\gssum}[5]{\ensuremath{ % - \dsuml{#1}{#2}\dsuml{#3}{#4}\,#5 % - }} % general double sum e.g. \gsum{a}{b}{c}{d}{e} => sum_a^b sum_c^d e -\newcommand{\goneint}[2]{\ensuremath{ % - \gint{#2}{}{#1}{#2} % - }} % general integral with one limit. eg. \goneint{xxx}{a} => int_a xxx da -\newcommand{\gonesum}[2]{\ensuremath{ % - \gsum{#1}{}{#2} % - }} % general sum with one limit e.g. \gonesum{a}{b} => sum_a b -\newcommand{\grad}{\ensuremath{\nabla}} % gradient -\newcommand{\gradsq}{\ensuremath{\nabla^{2}}} % gradient squared -\newcommand{\gradient}[1]{ % - \ensuremath{\grad #1} % - } % gradient e.g. \gradient{u} => \grad u -\newcommand{\innerprod}[2]{\ensuremath{ % - \left<#1,#2\right> % - }} % inner product e.g. \innerprod{a,b} => -\newcommand{\inteval}[3]{\ensuremath{ % - \displaystyle\sqbrac{#1}_{#2}^{#3} % - }} % display evaluated integral with limits e.g. - % \inteval{xxx}{a}{b} => [xxx]_a^b -\newcommand{\inverse}[1]{\ensuremath{{#1}^{-1}}} % inverse e.g. \inverse{A} => A^-1 -\newcommand{\invtranspose}[1]{\ensuremath{{#1}^{-T}}} % inverse transpose e.g. \invtranspose{A} => A^-T -\newcommand{\circcomposition}[2]{\ensuremath{#1\circ#2}} % composition with - % circ e.g. \circcomposition{A}{B} => A o -\newcommand{\funccomposition}[2]{\ensuremath{\fnof{#1}{#2}} % composition with - % function e.g. \funccomposition{A}{B} => A(B) -\newcommand{\composition}[2]{\circcomposition{#1}{#2}}} % composition -\newcommand{\contrakronecker}[2]{\ensuremath{\delta^{{#1}{#2}}}} % - % contravariant kronecker delta tensor e.g., \contrakronecker{i}{j} => delta^{ij} -\newcommand{\covarkronecker}[2]{\ensuremath{\delta_{{#1}{#2}}}} % - % covariant kronecker delta tensor e.g., \contrakronecker{i}{j} => delta_{ij} -\newcommand{\mixedkronecker}[2]{\ensuremath{\delta_{#1}^{#2}}} % - % mixed kronecker delta tensor e.g., \mixedkronecker{i}{j} => delta_{i}^{j} -\newcommand{\kronecker}[2]{\covarkronecker{#1}{#2}} % kronecker delta - % tensor. Default to covariant. -\newcommand{\laplacian}[1]{\ensuremath{\gradsq {#1}}} % laplacian -\newcommand{\legendre}[3]{\ensuremath{\fnof{P_{#1}^{#2}}{#3}}} % Legendre polynomial -\newcommand{\limit}[3]{\ensuremath{ % - \operatornamewithlimits{\lim}_{#1\rightarrow#2} #3 % - }} % limit e.g. \limit{a}{b}{c} => lim a->b c -\newcommand{\limita}[3]{\ensuremath{ % - \operatornamewithlimits{\lim}_{#1\downarrow#2} #3 % - }} % limit from above e.g. \limita{a}{b}{c} => lim a->b c -\newcommand{\limitb}[3]{\ensuremath{ % - \operatornamewithlimits{\lim}_{#1\uparrow#2} #3 % - }} % limit from below e.g. \limita{a}{b}{c} => lim a->b c -\newcommand{\lnorm}[2]{\ensuremath{ % - {\brac{\|}{#2}{\|}_{#1}} % - }} % l-n norm e.g. \lnorm{x}{3} => ||x||_3 -\newcommand{\mapping}[3]{\ensuremath{#1:#2\rightarrow#3}} % mapping - % e.g. \mapping{a}{b}{c} => a:b->c -\newcommand{\nth}[1]{\ensuremath{{#1}^{\text{th}}}} % ^th e.g. \nth{n} => n^th -\newcommand{\orderof}[1]{\ensuremath{\fnof{\mathrm{O}}{#1}}} % order e.g. O(n) -\newcommand{\pochhammer}[2]{\ensuremath{ % - \pbrac{#1}_{#2} % -}} % Pochhammer polynomial e.g. \pochhammer{a}{n} => (a)_n n.b. (a)_n = -% (a,n) where (a,n) is Appell's symbol. -\newcommand{\sphericalharmonic}[4]{\ensuremath{% - \fnof{Y_{{#1}{#2}}^{#3}}{#4} % -}} % Spherical harmonic e.g. \sphericalharmonic{a}{b}{c}{d} => Y_ab^c(d) -\newcommand{\set}[1]{\ensuremath{ - \bbrac{#1} -}} % e.g. \set{1,2,3} => {1,2,3} -\newcommand{\sqbrac}[1]{\brac{[}{#1}{]}} % square [ bracket -\newcommand{\symover}[2]{\ensuremath{ - \stackrel{\scriptscriptstyle #1}{#2} % -}} % over -\newcommand{\tento}[1]{\ensuremath{ % - 10^{#1} % -}} % e.g. \tento{3} ten to the power of 3 -\newcommand{\ttento}[1]{\ensuremath{ % - \times \tento{#1} % - }\xspace} % e.g. \ttento{5} => times ten the power of 5 -\newcommand{\nttento}[2]{\ensuremath{ % - #1\ttento{#2} % - }} % number times ten to power e.g. \nttento{2}{3} => 2 x 10^3 -% -% Fractions -% -%\newcommand{\dfrac}[2]{\ensuremath{ % -% \dfrac{\displaystyle #1}{\displaystyle #2} % -% }} % display fraction -\newcommand{\dby}[2]{\ensuremath{ % - \dfrac{ d #1}{d #2} % - }} % e.g. \dby{u}{v} => d u / d v -\newcommand{\Dby}[2]{\ensuremath{ % - \dfrac{ D #1}{D #2} % - }} % e.g. \Dby{u}{v} => D u / D v i.e. the full derivative -\newcommand{\dtwoby}[3]{\ensuremath{ % - \dfrac{ d^{2} #1}{d #2 d #3} % - }} % e.g. \dtwoby{u}{x}{y} => d^2 u / d x d y -\newcommand{\dtwosqby}[2]{\ensuremath{ % - \dfrac{ d^{2} #1}{d {#2}^{2}} % - }} % e.g. \dtwosqby{u}{x} => d^2 u / d x^2 -\newcommand{\dthreeby}[4]{\ensuremath{ % - \dfrac{ d^{3} #1}{d #2 d #3 d #4} % - }} % e.g. \dthreeby{u}{x}{y}{z} => d^2 u / d x d y d z -\newcommand{\dnby}[3]{\ensuremath{ % - \dfrac{ d^{#1} #2}{d {#3}^{#1}} % - }} % e.g. \dnby{3}{u}{v} => d^3 u / d v^3 -\newcommand{\dntwoby}[6]{\ensuremath{ % - \dfrac{ d^{#1} #2}{d {#3}^{#4} d {#5}^{#6}} % - }} % e.g. \dntwoby{3}{u}{x}{1}{y}{2} => d^3 u / d x d y^2 -\newcommand{\delby}[2]{\ensuremath{ % - \dfrac{\del #1}{\del #2} % - }} % e.g. \delby{u}{v} => del u / del v -\newcommand{\deltwoby}[3]{\ensuremath{ % - \dfrac{\del^{2} #1}{\del #2 \del #3} % - }} % e.g. \delnby{u}{x}{y} => del^2 u / del x del y -\newcommand{\deltwosqby}[2]{\ensuremath{ % - \dfrac{\del^{2} #1}{\del {#2}^{2}} % - }} % e.g. \delnby{u}{x} => del^2 u / del x^2 -\newcommand{\delthreeby}[4]{\ensuremath{ % - \dfrac{ \del^{3} #1}{\del #2 \del #3 \del #4} % - }} % e.g. \delthreeby{u}{x}{y}{z} => del^3 u / del x del y del z -\newcommand{\delthreecuby}[2]{\ensuremath{ % - \dfrac{ \del^{3} #1}{\del #2^{3}} % - }} % e.g. \delthreecuby{u}{x} => del^3 u / del x^3 -\newcommand{\deldeltwoby}[3]{\ensuremath{ % - \dfrac{ \del^{3} #1}{\del #2 \del #3^{2}} % - }} % e.g. \deldeltwoby{u}{x}{y} => del^3 u / del x del y^2 -\newcommand{\deltwodelby}[3]{\ensuremath{ % - \dfrac{ \del^{3} #1}{\del #2^{2} \del #3} % - }} % e.g. \deltwodelby{u}{x}{y} => del^3 u / del x^2 del y -\newcommand{\delnby}[3]{\ensuremath{ % - \dfrac{\del #1}{\del #2} % - }} % e.g. \delnby{3}{u}{v} => del^3 u / del v^3 -\newcommand{\delntwoby}[6]{\ensuremath{ % - \dfrac{ \del^{#1} #2}{\del {#3}^{#4} \del {#5}^{#6}} % - }} % e.g. \delntwoby{3}{u}{x}{1}{y}{2} => del^3 u / del x del y^2 -\newcommand{\hdby}[2]{ % - \dby{}{#2}\pbrac{#1} % - } % horizontal dby e.g. \hdby{u}{x} => d/dx (u) -\newcommand{\hdtwoby}[3]{ % - \dtwoby{}{#2}{#3}\pbrac{#1} % - } % horizontal dtwoby e.g. \hdtwoby{u}{x}{y} => d/dxdy (u) -\newcommand{\hdtwosqby}[2]{ % - \dtwosqby{}{#2}\pbrac{#1} % - } % horizontal dtwosqby e.g. \hdtwosqby{u}{x} => d^2/dx^2 (u) -\newcommand{\hdthreesqby}[4]{ % - \dthreeby{}{#2}{#3}{#4}\pbrac{#1} % - } % horizontal dthreeby e.g. \hdthreeby{u}{x}{y}{z} => d^3/dxdydz (u) -\newcommand{\hdnby}[3]{ % - \dnby{#1}{}{#3}\pbrac{#2} % - } % horizontal dnby e.g. \hdnby{3}{u}{x} => d^3/dx^3 (u) -\newcommand{\hdntwoby}[6]{ % - \dntwoby{#1}{}{#3}{#4}{#5}{#6}\pbrac{#2} % - } % horizontal dntwoby e.g. \hdntwoby{3}{u}{x}{1}{y}{2} => d^3/dx^1dy^2 (u) -\newcommand{\hdelby}[2]{ % - \delby{}{#2}\pbrac{#1} % - } % horizontal delby e.g. \hdelby{u}{x} => del/del x (u) -\newcommand{\hdeltwoby}[3]{ % - \deltwoby{}{#2}{#3}\pbrac{#1} % - } % horizontal deltwoby e.g. \hdeltwoby{u}{x}{y} => del/del x del y (u) -\newcommand{\hdeltwosqby}[2]{ % - \deltwosqby{}{#2}\pbrac{#1} % - } % horizontal deltwosqby e.g. \hdeltwosqby{u}{x} => del^2/del x^2 (u) -\newcommand{\hdelthreesqby}[4]{ % - \delthreeby{}{#2}{#3}{#4}\pbrac{#1} % - } % horizontal delthreeby e.g. \hdelthreeby{u}{x}{y}{z} => - % del^3/del x del y del z (u) -\newcommand{\hdelnby}[3]{ % - \delnby{#1}{}{#3}\pbrac{#2} % - } % horizontal delnby e.g. \hdelnby{3}{u}{x} => del^3/del x^3 (u) -\newcommand{\hdelntwoby}[6]{ % - \delntwoby{#1}{}{#3}{#4}{#5}{#6}\pbrac{#2} % - } % horizontal delntwoby e.g. \hdelntwoby{3}{u}{x}{1}{y}{2} => - % del^3/del x^1 del y^2 (u) -% -% Differential Geometry -% - -\newcommand{\manifold}[1]{\ensuremath{ % - \mathfrak{#1} % - }} % manifold symbol -\newcommand{\boundary}[1]{\ensuremath{ % - \del{#1} % - }} % boundary symbol -\newcommand{\embedmanifold}[1]{\ensuremath{ % - \mathcal{#1} % - }} % embedded manifold symbol -\newcommand{\coordspacesymbol}{\ensuremath{ % - \mathcal{C} % - }} % Coordinate space symbol => C -\newcommand{\tangentspacesymbol}{\ensuremath{ % - \mathcal{T} % - }} % Tangent space symbol => T -\newcommand{\cotangentspacesymbol}{\ensuremath{ % - \tangentspacesymbol^{*} % - }} % Cotangent space symbol => T^* -\newcommand{\coordspace}[2]{\ensuremath{ % - \coordspacesymbol_{#2} \manifold{#1} % - }} % Coordinate space e.g., \coordspace{M}{p} => C_p M -\newcommand{\tangentspace}[2]{\ensuremath{ % - \tangentspacesymbol_{#2} \manifold{#1} % - }} % Tangent space e.g., \tangentspace{M}{p} => T_p M -\newcommand{\cotangentspace}[2]{\ensuremath{ % - \cotangentspacesymbol_{#2} \manifold{#1} % - }} % Cotangent space e.g., \cotangentspace{M}{p} => T_p^* M -\newcommand{\coordbundle}[1]{\ensuremath{ % - \coordspacesymbol \manifold{#1} % - }} % Coordinate bundle e.g., \coordbundle{M} => CM -\newcommand{\tangentbundle}[1]{\ensuremath{ % - \tangentspacesymbol \manifold{#1} % - }} % Tangent bundle e.g., \tangentbundle{M} => TM -\newcommand{\cotangentbundle}[1]{\ensuremath{ % - \cotangentspacesymbol \manifold{#1} % - }} % Cotangent bundle e.g., \cotangentbundle{M} => T^*M - -\newcommand{\christoffel}[3]{\christoffelsecond{#1}{#2}{#3}} % Christoffel symbol - % (defaults to Christoffel symbol of the - % second kind) -\newcommand{\christoffelfirst}[3]{\ensuremath{ % - \Gamma_{#1#2#3} - }} % Christoffel symbol of the first kind e.g. \christoffelfirst{i}{j}{k} => Gamma_{ijk} -\newcommand{\christoffelsecond}[3]{\ensuremath{ % - \Gamma^{#1}_{#2#3} - }} % Christoffel symbol of the second kind e.g. \christoffelsecond{i}{j}{k} => Gamma^{i}_{jk} -\newcommand{\partialderiv}[2]{\ensuremath{ - {#1}_{,#2} - }} % partial derivative. e.g., \partialderiv{i}{j} => i_{,j} -\newcommand{\covarpartialderiv}[2]{\ensuremath{ % - {#1}_{,#2} - }} % covariant partial derivative e.g. \convarpartialderiv{i}{j} => i_{,j} -\newcommand{\contrapartialderiv}[2]{\ensuremath{ % - {#1}^{,#2} - }} % contravariant partial derivative e.g. \contrapartialderiv{i}{j} => i^{,j} -\newcommand{\covarderiv}[2]{\ensuremath{ % - {#1}_{;#2} - }} % covariant derivative e.g. \covarderiv{i}{j} => i_{;j} -\newcommand{\mixedderiv}[3]{\ensuremath{ % - \brac{.}{#1}{|}^{#2}_{#3} - }} % mixed derivative e.g. \mixedderiv{i}{j}{k} => i | ^{j}_{k} -\newcommand{\exteriorderiv}[2]{\ensuremath{ % - \boldsymbol{d}#1 - }} % Exterior derivative e.g., \exteriorderiv{a} => da -% cpb 19/9/96 Changing from \mathbf to \boldsymbol to allow bold greek tensors -%\newcommand{\tensor}[1]{\ensuremath{\mathbf{#1}}} % tensor -\newcommand{\tensor}[1]{\ensuremath{\boldsymbol{#1}}} % tensor -\newcommand{\covartensor}[3]{\ensuremath{{#1}_{#2#3}}} % covariant tensor -\newcommand{\contratensor}[3]{\ensuremath{{#1}^{#2#3}}} % contravariant tensor -\newcommand{\mixedtensor}[3]{\ensuremath{{#1}_{#2}^{#3}}} % mixed tensor -\newcommand{\vectr}[1]{\ensuremath{\boldsymbol{#1}}} % vector -\newcommand{\covectr}[1]{\ensuremath{\boldsymbol{#1}}} % covector -\newcommand{\tensorproduct}[2]{\ensuremath{ % - #1 \otimes #2 % - }} % tensor product e.g., \tensorproduct{a}{b} => a x b. -\newcommand{\wedgeproduct}[2]{\ensuremath{ % - #1 \wedge #2 % - }} % wedge product e.g., \wedgeproduct{a}{b} => a^b. -\newcommand{\exteriorproduct}[2]{\ensuremath{ % - \wedgeproduct{#1}{#2} % - }} % exterior product e.g., \exteriorproduct{a}{b} => a^b. - -% -% Matrices and vectors -% -% cpb 19/9/96 Changing from \mathbf to \boldsymbol to allow bold greek matrices -%\newcommand{\matr}[1]{\ensuremath{\uppercase{\mathbf{#1}}}} % matrix -\newcommand{\matr}[1]{\ensuremath{\uppercase{\boldsymbol{#1}}}} % matrix -% cpb 19/9/96 Changing from \mathbf to \boldsymbol to allow bold greek vectors -\newcommand{\vect}[1]{\ensuremath{\lowercase{\boldsymbol{#1}}}} % vector -\newcommand{\norm}[1]{\lnorm{2}{#1}} % normalise i.e. l-2 norm -\newcommand{\normal}{\vectr{n}} % normal - -% -% Basis functions and interpolation -% -\newcommand{\nodept}[2]{\ensuremath{ % - {#1}^{#2} % - }} % Nodal point (without derivative) e.g., \nodept{\psi}{n}=> nodal dof of \psi at node n. -\newcommand{\nodedof}[3]{\ensuremath{ % - \nodept{#1}{#2}_{,#3} % -}} % Nodal DOF e.g., \nodedof{\psi}{n}{u} => nodal dof of \psi at node n - % derivative u. -\newcommand{\idxnodedof}[4]{\ensuremath{ % - \nodept{#1}{#3}_{#2,#4} % -}} % Indexed nodal DOF e.g., \nodedof{\psi}{i}{n}{u} => nodal dof of ith - % component of \psi at node n derivative u. -\newcommand{\elementdof}[2]{\ensuremath{ % - #1_{#2} % -}} % Element DOF e.g., \elementdof{\psi}{e} => element dof of \psi at element e -\newcommand{\chbfnsymb}[2]{\ensuremath{ % - \Psi_{#1}^{#2} % - }} % Cubic Hermite basis function symbol -\newcommand{\chbfn}[3]{\ensuremath{ % - \fnof{\chbfnsymb{#1}{#2}}{#3} % - }} % \chbfn{n}{u}{xi} => cubic Hermite basis function at node n deriv u - % evaluated at xi -\newcommand{\hsonebfnsymb}[1]{\ensuremath{ % - \zeta_{#1} % - }} % Hermite sector 1 basis function symbol -\newcommand{\hsonebfn}[2]{\ensuremath{ % - \fnof{\hsonebfnsymb{#1}}{#2} % - }} % \hsonebfn{n}{xi} => Hermite sector 1 basis function at node n - % evaluated at xi -\newcommand{\hsthreebfnsymb}[1]{\ensuremath{ % - \eta_{#1} % - }} % Hermite sector 3 basis function symbol -\newcommand{\hsthreebfn}[2]{\ensuremath{ % - \fnof{\hsthreebfnsymb{#1}}{#2} % - }} % \hsonebfn{n}{xi} => Hermite sector 3 basis function at node n - % evaluated at xi -\newcommand{\lbfnsymb}[1]{\ensuremath{ % - \varphi_{#1} % - }} % Lagrange basis function symbol -\newcommand{\lbfn}[2]{\ensuremath{ % - \fnof{\lbfnsymb{#1}}{#2} % - }} % \lbfn{n}{xi} => Lagrange basis function at node n evaluated at xi -\newcommand{\sbfnsymb}[1]{\ensuremath{ % - N_{#1} % - }} % Simplex basis function symbol -\newcommand{\sbfn}[2]{\ensuremath{ % - \fnof{\sbfnsymb{#1}}{#2} % - }} % \sbfn{n}{xi} => Simplex basis function at node n evaluated at xi -\newcommand{\gbfnsymb}[2]{\ensuremath{ % - \psi_{#1}^{#2} % - }} % Generic basis function symbol -\newcommand{\idxgbfnsymb}[3]{\ensuremath{ % - \psi_{#1#2}^{#3} % - }} % Indexed generic basis function symbol -\newcommand{\gbfn}[3]{\ensuremath{ % - \fnof{\gbfnsymb{#1}{#2}}{#3} % - }} % \gbfn{n}{i}{xi} => Generic bais function at n,i evaluated at xi -\newcommand{\idxgbfn}[4]{\ensuremath{ % - \fnof{\idxgbfnsymb{#1}{#2}{#3}}{#4} % - }} % \gbfn{j}{n}{i}{xi} => Indexed j'th generic bais function at n,i evaluated at xi -\newcommand{\esfsymb}{\ensuremath{ % - S % - }} % Element scale factor symbol -\newcommand{\esfone}[1]{\ensuremath{ % - \fnof{\esfsymb}{{#1}} % - }} % \esfone{e} => Element scale factor in one direction in element e -\newcommand{\esftwo}[2]{\ensuremath{ % - \fnof{\esfsymb}{#1,#2} % - }} % \esftwo{e}{i} => Element scale factor in two directions in element e - % and xi direction i -\newcommand{\gsfsymb}{\ensuremath{ % - \mathrm{S} % - }} % Generic scale factor symbol -\newcommand{\gsf}[2]{\ensuremath{ % - \fnof{\gsfsymb}{#1,#2} % - }} % \gsf{n}{i} => Generic scale factor in at position n,i -\newcommand{\idxgsf}[3]{\ensuremath{ % - \fnof{\gsfsymb}{#1,#2,#3} % - }} % \gsf{j}{n}{i} => Generic scale factor in at position n,i for the j'th - % component idx -\newcommand{\nsfsymb}{\ensuremath{ % - \mathcal{S} % - }} % Nodal scale factor symbol -\newcommand{\nsfone}[1]{\ensuremath{ % - \fnof{\nsfsymb}{#1} % - }} % \nsfone{n} => Nodal scale factor in one direction at node n -\newcommand{\nsftwo}[2]{\ensuremath{ % - \fnof{\nsfsymb}{#1,#2} % - }} % \nsftwo{n}{i} => Nodal scale factor in two directions at node n and xi - % direction i -\newcommand{\xione}{\ensuremath{\xi_{1}}\xspace} % xi 1 -\newcommand{\xitwo}{\ensuremath{\xi_{2}}\xspace} % xi 2 -\newcommand{\xithree}{\ensuremath{\xi_{3}}\xspace} % xi 3 - - -%%% Local Variables: -%%% mode: latex -%%% TeX-master: t -%%% End: diff --git a/doc/latex/references.tex b/doc/latex/references.tex deleted file mode 100755 index 6f6e7561..00000000 --- a/doc/latex/references.tex +++ /dev/null @@ -1,12 +0,0 @@ -\clearemptydoublepage -\addcontentsline{toc}{chapter}{\numberline{}References} - -\renewcommand{\bibname}{References} - -\bibliographystyle{agsm} -\bibliography{/data/OpenCMISS/src/iron/doc/references/references} - -%%% Local Variables: -%%% mode: latex -%%% TeX-master: -%%% End: diff --git a/doc/latex/shell.tex b/doc/latex/shell.tex deleted file mode 100755 index 57c7019a..00000000 --- a/doc/latex/shell.tex +++ /dev/null @@ -1,21 +0,0 @@ -\documentclass[12pt,dvips]{article} - -\input{/data/OpenCMISS/src/iron/doc/latex/macros} %define new commands etc. -\input{/data/OpenCMISS/src/iron/doc/latex/defns} %define pagesetup and std. packages etc. - -\usepackage{times} %use the times font - -\title{} -\author{} - -\begin{document} - -\maketitle - -\begin{abstract} - -\end{abstract} - -\section{Introduction} - -\end{document} diff --git a/doc/latex/shell_article.tex b/doc/latex/shell_article.tex deleted file mode 100755 index f257eff4..00000000 --- a/doc/latex/shell_article.tex +++ /dev/null @@ -1,23 +0,0 @@ -%\documentclass[12pt,dvips]{article} - -\input{/data/OpenCMISS/src/iron/doc/latex/macros} %define new commands etc. -\input{/data/OpenCMISS/src/iron/doc/latex/defns} %define pagesetup and std. packages etc. - -\usepackage{times} %use the times font - -\title{} -\author{} -\date{} - -\begin{document} - -\maketitle - -\begin{abstract} -\end{abstract} - -\section{Introduction} -\section{Findings} -\section{Conclusions} - -\end{document} diff --git a/doc/latex/shell_book.tex b/doc/latex/shell_book.tex deleted file mode 100755 index dc860b59..00000000 --- a/doc/latex/shell_book.tex +++ /dev/null @@ -1,29 +0,0 @@ -\documentclass[12pt,twoside,a4paper]{book} - -\input{/data/OpenCMISS/src/iron/doc/latex/macros} %define new commands etc. -\input{/data/OpenCMISS/src/iron/doc/latex/defns} %define pagesetup and std. packages etc. - -\usepackage{times} %use the times font -\makeindex - -\title{} -\author{} -\date{} - -\begin{document} - -\maketitle -\tableofcontents -\listoffigures -\listoftables - -\include{chapter1/intro} %input from chapter1/intro.tex -\clearemptydoublepage -\include{chapter2/theory} %input from chapter2/theory.tex -\clearemptydoublepage -\include{chapter3/results} %input from chapter3/results.tex -\clearemptydoublepage -\include{references} -\clearemptydoublepage -\printindex -\end{document} diff --git a/doc/latex/shell_letter.tex b/doc/latex/shell_letter.tex deleted file mode 100755 index 1b2a381f..00000000 --- a/doc/latex/shell_letter.tex +++ /dev/null @@ -1,30 +0,0 @@ -\documentclass[12pt,dvips]{letter} - -\input{/data/OpenCMISS/src/iron/doc/latex/macros} %define new commands etc. -\input{/data/OpenCMISS/src/iron/doc/latex/defns} %define pagesetup and std. packages etc. -\usepackage{times} %use the times font - -\begin{document} - - \address - { - Name \\ - email @auckand.ac.nz - Auckland Bioengineering Institute \\ - The University of Auckland \\ - } - \begin{letter} - { - To whom your writing to \\ - Their address\\ - } - - \opening{Dear Bob} - - Main body of text - - \signature{Your name again} - \closing {Yours sincerely \etc} - \end{letter} - -\end{document} diff --git a/doc/latex/shell_report.tex b/doc/latex/shell_report.tex deleted file mode 100755 index 49cf0571..00000000 --- a/doc/latex/shell_report.tex +++ /dev/null @@ -1,34 +0,0 @@ -\documentclass[12pt,dvips]{report} - -\input{/data/OpenCMISS/src/iron/doc/latex/macros} %define new commands etc. -\input{/data/OpenCMISS/src/iron/doc/latex/defns} %define pagesetup and std. packages etc. - -\usepackage{times} %use the times font - -\title{} -\author{} -\date{} - -\begin{document} - -\maketitle -\tableofcontents - -\chapter{The first chapter} -\section{} -\subsection{} - -\chapter{Other chapter} - -\appendix -\chapter{Some proofs} - -%the reference section - -\addcontentsline{toc}{chapter}{\numberline{}References} -\bibliographystyel{agsm} -\bibliography{/data/OpenCMISS/src/iron/doc/references/references} -\printindex -\end{document} - - diff --git a/doc/notes/EquationSets/ElasticityClass/FiniteElasticity.tex b/doc/notes/EquationSets/ElasticityClass/FiniteElasticity.tex deleted file mode 100755 index dbbe619d..00000000 --- a/doc/notes/EquationSets/ElasticityClass/FiniteElasticity.tex +++ /dev/null @@ -1,878 +0,0 @@ - -\subsection{Finite Elasticity} -\label{subsec:FiniteElasticity} - -%Deformation can be viewed three ways: A point to point transformation; A -%coordinate transformation; or as a transformation of metrics (convected coordinates). - -\subsubsection{Kinematics} - -As shown in \figref{fig:configurationsetting}, consider a \textit{material - body} which is a three-dimensional smooth manifold with a boundary, $\manifold{B}$, -which consists of a set of points which are refered to as \textit{material - points}. Consider also an ambient space manifold, -$\manifold{S}\in\rntopology{n}$. The material body is only accessible to -the observer when it moves through the ambient space. This motion is a -time-dependent embedding on the material body into the ambient space. The -embedding is known as a \textit{placement of the body}. It is given by the -mapping -\begin{equation} - \mapping{\fnof{\kappa}{\mathcal{X},t}}{\manifold{B}}{\manifold{S}} -\end{equation} - -The embedded submanifold occupying a location in the ambient space is is -called a \textit{configuration} of $\manifold{B}$ and is given by -\begin{equation} - \embedmanifold{B}_{t}=\fnof{\kappa_{t}}{\manifold{B}}=\fnof{\kappa}{\manifold{B},t} -\end{equation} - -The customary (but not necessary) \textit{reference placement} is given by -\begin{equation} - \mapping{\kappa_{0}}{\manifold{B}}{\manifold{S}} -\end{equation} -and the region of space occupied by the reference placement \ie the -\textit{reference configuration} is given by -\begin{equation} - \embedmanifold{B}_{0}=\fnof{\kappa_{0}}{\manifold{B}} -\end{equation} -Points in $\embedmanifold{B}_{0}$ are denoted by capital letters \ie $X, Y, -\ldots$. Points in $\embedmanifold{B}$ are denoted by lower case leters \ie -$x, y, \dots$. - -\epstexfigure{svgs/EquationSets/Elasticity/FiniteElasticity/setup.eps_tex}{}{}{fig:configurationsetting}{0.75} - -A new configuration of $\manifold{B}$ is given by the deformation mapping -\begin{equation} - \mapping{\chi}{\embedmanifold{B}}{\rntopology{3}} -\end{equation} -where a configuration represents a deformed state of the body. As the body -moves we obtain a family of configurations. If we hold $X\in\embedmanifold{B}$ -fixed can write $\fnof{V_{t}}{X}=\fnof{V}{X,t}$. We then have -\begin{equation} - \fnof{V_{t}}{X}=\fnof{V}{X,t}=\delby{\fnof{\chi}{X,t}}{t}=\dby{\fnof{\chi_{X}}{t}}{t} -\end{equation} - -Here $V_{t}$ is called the \textit{material velocity} of the motion. The -\textit{material acceleration} of the body is defined as -\begin{equation} - \fnof{A_{t}}{X}=\fnof{A}{X,t}=\delby{\fnof{V}{X,t}}{t}=\dby{\fnof{V_{X}}{t}}{t} -\end{equation} - -The \textit{spatial velocity} of the motion is defined by $v_{t}$ and the -\textit{spatial acceleration} of the motion is defined by $a_{t}$. - -\subsubsection{Deformation Gradient} - -Let -$\mapping{\chi}{\embedmanifold{B}_{0}}{\fnof{\chi}{\embedmanifold{B}_{0}}\subset\manifold{S}}$ -be a deformation configuration of $\embedmanifold{B}$ in $\manifold{S}$. The -tangent of the mapping \ie $\tangentbundle{\chi}$ is denoted as $\tensor{F}$ -and is called the \textit{deformation gradient} of $\chi$ \ie -$\tensor{F}=\tangentbundle{\chi}$. For $X\in\embedmanifold{B}$ we have -\begin{equation} - \tensor{F}_{X}=\mapping{\fnof{\tensor{F}}{X}}{\tangentspace{\embedmanifold{B}}{X}}{\tangentspace{\manifold{S}}{\fnof{\chi}{X}}} -\end{equation} - -If $X^{A}$ and $x^{a}$ are the coordinates on $\embedmanifold{B}$ and -$\manifold{S}$ then the deformation gradient tensor with respect to the -coordinate bases are -\begin{equation} - \fnof{F^{a}_{A}}{X}=\delby{\fnof{\chi^{a}}{X}}{X^{A}} -\end{equation} - -Note that $\tensor{F}$ is a two-point tensor. - -The \textit{right Cauchy-Green (or Green) deformation tensor}, $\tensor{C}$, is defined by -\begin{equation} - \mapping{\fnof{\tensor{C}}{X}}{\tangentspace{\embedmanifold{B}}{X}}{\tangentspace{\embedmanifold{B}}{X}} -\end{equation} -as the pullback of the spatial metric tensor \ie $\fnof{\tensor{C}}{X}=\transpose{\fnof{\tensor{F}}{X}}\fnof{\tensor{g}}{x}\fnof{\tensor{F}}{X}$ -or $\tensor{C}=\transpose{\tensor{F}}\tensor{g}\tensor{F}$ where $x=\fnof{\chi}{X}$. In terms of coordinates we -have -\begin{equation} - C_{AB}=g_{ab}F^{a}_{A}F^{b}_{B} -\end{equation} - -If $\tensor{C}$ is invertible we also have $\tensor{B}=\inverse{\tensor{C}}$ -called the \textit{Piola deformation tensor}. - -The \textit{left Cauchy-Green (or Finger) deformation tensor}, $\tensor{b}$, is defined by -\begin{equation} - \mapping{\fnof{\tensor{b}}{x}}{\tangentspace{\fnof{\chi}{\embedmanifold{B}}}{x}}{\tangentspace{\fnof{\chi}{\embedmanifold{B}}}{x}} -\end{equation} -as the push forward of the material metric tensor \ie $\fnof{\tensor{b}}{x}=\fnof{\tensor{F}}{X}\fnof{\tensor{G}}{X}\transpose{\fnof{\tensor{F}}{X}}$ -or $\tensor{b}=\tensor{F}\tensor{G}\transpose{\tensor{F}}$ where $X=\fnof{\inverse{\chi}}{x}$. In terms of coordinates we -have -\begin{equation} - b^{ab}=G^{AB}F^{a}_{A}F^{b}_{B} -\end{equation} - -We also have $\tensor{c}=\inverse{\tensor{b}}$. - -The polar decomposition - -\begin{diagram} - & & \tangentspace{B}{X} & & \\ - & \ruTo^{\tensor{U}} & & \rdTo^{\tensor{R}} \\ -\tangentspace{B}{X} & & \rTo^{\tensor{F}} & & \tangentspace{S}{x}\\ - & \rdTo_{\tensor{R}} & & \ruTo_{\tensor{V}} \\ - & & \tangentspace{S}{x} & & -\end{diagram} - - -If we let the deformed coordinates be given by the position vector, -$\fnof{\vectr{z}}{\vectr{x},t}$ then the deformation gradient tensor with -respect to the undeformed $\vectr{X}$ coordinates is given by -\begin{equation} - \fnof{\tensor{F}}{\vectr{X}}=\delby{\vectr{z}}{\vectr{X}} -\end{equation} -or, in component form, -\begin{equation} - F^{i}_{M}=\delby{z^{i}}{X^{M}}=\delby{z^{i}}{\xi^{k}}\delby{\xi^{k}}{X^{M}} -\end{equation} - -In order to deal with anisotropy we wish to base our stress and strain -calculation on fibre, $\vectr{\nu}$, coordinates. To change our reference -coordinate system from $\vectr{X}$ to $\vectr{\nu}$ we need to transform -$\fnof{\tensor{F}}{\vectr{X}}$. As $\fnof{\tensor{F}}{\vectr{X}}$ is a two point tensor the transformation -rule for transforming just the reference coordinates is given by -\begin{equation} -\fnof{\tensor{F}}{\vectr{\nu}}=\tensor{Q}\fnof{\tensor{F}}{\vectr{X}} -\end{equation} -where $\tensor{Q}$ is the rotation matrix from $\vectr{X}$ to $\vectr{\nu}$ \ie -\begin{equation} - F^{i}_{A}=\delby{X^{M}}{\nu^{A}}F^{i}_{M}=\delby{X^{M}}{\nu^{A}}\delby{z^{i}}{\xi^{k}}\delby{\xi^{k}}{X^{M}} -\end{equation} - -To allow for growth we use a multiplicative decomposition approach \ie -\begin{equation} - \fnof{\tensor{F}}{\vectr{\nu}}=\fnof{\tensor{F}_{e}}{\vectr{\nu}}\fnof{\tensor{F}_{g}}{\vectr{\nu}} -\end{equation} -where $\fnof{\tensor{F}_{g}}{\vectr{\nu}}$ is the growth tensor with -respect to fibre coordinates and $\fnof{\tensor{F}_{e}}{\vectr{\nu}}$ is the -elastic component of the deformation gradient tensor in fibre coordinates. - -The elastic component of the deformation gradient tensor can be calculated -from -\begin{equation} - \fnof{\tensor{F}_{e}}{\vectr{\nu}}=\fnof{\tensor{F}}{\vectr{\nu}}\fnof{\inverse{\tensor{F}_{g}}}{\vectr{\nu}} -\end{equation} - -In component form we have -\begin{equation} - F^{i}_{A}=\pbrac{F_{e}}^{i}_{B}\pbrac{F_{g}}^{B}_{A} -\end{equation} -and -\begin{equation} - \pbrac{F_{e}}^{i}_{B}=F^{i}_{A}\pbrac{\inverse{F_{g}}}^{A}_{B} -\end{equation} - -The Jacobian of the growth component of the deformation is given by -$J_{g}=\det{\fnof{\tensor{F}_{g}}{\vectr{\nu}}}$ and the Jacobian of the -elastic component of the deformation is given by -$J_{e}=\det{\fnof{\tensor{F}_{e}}{\vectr{\nu}}}$. - -The right Cauchy Green deformation tensor in fibre coordinates is now given by -the pullback of the current configuration metric tensor, $\tensor{g}$, -\begin{equation} - \fnof{\tensor{C}}{\vectr{\nu}}=\fnof{\transpose{\tensor{F}_{e}}}{\vectr{\nu}}\tensor{g}\fnof{\tensor{F}_{e}}{\vectr{\nu}} -\end{equation} -and the Lagrange strain tensor is given by the difference in metric tensors -\begin{equation} - \fnof{\tensor{E}}{\vectr{\nu}}=\frac{1}{2}\pbrac{\fnof{\tensor{C}}{\vectr{\nu}}-\tensor{G}} -\end{equation} - -In component form we have -\begin{equation} - C_{AB}=g_{ij}\pbrac{F_{e}}^{i}_{A}\pbrac{F_{e}}^{j}_{B} -\end{equation} -and -\begin{equation} - E_{AB}=\frac{1}{2}\pbrac{C_{AB}-G_{AB}} -\end{equation} - -The constituative law can then be used to derive the second Piola Kirchhoff -stress tensor in fibre coordinates, $\fnof{\tensor{T}}{\vectr{\nu}}$, from -either the right Cauchy-Green deformation tensor or the Green-Lagrange strain -tensor \ie -\begin{equation} - \fnof{\tensor{T}}{\vectr{\nu}}=2\delby{\fnof{W}{\fnof{\tensor{C}}{\vectr{\nu}}}}{\fnof{\tensor{C}}{\vectr{\nu}}} -\end{equation} -or -\begin{equation} - \fnof{\tensor{T}}{\vectr{\nu}}=\delby{\fnof{W}{\fnof{\tensor{E}}{\vectr{\nu}}}}{\fnof{\tensor{E}}{\vectr{\nu}}} -\end{equation} -where $\fnof{W}{\fnof{\tensor{C}}{\vectr{\nu}}}$ or -$\fnof{W}{\fnof{\tensor{E}}{\vectr{\nu}}}$ is the strain energy -function. In component form we have -\begin{equation} - T^{AB}=2\delby{W}{C_{AB}} -\end{equation} -or -\begin{equation} - T^{AB}=\delby{W}{E_{AB}} -\end{equation} - -Because $\tensor{C}$ is symmetric then we can deal with the invariants. The -three invariants are -\begin{equation} - \begin{split} - I_{1} &= \operatorname{tr}\tensor{C} \\ - &= C_{11} + C_{22} + C_{33} \\ - I_{2} &= - \dfrac{1}{2}\pbrac{\pbrac{\operatorname{tr}\tensor{C}}^{2}-\operatorname{tr}\tensor{C}^{2}} \\ - &= - \dfrac{1}{2}\left(\pbrac{C_{11}+C_{22}+C_{33}}^{2}\right. \\ - & \quad\left.-\pbrac{C_{11}^{2}+C_{12}C_{21}+C_{13}C_{31}+ - C_{21}C_{12}+C_{22}^{2}+C_{23}C_{32}+C_{31}C_{13}+C_{32}C_{23}+C_{33}^{2}}\right) \\ - I_{3} &= \det{\tensor{C}} \\ - &=C_{11}C_{22}C_{33}+C_{12}C_{23}C_{31}+C_{13}C_{21}C_{32}\\ - &\quad-C_{13}C_{22}C_{31}-C_{12}C_{21}C_{33}-C_{11}C_{23}C_{32} - \end{split} -\end{equation} -We thus have -$\fnof{W}{\fnof{\tensor{C}}{\vectr{\nu}}}=\fnof{W}{I_{1},I_{2},I_{3}}$ and -thus -\begin{equation} - T^{AB}=2\pbrac{\delby{W}{I_{1}}\delby{I_{1}}{C_{AB}}+\delby{W}{I_{2}}\delby{I_{2}}{C_{AB}}+\delby{W}{I_{3}}\delby{I_{3}}{C_{AB}}} -\end{equation} -or if we have -$\fnof{W}{\fnof{\tensor{E}}{\vectr{\nu}}}=\fnof{W}{I_{1},I_{2},I_{3}}$ and -thus -\begin{equation} - T^{AB}=\pbrac{\delby{W}{I_{1}}\delby{I_{1}}{E_{AB}}+\delby{W}{I_{2}}\delby{I_{2}}{E_{AB}}+\delby{W}{I_{3}}\delby{I_{3}}{E_{AB}}} -\end{equation} - -Now we have -\begin{equation} - \delby{I_{1}}{C_{AB}}=\begin{bmatrix} - 1 & 0 & 0 \\ - 0 & 1 & 0 \\ - 0 & 0 & 1 - \end{bmatrix} -\end{equation} -and -\begin{equation} - \delby{I_{2}}{C_{AB}}=\begin{bmatrix} - C_{22}+C_{33} & -C_{21} & -C_{31} \\ - -C_{12} & C_{11}+C_{33} & -C_{32} \\ - -C_{13} & -C_{23} & C_{11}+C_{22} - \end{bmatrix} -\end{equation} -and -\begin{equation} - \delby{I_{3}}{C_{AB}}=\begin{bmatrix} - C_{22}C_{33}-C_{23}C_{32} & C_{23}C_{31}-C_{21}C_{33} & C_{23}C_{32}-C_{22}C_{31} \\ - C_{13}C_{32}-C_{12}C_{33} & C_{11}C_{33}-C_{13}C_{31} & C_{12}C_{31}-C_{11}C_{32} \\ - C_{12}C_{32}-C_{22}C_{31} & C_{13}C_{23}-C_{11}C_{23} & C_{11}C_{22}-C_{12}C_{21} - \end{bmatrix} -\end{equation} - -As an example consider a Mooney-Rivlin material. The strain energy function is -given by -\begin{equation} - \fnof{W}{I_{1},I_{2}}=c_{1}\pbrac{I_{1}-3}+c_{2}\pbrac{I_{2}-3} -\end{equation} - -The second Piola Kirchhoff tensor is thus -\begin{equation} - T^{AB}=\begin{bmatrix} - 2c_{1}+2c_{2}\pbrac{C_{22}+C_{33}} & -2c_{2}C_{21} & -2c_{2}C_{31} \\ - -2c_{2}C_{12} & 2c_{1}+2c_{2}\pbrac{C_{11}+C_{33}} & -2c_{2}C_{32} \\ - -2c_{2}C_{13} & -2c_{2}C_{23} & 2c_{1}+2c_{2}\pbrac{C_{11}+C_{22}} - \end{bmatrix} -\end{equation} -or -\begin{equation} - T^{AB}=\begin{bmatrix} - c_{1}+c_{2}\pbrac{E_{22}+E_{33}} & -c_{2}E_{21} & -c_{2}E_{31} \\ - -c_{2}E_{12} & c_{1}+c_{2}\pbrac{E_{11}+E_{33}} & -c_{2}E_{32} \\ - -c_{2}E_{13} & -c_{2}E_{23} & c_{1}+c_{2}\pbrac{E_{11}+E_{22}} - \end{bmatrix} -\end{equation} - -For incompressible materials we need to add in the volumetric stress. The -hydrostatic stress is a Cauchy stress and so we have -\begin{equation} - \tensor{\sigma}_{p} = -p\tensor{g} -\end{equation} -or in component form -\begin{equation} - \sigma_{p}^{ij} = -p g^{ij} -\end{equation} - -We can pull this stress back to give a second Piola Kirchhoff stress via the -pullback operation for a second order tensor \ie -\begin{equation} - \tensor{T}_{p}= - -\inverse{\tensor{F}_{e}}\tensor{\sigma}_{p}\invtranspose{\tensor{F}_{e}} = -p\inverse{\tensor{C}} -\end{equation} -or in component form -\begin{equation} - T_{p}^{AB}=-\pbrac{F_{e}}^{A}_{i}p g^{ij}\pbrac{F_{e}}^{B}_{j}=-p\pbrac{\inverse{C}}^{AB} -\end{equation} - -To find the stress tensors in deformed coordinates we need to push the second -Piola Kirchhoff tensor in the reference coordinates forward to the deformed -coordinates, $\vectr{x}$, to give the Kirchhoff stress tensor, -$\fnof{\tensor{\tau}}{\vectr{x}}$. The push foward is given by -\begin{equation} - \fnof{\tensor{\tau}}{\vectr{x}}=\fnof{\tensor{F}_{e}}{\vectr{\nu}}\fnof{\tensor{T}}{\vectr{\nu}} - \fnof{\transpose{\tensor{F}_{e}}}{\vectr{\nu}} -\end{equation} - -The Cauchy stress tensor, $\fnof{\tensor{\sigma}}{\vectr{x}}$, can then be calculated from the Kirchhoff stress -tensor using the Jacobian of the deformation \ie -\begin{equation} - \fnof{\tensor{\sigma}}{\vectr{x}}=\inverse{J_{e}}\fnof{\tensor{\tau}}{\vectr{x}}=\inverse{J_{e}} - \fnof{\tensor{F}_{e}}{\vectr{\nu}}\fnof{\tensor{T}}{\vectr{\nu}}\fnof{\transpose{\tensor{F}_{e}}}{\vectr{\nu}} -\end{equation} - -In component form we have -\begin{equation} - \tau^{ij}=\pbrac{F_{e}}^{i}_{B}T^{BC}\pbrac{\transpose{F_{e}}}^{j}_{C} -\end{equation} -and -\begin{equation} - \sigma^{ij}=\inverse{J_{e}}\pbrac{F_{e}}^{i}_{B}T^{BC}\pbrac{\transpose{F_{e}}}^{j}_{C} -\end{equation} - -Now the principle of virtual work (Marsden and Hughes, pg 168) can be stated as -\begin{equation} - \gint{\embedmanifold{B}}{}{\rho\dotprod{\vectr{a}}{\delta\vectr{u}}}{v}= - \gint{\embedmanifold{B}}{}{\rho\dotprod{\vectr{b}}{\delta\vectr{u}}}{v}- - \gint{\embedmanifold{B}}{}{\doubledotprod{\tensor{\sigma}}{\gradient{\delta\vectr{u}}}}{v}+ - \gint{\boundary{\embedmanifold{B}}}{}{\dotprod{\pbrac{\dotprod{\tensor{\sigma}}{\vectr{n}}}}{\delta\vectr{u}}}{a} -\end{equation} -where $\delta\vectr{u}$ are the virtual displacements. - -In component form we have -\begin{equation} - \gint{\embedmanifold{B}}{}{\sigma^{ij}\covarderiv{\delta u_{j}}{i}}{v}= - \gint{\embedmanifold{B}}{}{\rho\pbrac{b^{j}-a^{j}}\delta u_{j}}{v}+ - \gint{\boundary{\embedmanifold{B}}}{}{t^{j}\delta u_{j}}{a} -\end{equation} - -The left hand side of the virtual work statement is -\begin{equation} - \begin{split} - \gint{\embedmanifold{B}}{}{\sigma^{ij}\covarderiv{\delta u_{j}}{i}}{v} - &= \gint{\embedmanifold{B}}{}{\sigma^{ij}\pbrac{\partialderiv{\delta - u_{j}}{i}-\christoffel{k}{j}{i}\delta u_{k}}}{v} \\ - &= \gint{\embedmanifold{B}}{}{\sigma^{ij}\pbrac{\delby{\delta - u_{j}}{x^{i}}-\christoffel{k}{j}{i}\delta u_{k}}}{v} - \end{split} -\end{equation} - -Now -\begin{equation} - \vectr{u}=\vectr{z}-\vectr{x} -\end{equation} -and so -\begin{equation} - \begin{split} - \delta\vectr{u} &=\delta\pbrac{\vectr{z} -\vectr{X}} \\ - &=\delta\vectr{z}-\delta\vectr{X} \\ - &=\delta\vectr{z} - \end{split} -\end{equation} - -If we now substitute $\delta\vectr{u}=\delta\vectr{z}$ and convert the left -hand side of the virtual work statement from an integral with respect to -spatial coordinates to an integral with respect to $\vectr{\xi}$ coordinates we obtain - -\begin{equation} - \begin{split} - \gint{\embedmanifold{B}}{}{\sigma^{ij}\pbrac{\delby{\delta - u_{j}}{x^{i}}-\christoffel{k}{j}{i}\delta u_{k}}}{v} - &= \gint{\embedmanifold{B}}{}{\sigma^{ij}\pbrac{\delby{\delta - z_{j}}{x^{i}}-\christoffel{k}{j}{i}\delta z_{k}}}{v} \\ - &= \gint{\vectr{0}}{\vectr{1}}{\fnof{\sigma^{ij}}{\vectr{\xi}}\pbrac{\delby{\xi_{l}}{x^{i}}\delby{\delta - \fnof{z_{j}}{\vectr{\xi}}}{\xi^{l}}-\christoffel{k}{j}{i}\delta\fnof{z_{k}}{\vect{\xi}}}\fnof{J_{\embedmanifold{B}}}{\vectr{\xi}}}{\vectr{\xi}} - \end{split} -\end{equation} - -Note that in rectangular cartesian coordinates $\christoffel{k}{j}{i}=0$ -$\forall i,j,k$. In addition it is not necessary to transform either the -Cauchy stress tensor or gradient of the virtual displacements so that the -components are with respect to $\vectr{\xi}$ coordinates. What is important is that -the stress and displacement are with respect to the same coordinate -system. Because the gradient of $\delta \vectr{z}$ is with respect to $\vectr{x}$ coordinates -then $\tensor{\sigma}$ needs to be with respect to $\vectr{x}$ coordinates. As there -is no coordinate transformations the Christoffel symbols are all zero and can -be dropped. - -The right hand side of the virtual work statement is -\begin{equation} - \begin{split} - \gint{\embedmanifold{B}}{}{\rho\pbrac{b^{j}-a^{j}}\delta u_{j}}{v}+ - \gint{\boundary{\embedmanifold{B}}}{}{t^{j}\delta u_{j}}{a} - &= \gint{\embedmanifold{B}}{}{\rho\pbrac{b^{j}-a^{j}}\delta z_{j}}{v}+ - \gint{\boundary{\embedmanifold{B}}}{}{Pn^{j}\delta z_{j}}{a} \\ - &= \gint{\vectr{0}}{\vectr{1}}{\rho\pbrac{\fnof{b^{j}}{\vectr{\xi}}-\fnof{a^{j}}{\vectr{\xi}}}\delta - \fnof{z_{j}}{\vectr{\xi}}\fnof{J_{\embedmanifold{B}}}{\vectr{\xi}}}{\vectr{\xi}}\\ - &\quad+\gint{\vectr{0}}{\vectr{1}}{\fnof{P}{\vectr{\xi}}\fnof{n^{j}}{\vectr{\xi}}\delta - \fnof{z_{j}}{\vectr{\xi}}\fnof{J_{\embedmanifold{B}}}{\vectr{\xi}}}{\vectr{\xi}} - \end{split} -\end{equation} -where $P$ is the applied surface pressure. - -If we now use basis functions to interpolate the virtual displacements \ie -\begin{equation} - \delta \fnof{z_{j}}{\vectr{\xi}} = \idxgbfn{j}{m}{\alpha}{\vectr{\xi}}\delta z_{j,\alpha}^{m}\gsf{m}{\alpha} -\end{equation} -which, assuming rectangular cartesian coordinates, gives for the left hand side integral -\begin{equation} - \begin{split} - \gint{\vectr{0}}{\vectr{1}}{\fnof{\sigma^{ij}}{\vectr{\xi}}\delby{\xi_{l}}{x^{i}}\delby{\delta - \fnof{z_{j}}{\vectr{\xi}}}{\xi^{l}}\fnof{J_{\embedmanifold{B}}}{\vectr{\xi}}}{\vectr{\xi}} - &= \gint{\vectr{0}}{\vectr{1}}{\fnof{\sigma^{ij}}{\vectr{\xi}}\delby{\xi_{l}}{x^{i}}\delby{ - \pbrac{\idxgbfn{j}{m}{\alpha}{\vectr{\xi}}\delta z_{j,\alpha}^{m}\gsf{m}{\alpha}}}{\xi^{l}} - \fnof{J_{\embedmanifold{B}}}{\vectr{\xi}}}{\vectr{\xi}} \\ - &= \gint{\vectr{0}}{\vectr{1}}{\fnof{\sigma^{ij}}{\vectr{\xi}}\delby{\xi_{l}}{x^{i}}\delby{ - \idxgbfn{j}{m}{\alpha}{\vectr{\xi}}}{\xi^{l}}\delta z_{j,\alpha}^{m}\gsf{m}{\alpha} - \fnof{J_{\embedmanifold{B}}}{\vectr{\xi}}}{\vectr{\xi}} \\ - &= \delta z_{j,\alpha}^{m}\gsf{m}{\alpha} - \gint{\vectr{0}}{\vectr{1}}{\fnof{\sigma^{ij}}{\vectr{\xi}}\delby{\xi_{l}}{x^{i}}\delby{ - \gbfn{m}{j\alpha}{\vectr{\xi}}}{\xi^{l}} - \fnof{J_{\embedmanifold{B}}}{\vectr{\xi}}}{\vectr{\xi}} - \end{split} -\end{equation} -and for the first integral on the right hand side integral we have -\begin{equation} - \begin{split} - \gint{\vectr{0}}{\vectr{1}}{\rho\pbrac{\fnof{b^{j}}{\vectr{\xi}}-\fnof{a^{j}}{\vectr{\xi}}}\delta - \fnof{z_{j}}{\vectr{\xi}}\fnof{J_{\embedmanifold{B}}}{\vectr{\xi}}}{\vectr{\xi}} - &= \gint{\vectr{0}}{\vectr{1}}{\rho\pbrac{\fnof{b^{j}}{\vectr{\xi}}-\fnof{a^{j}}{\vectr{\xi}}} - \idxgbfn{j}{m}{\alpha}{\vectr{\xi}}\delta - z_{j,\alpha}^{m}\gsf{m}{\alpha} - \fnof{J_{\embedmanifold{B}}}{\vectr{\xi}}}{\vectr{\xi}} \\ - &= \delta - z_{j,\alpha}^{m}\gsf{m}{\alpha}\gint{\vectr{0}}{\vectr{1}}{\rho\pbrac{\fnof{b^{j}}{\vectr{\xi}}- - \fnof{a^{j}}{\vectr{\xi}}}\gbfn{m}{j\alpha}{\vectr{\xi}} - \fnof{J_{\embedmanifold{B}}}{\vectr{\xi}}}{\vectr{\xi}} - \end{split} -\end{equation} -and for the second integral on the right hand side we have -\begin{equation} - \begin{split} - \gint{\vectr{0}}{\vectr{1}}{\fnof{P}{\vectr{\xi}}\fnof{n^{j}}{\vectr{\xi}}\delta - \fnof{z_{j}}{\vectr{\xi}}\fnof{J_{\embedmanifold{B}}}{\vectr{\xi}}}{\vectr{\xi}} - &= \gint{\vectr{0}}{\vectr{1}}{\fnof{P}{\vectr{\xi}}\fnof{n^{j}}{\vectr{\xi}} - \idxgbfn{j}{m}{\alpha}{\vectr{\xi}}\delta - z_{j,\alpha}^{m}\gsf{m}{\alpha} - \fnof{J_{\embedmanifold{B}}}{\vectr{\xi}}}{\vectr{\xi}} - \\ - &= \delta z_{j,\alpha}^{m}\gsf{m}{\alpha}\gint{\vectr{0}}{\vectr{1}}{\fnof{P}{\vectr{\xi}}\fnof{n^{j}}{\vectr{\xi}} - \gbfn{m}{j\alpha}{\vectr{\xi}} - \fnof{J_{\embedmanifold{B}}}{\vectr{\xi}}}{\vectr{\xi}} - \end{split} -\end{equation} - -This can be formulated as -\begin{equation} - r_{m}^{j\alpha}\delta z_{j,\alpha}^{m}=0 -\end{equation} -where the residual vector is thus given by -\begin{multline} - r_{m}^{j\alpha}=\gsf{m}{\alpha}\left( - \gint{\vectr{0}}{\vectr{1}}{\pbrac{\fnof{\sigma^{ij}}{\vectr{\xi}}\delby{\xi_{l}}{x^{i}}\delby{ - \gbfn{m}{j\alpha}{\vectr{\xi}}}{\xi^{l}}+\rho\pbrac{ - \fnof{a^{j}}{\vectr{\xi}}-\fnof{b^{j}}{\vectr{\xi}}}\gbfn{m}{j\alpha}{\vectr{\xi}}} - \fnof{J_{\embedmanifold{B}}}{\vectr{\xi}}}{\vectr{\xi}}\right. \\ - \left.-\gint{\vectr{0}}{\vectr{1}}{\fnof{P}{\vectr{\xi}}\fnof{n^{j}}{\vectr{\xi}} - \gbfn{m}{j\alpha}{\vectr{\xi}} - \fnof{J_{\embedmanifold{B}}}{\vectr{\xi}}}{\vectr{\xi}}\right) -\end{multline} - -Now, as the virtual displacements are arbitrary we have the residual statement -\begin{equation} - r_{m}^{j\alpha}=0 -\end{equation} - -In order to handle incompressible materials we need an additional constraint -which penalises change in volume. The change in volume is given by -\begin{equation} - \Delta V = \dfrac{J_{\embedmanifold{B}}}{J_{g}J_{\embedmanifold{B}_{0}}} -\end{equation} -and the residual equation is -\begin{equation} - \begin{split} - r_{m}^{\pbrac{N+1}\alpha}&=\gint{\vectr{0}}{\vectr{1}}{\pbrac{\fnof{\Delta V}{\vectr{\xi}} - - 1}\gbfn{m}{\pbrac{N+1}\alpha}{\vectr{\xi}}\gsf{m}{\alpha}\fnof{J_{\embedmanifold{B}}}{\vectr{\xi}}}{\vectr{\xi}} - \\ - &=\gsf{m}{\alpha}\gint{\vectr{0}}{\vectr{1}}{\pbrac{\dfrac{\fnof{J_{\embedmanifold{B}}}{\vectr{\xi}}}{\fnof{J_{g}}{\vectr{\xi}}\fnof{J_{\embedmanifold{B}_{0}}}{\vectr{\xi}}} - - 1}\gbfn{m}{\pbrac{N+1}\alpha}{\vectr{\xi}}\fnof{J_{\embedmanifold{B}}}{\vectr{\xi}}}{\vectr{\xi}} - \end{split} -\end{equation} -where $N$ is the number of dimensions. - -In order to solve the nonlinear system of equations a Newton scheme can be -used. To calculate the Jacobian of the system we need to calculate the -variation of the virtual work statement. - -This requires a linerization. - -Consider a linearisation of the second Piola-Kirchoff stress. -\begin{equation} - L\fnof{\tensor{T}}{\vectr{u},\delta\vectr{u}}=\fnof{\tensor{T}}{\vectr{u},\delta\vectr{u}}+ - \delta\fnof{\tensor{T}}{\vectr{u},\delta\vectr{u}} -\end{equation} - -A linearisation of the Kirchoff stress can thus be calculated from a push -forward of the linearisation of the second Piola-Kirchoff stress - -\begin{equation} - \begin{split} - L\fnof{\tensor{\tau}}{\vectr{u},\delta\vectr{u}}&=\tensor{F}_{e}L\fnof{\tensor{T}}{\vectr{u},\delta\vectr{u}}\transpose{\tensor{F}_{e}} \\ - &= \tensor{F}_{e}\pbrac{\fnof{\tensor{T}}{\vectr{u},\delta\vectr{u}}+ - \delta\fnof{\tensor{T}}{\vectr{u},\delta\vectr{u}}}\transpose{\tensor{F}_{e}} - \\ - &= - \tensor{F}_{e}\fnof{\tensor{T}}{\vectr{u},\delta\vectr{u}}\transpose{\tensor{F}_{e}}+ - \tensor{F}_{e}\delta\fnof{\tensor{T}}{\vectr{u},\delta\vectr{u}}\transpose{\tensor{F}_{e}} - \\ - & =\fnof{\tensor{\tau}}{\vectr{u},\delta\vectr{u}}+\tensor{F}_{e}\delta\fnof{\tensor{T}}{\vectr{u},\delta\vectr{u}}\transpose{\tensor{F}_{e}} - \end{split} -\end{equation} - - -\clearpage - -\subsection{Old Stuff} - -Formulation of finite element equations for finite elasticity (large -deformation mechanics) implemented in OpenCMISS is based on the -\textit{\textbf{principle of virtual work}}. The finite element model consists -of a set of non-linear algebraic equations. Non-linearity of equations stems -from non-linear stress-strain relationship and quadratic terms present in the -strain tensor. A typical problem in large deformation mechanics involves -determination of the deformed geometry or mesh nodal parameters, from the -finite element point of view, of the continuum from a known undeformed -geometry, subject to boundary conditions and satisfying stress-strain -(constitutive) relationship. - -The boundary conditions can be either \textit{\textbf{Dirichlet}} -(displacement), \textit{\textbf{Neumann}} (force) or a combination of them, -known as the mixed boundary conditions. Displacement boundary conditions are -generally nodal based. However, force boundary conditions can take any of the -following forms or a combination of them - nodal-based, distributed load -(e.g. pressure) or force acting at a discrete point on the boundary. In the -latter two forms, the equivalent nodal forces are determined using the -\textit{\textbf{method of work equivalence}} \cite{hutton:2004} and the forces -so obtained will then be added to the right hand side or the residual vector -of the linear equation system. - -There are a numerous ways of describing the mechanical characteristics of -deformable materials in large deformation mechanics or finite elasticity -analyses. A predominantly used form for representing constitutive properties -is a strain energy density function. This model gives the energy required to -deform a unit volume (hence energy density) of the deformable continuum as a -function of Green-Lagrange strain tensor components or its derived variables -such as invariants or principal stretches. A material that has a strain energy -density function is known as a \textit{\textbf{hyperelastic}} or -\textit{\textbf{Green-elastic material}}. - -The deformed equilibrium state should also give the minimum total elastic -potential energy. One can therefore formulate finite element equations using -the \textit{\textbf{Variational method}} approach where an extremum of a -functional (in this case total strain energy) is determined to obtain mesh -nodal parameters of the deformed continuum. It is also possible to derive the -finite element equations starting from the governing equilibrium equations -known as Cauchy equation of motion. The weak form of the governing equations -is obtained by multiplying them with suitable weighting functions and -integrating over the domain (method of weighted residuals). If interpolation -or shape functions are used as weighting functions, then the method is called -the Galerkin finite element method. All three approaches (virtual work, -variational method and Galerkin formulation) result in the same finite element -equations. - -In the following sections the derivation of kinematic relationships of -deformation, energy conjugacy, constitutive relationships and final form the -finite element equations using the virtual work approach will be discussed in -detail. - -\subsubsection{Kinematics of Deformation} -In order to track the deformation of an infinitesimal length at a particle of -the continuum, two coordinates systems are defined. An arbitrary orthogonal -spatial coordinate system, which is fixed in space and a material coordinate -system which is attached to the continuum and deforms with the continuum. The -material coordinate system, in general, is a curvi-linear coordinate system -but must have mutually orthogonal axes at the undeformed state. However, in -the deformed state, these axes are no longer orthogonal as they deform with -the continuum (fig 1). In addition to these coordinate systems, there exist -finite element coordinate systems (one for each element) as well. These -coordinates are normalised and vary from 0.0 to 1.0. The following notations are used to represent various coordinate systems and coordinates of a particle of the continuum.\\ - -\noindent $Y_{1}$-$Y_{2}$-$Y_{3}$ - fixed spatial coordinate system axes - orthogonal\\ -$N_{1}$-$N_{2}$-$N_{3}$ - deforming material coordinate system axes - orthogonal in the undeformed state\\ -$\Xi_{1}$-$\Xi_{2}$-$\Xi_{3}$ - element coordinate system - non-orthogonal in general and deforms with continuum\\ - -\noindent $x_{1}$-$x_{2}$-$x_{3}$ [$\vect{x}$] - spatial coordinates of a particle in the undeformed state wrt $Y_{1}$-$Y_{2}$-$Y_{3}$ CS \\ -$z_{1}$-$z_{2}$-$z_{3}$ [$\vect{z}$] - spatial coordinates of the same particle in the deformed state wrt $Y_{1}$-$Y_{2}$-$Y_{3}$ CS \\ -$\nu_{1}$-$\nu_{2}$-$\nu_{3}$ [$\vect{\nu}$] - material coordinates of the particle wrt $N_{1}$-$N_{2}$-$N_{3}$ CS (these do not change) \\ -$\xi_{1}$-$\xi_{2}$-$\xi_{3}$ [$\vect{\xi}$] - element coordinates of the particle wrt $\Xi_{1}$-$\Xi_{2}$-$\Xi_{3}$ CS (these too do not change)\\ - -Since the directional vectors of the material coordinate system at any given -point in the undeformed state is mutually orthogonal, the relationship between -spatial $\vect{x}$ and material $\vect{\nu}$ coordinates is simply a -rotation. The user must define the undeformed material coordinate -system. Typically a nodal based interpolatable field known as fibre -information (fibre, imbrication and sheet angles) is input to OpenCMISS. These -angles define how much the \textit{\textbf{reference or default material - coordinate system}} must be rotated about the reference material axes. The -reference material coordinate system at a given point is defined as -follows. The first direction $\nu_{1}$ is in the $\xi_{1}$ direction. The -second direction, $\nu_{2}$ is in the $\xi_{1}-\xi_{2}$ plane but orthogonal -to $\nu_{1}$. Finally the third direction $\nu_{3}$ is determined to be normal -to both $\nu_{1}$ and $\nu_{2}$. Once the reference coordinate system is -defined, it is then rotated about $\nu_{3}$ by an angle equal to the -interpolated fibre value at the point in counter-clock wise direction. This -will be followed by a rotation about new $\nu_{2}$ axis again in the -counter-clock wise direction by an angle equal to the sheet value. The final -rotation is performed about the current $\nu_{1}$ by an angle defined by -interpolated sheet value. Note that before a rotation is carried out about an -arbitrary axis one must first align(transform) the axis of rotation with one -of the spatial coordinate system axes. Once the rotation is done, the rotated -coordinate system (material) must be inverse-transformed. - -Having defined the undeformed orthogonal material coordinate system, the -metric tensor $\delby{\vect{x}}{\vect{\nu}}$ can be determined. As mentioned, -the tensor $\delby{\vect{x}}{\vect{\nu}}$ contains rotation required to align -material coordinate system with spatial coordinate system. This tensor is -therefore orthogonal. A similar metric tensor can be defined to relate the -deformed coordinates $\vect{z}$ of the point to its material coordinates -$\vect{\nu}$. Note that the latter coordinates do not change as the continuum -deforms and more importantly this tensor is not orthogonal as well. The metric -tensor, $\delby{\vect{z}}{\vect{\nu}}$ is called the -\textit{\textbf{deformation gradient tensor}} and denoted as $\matr{F}$. - -\begin{equation} - \matr{F}=\delby{\vect{z}}{\vect{\nu}} - \label{eqn:deformationgradienttensor} -\end{equation} - -It can be shown that the deformation gradient tensor contains rotation when an -infinitesimal length $\vect{dr_{0}}$ in the undeformed state undergoes -deformation. Since rotation does not contribute to any strain, it must be -removed from the deformation gradient tensor. Any tensor can be decomposed -into an orthogonal tensor and a symmetric tensor (known as polar -decomposition). In other words, the same deformation can be achieved by first -rotating $\vect{dr}$ and then stretching (shearing and scaling) or -vice-verse. Thus, the deformation gradient tensor can be given by, - -\begin{equation} - \matr{F}=\delby{\vect{z}}{\vect{\nu}}=\matr{R}\matr{U}=\matr{V}\matr{R_{1}} - \label{eqn:polardecomposition} -\end{equation} - -The rotation present in the deformation gradient tensor can be removed either -by right or left multiplication of $\matr{F}$. The resulting tensors lead to -different strain measures. The right Cauchy deformation tensor $\matr{C}$ is -obtained from, - -\begin{equation} - \matr{C}=\transpose{[\matr{R}\matr{U}]}[\matr{R}\matr{U}]=\transpose{\matr{U}}\transpose{\matr{R}}\matr{R}\matr{U}=\transpose{\matr{U}}\matr{U} - \label{eqn:rightCauchy} -\end{equation} - -Similarly the left Cauchy deformation tensor or the Finger tensor \matr{B} is -obtained from the left multiplication of \matr{F}, - -\begin{equation} - \matr{B}=[\matr{V}\matr{R_{1}}]\transpose{[\matr{V}\matr{R_{1}}]}=\matr{V}\matr{R_{1}}\transpose{\matr{R_{1}}}\transpose{\matr{V}}=\matr{V}\transpose{\matr{V}} - \label{eqn:leftCauchy} -\end{equation} - -\noindent Note that both $\matr{R}$ and $\matr{R_{1}}$ are orthogonal tensors -and therefore satisfy the following condition, - -\begin{equation} - \transpose{\matr{R}}\matr{R}=\matr{R_{1}}\transpose{\matr{R_{1}}}=\matr{I} - \label{eqn:orthoganality} -\end{equation} - -Since there is no rotation present in both $\matr{C}$ and $\matr{B}$, they can -be used to define suitable strain measures as follows, - -\begin{equation} - \matr{E}=\frac{1}{2}\pbrac{\transpose{\delby{\vect{z}}{\vect{\nu}}}\delby{\vect{z}}{\vect{\nu}}- - \transpose{\delby{\vect{x}}{\vect{\nu}}}\delby{\vect{x}}{\vect{\nu}}}= - \frac{1}{2}(\matr{C}-\matr{I}) - \label{eqn:greenstrain} -\end{equation} - -\noindent and - -\begin{equation} - \vect{e}=\frac{1}{2}\bbrac{\pbrac{\delby{\vect{x}}{\vect{\nu}}\transpose{\delby{\vect{x}}{\vect{\nu}}}}^{-1}- - \pbrac{\delby{\vect{z}}{\vect{\nu}}\transpose{\delby{\vect{z}}{\vect{\nu}}}}^{-1}}= - \frac{1}{2}\pbrac{\matr{I}-\matr{B}^{-1}} - \label{eqn:almansistrain} -\end{equation} - -\noindent where $\matr{E}$ and $\vect{e}$ are called Green and Almansi strain tensors respectively. -Also note that $\delby{\vect{x}}{\vect{\nu}}$ is an orthogonal tensor. \\ - -It is now necessary to establish a relationship between strain and displacement. Referring to figure 1, - -\begin{equation} - \vect{z}=\vect{x}+\vect{u} - \label{eqn:displacement} -\end{equation} - -\noindent where \vect{u} is the displacement vector. \\ - -\noindent Differentiating \eqnref{eqn:displacement} using the chain rule, - -\begin{equation} - \delby{\vect{z}}{\vect{\nu}}=\delby{\vect{x}}{\vect{\nu}}+\delby{\vect{u}}{\vect{x}}\delby{\vect{x}}{\vect{\nu}}= - \pbrac{\matr{I}+\delby{\vect{u}}{\vect{x}}}\delby{\vect{x}}{\vect{\nu}} - \label{eqn:displacementgradient} -\end{equation} - -\noindent Substituting \eqnref{eqn:displacementgradient} into \eqnref{eqn:greenstrain}, - -\begin{equation} - \matr{E}=\frac{1}{2}\bbrac{\transpose{\delby{\vect{x}}{\vect{\nu}}}\transpose{\pbrac{\matr{I}+\delby{\vect{u}}{\vect{x}}}} - \pbrac{\matr{I}+\delby{\vect{u}}{\vect{x}}}\delby{\vect{x}}{\vect{\nu}}-\matr{I}} - \label{eqn:greendisplacement1} -\end{equation} - -\noindent Simplifying, - -\begin{equation} - \matr{E}=\frac{1}{2}\transpose{\delby{\vect{x}}{\vect{\nu}}} - \pbrac{\delby{\vect{u}}{\vect{x}}+\transpose{\delby{\vect{u}}{\vect{x}}}+ - \transpose{\delby{\vect{u}}{\vect{x}}}\delby{\vect{u}}{\vect{x}}} - \delby{\vect{x}}{\vect{\nu}} - \label{eqn:greendisplacement2} -\end{equation} - -As can be seen from \eqnref{eqn:greendisplacement2} the displacement gradient -tensor $\delby{\vect{u}}{\vect{x}}$ is defined with respect to undeformed -coordinates $\vect{x}$. This means that the strain tensor $\matr{E}$ has -Lagrangian description and hence it is also also called the Green-Lagrange -strain tensor. - -A similar derivation can be employed to establish a relationship between the -Almansi and displacement gradient tensors and the final form is given by, - -\begin{equation} - \vect{e}=\frac{1}{2}\delby{\vect{u}}{\vect{z}}+\transpose{\delby{\vect{u}}{\vect{z}}}- - \transpose{\delby{\vect{u}}{\vect{z}}}\delby{\vect{u}}{\vect{z}} - \label{eqn:almansidisplacement} -\end{equation} - -The displacement gradient tensor terms in \eqnref{eqn:almansidisplacement} are defined with respect to deformed coordinates $\vect{z}$ and -therefore the strain tensor has Eulerian description. Thus it is also known as the Almansi-Euler strain tensor. - -\subsubsection{Energy Conjugacy} - - - -\subsubsection{Constitutive models} - - - -\subsubsection{Principle of Virtual Work} -Elastic potential energy or simply elastic energy associated with the -deformation can be given by strain and its energetically conjugate stress. -Note that the Cauchy stress and Almansi-Euler strain tensors and Second -Piola-Kirchhoff (2PK) and Green-Lagrange tensors are energetically -conjugate. Thus, the \textit{\textbf{total internal energy}} due to strain in -the body at the deformed state (fig. 3.1) can be given by, - -\begin{equation} - W_{int}=\gint{0}{v}{(\vect{e}:\vect{\sigma})}v - \label{eqn:totalenergy} -\end{equation} - -where \vect{e} and \vect{\sigma} are Almansi strain tensor and Cauchy stress -tensor respectively. - -If the deformed body is further deformed by introducing virtual displacements, -then the new internal elastic energy can be given by, - -\begin{equation} - {W_{int}+\delta W_{int}}=\gint{0}{v}{[\vect{(e+\delta{e})}:\vect{\sigma}]}v - \label{eqn:virtualtotalenergy} -\end{equation} - -Deducting \eqnref{eqn:totalenergy} from \eqnref{eqn:virtualtotalenergy}, - -\begin{equation} - \delta W_{int}=\gint{0}{v}{\pbrac{\vect{\delta \epsilon} : \vect{\sigma}}}v - \label{eqn:virtualenergy} -\end{equation} - -Using \eqnref{eqn:almansidisplacement} for virtual strain, - -\begin{equation} - \vect{\delta e}=\delby{\vect{\delta u}}{\vect{z}} + \transpose{\delby{\vect{\delta u}}{\vect{z}}} + - \transpose{\delby{\vect{\delta u}}{\vect{z}}}\delby{\vect{\delta u}}{\vect{z}} - \label{eqn:virtualalmansidisplacement} -\end{equation} - -Since virtual displacements are infinitesimally small, quadratic terms in -\eqnref{eqn:virtualalmansidisplacement} can be neglected. The resulting -strain tensor, known as small strain tensor \vect{\epsilon}, can be given as, - -\begin{equation} - \vect{\delta \epsilon}=\delby{\vect{\delta u}}{\vect{z}} + \transpose{\delby{\vect{\delta u}}{\vect{z}}} - \label{eqn:virtualsmalldisplacement} -\end{equation} - -Since both $\vect{\sigma}$ and $\vect{\delta \epsilon}$ are symmetric, new -vectors are defined by inserting tensor components as follows, - -\begin{equation} - \vect{\delta \epsilon}=\transpose{\sqbrac{\delta \epsilon_{11} \hspace{4 pt} \delta \epsilon_{22} \hspace{4 pt} \delta \epsilon_{33} - \hspace{4 pt} 2\delta \epsilon_{12} \hspace{4 pt} 2\delta \epsilon_{23} \hspace{4 pt} 2\delta \epsilon_{13}}} : - \vect{\sigma}=\transpose{\sqbrac{\delta \sigma_{11} \hspace{4 pt} \delta \sigma_{22} \hspace{4 pt} \delta \sigma_{33} - \hspace{4 pt} 2\delta \sigma_{12} \hspace{4 pt} 2\delta \sigma_{23} \hspace{4 pt} 2\delta \sigma_{13} }} - \label{eqn:newvectors} -\end{equation} - -Substituting \eqnref{eqn:newvectors} into \eqnref{eqn:virtualenergy}, - -\begin{equation} - \delta W_{int}=\gint{0}{v}{\pbrac{\transpose{\vect{\delta \epsilon}} \vect{\sigma}}}v - \label{eqn:virtualenergy1} -\end{equation} - -The strain vector $\vect{\delta \epsilon}$ can be related to displacement -vector using the following equation, - -\begin{equation} - \vect{\delta \epsilon}=\matr{D} \vect{\delta u} - \label{eqn:virtualsmalldisplacement1} -\end{equation} - -\noindent where $\matr{D}$ and $\vect{u}$ are linear differential operator and -displacement vector respectively and given by, - -\begin{equation} - \begin{array}{c} \matr{D} \end{array} = - \pbrac{ \begin{array}{ccc} \delby{}{z_{1}} & 0 & 0 \\ - 0 & \delby{}{z_{2}} & 0 \\ - 0 & 0 & \delby{}{z_{3}} \\ - \delby{}{z_{2}} & \delby{}{z_{1}} & 0 \\ - 0 & \delby{}{z_{3}} & \delby{}{z_{2}} \\ - \delby{}{z_{3}} & 0 & \delby{}{z_{1}} \\ \end{array} } - \label{eqn:differentialoperator} -\end{equation} - -\begin{equation} - \vect{\delta u}=\transpose{\pbrac{\delta u_{1} \hspace{4 pt} \delta u_{2} \hspace{4 pt} \delta u_{3}}} - \label{eqn:displacementvector} -\end{equation} - -The virtual displacement is a finite element field and hence the value at any -point can be obtained by interpolating nodal virtual displacements. - -\begin{equation} - \vect{\delta u}=\matr{\Phi}\matr{\Delta} - \label{eqn:interpolation} -\end{equation} - diff --git a/doc/notes/Latex_make.sh b/doc/notes/Latex_make.sh deleted file mode 100755 index 37e4d125..00000000 --- a/doc/notes/Latex_make.sh +++ /dev/null @@ -1,105 +0,0 @@ -#!/bin/bash -f -# -# This shell script is used to invoke the Latex_Makefile for general -# documents. It should be copied into the individual document directory -# as a new document is created. It is used to pass document specific -# parameters to the makefile. NOTE that if parameters may be omitted -# by simply deleting them from the "make" command line. -# -# Usage: -# Latex_make.sh [makefile_options] -# Created: -# Martyn Nash, 22 March 1996 -# Updates: -# -# Changable options: -# -# This is the overall name of the document - -MY_MAINFILE=OpenCMISSNotes - -# -# These are the names of the tex sources for the document. If there is -# more than one source quotation (") marks must be used around the -# individual sources seperated by spaces. - -MY_TEX_SRC="TitlePage/TitlePage.tex "\ -"Introduction/Introduction.tex "\ -"DifferentialGeometry/DifferentialGeometry.tex "\ -"Theory/Theory.tex "\ -"EquationSets/EquationSets.tex "\ -"EquationSets/ClassicalFieldClass/AdvectionDiffusionEquation.tex "\ -"EquationSets/ClassicalFieldClass/GeneralisedLaplaceEquation.tex "\ -"EquationSets/ClassicalFieldClass/BiharmonicEquation.tex "\ -"EquationSets/ClassicalFieldClass/DiffusionEquation.tex "\ -"EquationSets/ClassicalFieldClass/HelmholtzEquation.tex "\ -"EquationSets/ClassicalFieldClass/PoissonEquation.tex "\ -"EquationSets/ClassicalFieldClass/ReactionDiffusionEquation.tex "\ -"EquationSets/ClassicalFieldClass/WaveEquation.tex "\ -"EquationSets/ElasticityClass/LinearElasticity.tex "\ -"EquationSets/ElasticityClass/FiniteElasticity.tex "\ -"EquationSets/FluidMechanicsClass/BurgersEquation.tex "\ -"EquationSets/FluidMechanicsClass/PoiseuilleFlow.tex "\ -"EquationSets/FluidMechanicsClass/StokesEquation.tex "\ -"EquationSets/FluidMechanicsClass/DarcyEquation.tex "\ -"EquationSets/FluidMechanicsClass/NavierStokesEquation.tex "\ -"EquationSets/MultiphysicsClass/Poroelasticity.tex "\ -"AnalyticSolutions/AnalyticSolutions.tex "\ -"AnalyticSolutions/ClassicalFieldClass/DiffusionEquation.tex "\ -"AnalyticSolutions/FluidMechanicsClass/BurgersEquation.tex "\ -"References/References.tex "\ -"Index/Index.tex" - -# -# The names of the eps/figs/(gnu)plot files that go into the document. -# if there are none then leave after the ='s sign blank. If there is -# more than one source quotation (") marks must be used around the -# individual sources seperated by spaces. - -#MY_EPS_SRC="epsfiles/*.eps" -MY_EPS_SRC= -MY_FIG_SRC=figs/Theory/*.fig -MY_SVG_SRC="svgs/DifferentialGeometry/*.svg svgs/Theory/*.svg" -MY_PLOT_SRC=plots/Theory/*.gnu - -# -# The name of the directory to place the html version of the document. -# Note that the actual file will be placed in the directory -# MY_HTMLUPDATE_DIR/MY_MAINFILE with filename index.html - -MY_HTMLUPDATE_DIR=${OPENCMISS_ROOT}/src/iron/doc/www/help - -# -# This next option controls the type of backlinks to add to the footer -# of the HTML file. It should be "user" if the document is intended for -# general users or "programmer" if the document is intended for -# cmiss programmers. If no backlinks are required use "none". - -MY_HTMLIDXTYPE=user - -# -# The name of the bibliography database for the document - -MY_BIBS=${OPENCMISS_ROOT}/src/iron/doc/references/references.bib - -# -# The name of the printer to print the document to - -MY_PRINTER=laserjet_postscript - -# -# Below this line should not need changing -# -# Actual make command: -# -make -f ${OPENCMISS_ROOT}/src/iron/doc/latex/Latex_Makefile $* \ - MAINFILE=$MY_MAINFILE \ - TEX_SRC="$MY_TEX_SRC" \ - EPS_SRC="$MY_EPS_SRC" \ - FIG_SRC="$MY_FIG_SRC" \ - SVG_SRC="$MY_SVG_SRC" \ - PLOT_SRC="$MY_PLOT_SRC" \ - HTMLUPDATE_DIR=$MY_HTMLUPDATE_DIR \ - HTMLIDXTYPE=$MY_HTMLIDXTYPE \ - BIBS=$MY_BIBS \ - PRINTER=$MY_PRINTER diff --git a/doc/notes/OpenCMISSNotes.tex b/doc/notes/OpenCMISSNotes.tex deleted file mode 100755 index 14922103..00000000 --- a/doc/notes/OpenCMISSNotes.tex +++ /dev/null @@ -1,56 +0,0 @@ -\documentclass[12pt,twoside,a4paper]{book} - -\input{../latex/macros} %define new commands etc. -\input{../latex/defns} %define pagesetup and std. packages etc. -\input{../latex/abbreviations} %define packages etc. -%\input{ParameterEstimation/include} %define new commands etc. - -%\usepackage{mybook} %define book style -\usepackage[center,sc,small]{caption} % Alter caption styles -\setcaptionmargin{0.25in} -\usepackage{listings} -\usepackage{times} %use the times font -\usepackage{listings} -\usepackage[small,nohug,heads=littlevee]{styles/diagrams} %commutative diagrams - -\makeindex - -\title{OpenCMISS Notes} -\author{} -\date{\today} - -\begin{document} - -\include{TitlePage/TitlePage} %input from TitlePage/TitlePage.tex -%\clearemptydoublepage - -\pagenumbering{roman} - -\tableofcontents -%\listoffigures -%\listoftables - -\pagenumbering{arabic} - -\include{Introduction/Introduction} %input from Introduction/Introduction.tex -\include{DifferentialGeometry/DifferentialGeometry} %input from Introduction/Introduction.tex -\include{Theory/Theory} %input from Theory/Theory.tex -\include{EquationSets/EquationSets} %input from EquationSets/EquationSets.tex -\include{AnalyticSolutions/AnalyticSolutions} %input from AnalyticSolutions/AnalyticSolutions.tex -\include{Solvers/Solvers} %input from Solvers/Solvers.tex -\include{Coupling/Coupling} %input from Coupling/Coupling.tex -\include{BoundaryConditions/BoundaryConditions} -%\include{Modules/Modules} %input from Modules/Modules.tex -\include{DevelopersDocument/DevelopersDoc} -%\include{ParameterEstimation/ParameterEstimation} %input from ParameterEstimation/ParameterEstimation.tex - -\include{References/References} %input from References/References.tex - -\include{Index/Index} %input from Index/Index.tex - -\end{document} - -%%% Local Variables: -%%% mode: latex -%%% TeX-master: t -%%% End: diff --git a/doc/notes/Theory/Theory.tex b/doc/notes/Theory/Theory.tex deleted file mode 100755 index aa343574..00000000 --- a/doc/notes/Theory/Theory.tex +++ /dev/null @@ -1,2054 +0,0 @@ -\clearemptydoublepage -\chapter{Theory} -\label{cha:theory} - -\section{Basis Functions and Interpolation} -\label{sec:basisfunctions} - -Both the finite element method (FEM) and the boundary element method (BEM) use -interpolation in finding a field solution \ie the methods find the solution at -a number of points in the domain of interest and then approximate the solution -between these points using interpolation. The points at which the solution is -found are known as \emph{nodes}. \emph{Basis functions} are used to -interpolate the field between nodes within a subregion of the domain known as -an \emph{element}. Interpolation is achieved by mapping the field coordinate -onto a \emph{local parametric}, or $\xi$, coordinate (which varies from $0$ to -$1$) within each element. The global nodes which make up each element are also -mapped onto local element nodes and the basis functions are chosen (in terms -of polynomials of the local parametric coordinate) such that the interpolated -field is equal to the known nodal values at each node and is thus continuous -between elements. A schematic of this -scheme is shown in \figref{fig:nodesandelements}. - -\epstexfigure{svgs/Theory/nodesandelements.eps_tex}{A schematic of the - relationship between local and global nodes, elements and the parametric - elemental $\xi$ coordinate.} {A schematic of the relationship between local - and global nodes, elements and the parametric elemental $\xi$ - coordinate.}{fig:nodesandelements}{0.3} - -\subsection{Summation Notation} -\label{subsec:summation notation} - -The following (Einstein) summation notation will be used throughout these notes. In order to -eliminate summation symbols repeated ``dummy'' indices will be used \ie -\begin{equation} - \gsum{i=1}{n}{a^{i}b_{i}}=a^{i}b_{i} -\end{equation} - -To indicate an index that is not summed, parentheses will be used -\ie $a^{(i)}b_{(i)}$ is talking about the singular expression for $i$ \eg -$a^{1}b_{1}$, $a^{2}b_{2}$ \etc - -In order to indicate a summation the sum must occur over indices that are -different sub/super-script \ie the sum must be over an ``upper'' and a -``lower'' index or a ``lower'' and an ``upper'' index. Note that it may be -useful to remember that if an index appears in the denominator of a fractional -expression then the index upper- or lower- ness is ``reversed''. - -For some quantities with both upper and lower indices a dot will be used to -indicate the ``second'' index \eg in the expression $A^{i}_{.j}$ then $i$ can -be considered the first index and $j$ the second index. - -\subsection{Lagrangian Basis Functions} -\label{sec:lagrangebasisfunctions} - -One important family of basis functions are the Lagrange basis functions. This -family has one basis function for each of the local element nodes and are -defined such that, at a particular node, only one basis function is non-zero -and has the value of one. In this sense a basis function can be thought of as -being associated with a local node and serves to weight the interpolated -solution in terms of the field value at that node. Lagrange basis functions -hence provide only $C^{0}$ continuity of the field variable across element -boundaries. - -\subsubsection{Linear Lagrange basis functions} - -The simplest basis functions of the Lagrange family are the \onedal linear -Lagrange basis functions. These basis functions involve two local nodes and -are defined as -\begin{equation} - \begin{split} - \lbfn{1}{\xi}&=1-\xi \\ - \lbfn{2}{\xi}&=\xi - \end{split} - \label{eqn:linearlbfuns} -\end{equation} - -The two \onedal linear Lagrange basis functions are gshown in \figref{fig:linlagrangebfuns}. - -\pstexfigure{plots/Theory/linlagrangebfuns.pstex}{Linear Lagrange basis functions.} -{Linear Lagrange basis functions.}{fig:linlagrangebfuns} - -The interpolation of a field variable, $u$, using these basis functions is -given by -\begin{equation} - \begin{split} - \fnof{u}{\xi}&=\lbfn{1}{\xi}\nodept{u}{1}+\lbfn{2}{\xi}\nodept{u}{2} \\ - &=\pbrac{1-\xi}\nodept{u}{1}+\xi\nodept{u}{2} - \end{split} -\end{equation} -where $\nodept{u}{1}$ and $\nodept{u}{2}$ are the values of the field variable at -the first and second local nodes respectively. These basis functions hence -provide a linear variation between the local nodal values with the local -element coordinate, $\xi$. - -\subsubsection{Quadratic Lagrange basis functions} - -Lagrange basis functions can also be used to provide higher order variations, -for example the one-dimensional quadratic Lagrange basis functions involve -three local nodes and can provide a quadratic variation of field parameter -with $\xi$. They are defined as -\begin{equation} - \begin{split} - \lbfn{1}{\xi}&=2\pbrac{\xi-\frac12}\pbrac{\xi-1} \\ - \lbfn{2}{\xi}&=4\xi\pbrac{1-\xi} \\ - \lbfn{3}{\xi}&=2\xi\pbrac{\xi-\frac12} - \end{split} - \label{eqn:quadraticlbfuns} -\end{equation} - -The three \onedal quadratic Lagrange basis functions are shown in \figref{fig:quadlagrangebfuns}. - -\pstexfigure{plots/Theory/quadlagrangebfuns.pstex}{Quadratic Lagrange basis functions.} -{Quadratic Lagrange basis functions.}{fig:quadlagrangebfuns} - -The interpolation formula is -\begin{equation} - \begin{split} - \fnof{u}{\xi}&=\lbfn{1}{\xi}\nodept{u}{1}+\lbfn{2}{\xi}\nodept{u}{2}+ - \lbfn{3}{\xi}\nodept{u}{3}\\ - &=2\pbrac{\xi-\frac12}\pbrac{\xi-1}\nodept{u}{1}+ - 4\xi\pbrac{1-\xi}\nodept{u}{2}+2\xi\pbrac{\xi-\frac12}\nodept{u}{3} - \end{split} -\end{equation} - -\subsubsection{Cubic Lagrange basis functions} - -One-dimensional cubic Lagrange basis functions involve -four local nodes and can provide a cubic variation of field parameter -with $\xi$. They are defined as -\begin{equation} - \begin{split} - \lbfn{1}{\xi}&=\frac12\pbrac{3\xi-1}\pbrac{3\xi-2}\pbrac{1-\xi} \\ - \lbfn{2}{\xi}&=\frac92\xi\pbrac{3\xi-2}\pbrac{\xi-1} \\ - \lbfn{3}{\xi}&=\frac92\xi\pbrac{3\xi-1}\pbrac{1-\xi} \\ - \lbfn{4}{\xi}&=\frac12\xi\pbrac{3\xi-1}\pbrac{3\xi-2} - \end{split} - \label{eqn:cubiclbfuns} -\end{equation} - -The four \onedal cubic Lagrange basis functions are shown in \figref{fig:cublagrangebfuns}. - -\pstexfigure{plots/Theory/cublagrangebfuns.pstex}{Cubic Lagrange basis functions.} -{Cubic Lagrange basis functions.}{fig:cublagrangebfuns} - -The interpolation formula is -\begin{equation} - \begin{split} - \fnof{u}{\xi}&=\lbfn{1}{\xi}\nodept{u}{1}+\lbfn{2}{\xi}\nodept{u}{2}+ - \lbfn{3}{\xi}\nodept{u}{3}+\lbfn{4}{\xi}\nodept{u}{4}\\ - &=\frac12\pbrac{3\xi-1}\pbrac{3\xi-2}\pbrac{1-\xi}\nodept{u}{1}+ - \frac92\xi\pbrac{3\xi-2}\pbrac{\xi-1}\nodept{u}{2} \\ - &\quad+\frac92\xi\pbrac{3\xi-1}\pbrac{1-\xi}\nodept{u}{3}+ - \frac12\xi\pbrac{3\xi-1}\pbrac{3\xi-2}\nodept{u}{4} - \end{split} -\end{equation} - -\subsubsection{General Lagrange basis functions} - -In general the interpolation formula for the Lagrange family of basis -functions is, using \index{Einstein summation notation}\emph{Einstein - summation notation}, given by -\begin{equation} - \fnof{u}{\xi}=\lbfn{\alpha}{\xi}\nodept{u}{\alpha}\quad \alpha=1,\ldots,n_{e} - \label{eqn:lagrangeinterpolation} -\end{equation} -where $n_{e}$ is the number of local nodes in the element. Einstein summation -notation uses a repeated index in a product expression to imply summation. For -example \eqnref{eqn:lagrangeinterpolation} is equivalent to -\begin{equation} - \fnof{u}{\xi}=\gsum{\alpha=1}{n_{e}}{\lbfn{\alpha}{\xi}\nodept{u}{\alpha}} -\end{equation} - -\subsubsection{Bilinear Lagrange basis functions} - -Multi-dimensional Lagrange basis functions can be constructed from the tensor, -or outer, products of the one-dimensional Lagrange basis functions. For -example the two-dimensional bilinear Lagrange basis functions have four local -nodes with the basis functions given by -\begin{equation} - \begin{split} - \lbfn{1}{\xione,\xitwo}&=\lbfn{1}{\xione}\lbfn{1}{\xitwo}= - \pbrac{1-\xione}\pbrac{1-\xitwo}\\ - \lbfn{2}{\xione,\xitwo}&=\lbfn{2}{\xione}\lbfn{1}{\xitwo}= - \xione\pbrac{1-\xitwo}\\ - \lbfn{3}{\xione,\xitwo}&=\lbfn{1}{\xione}\lbfn{2}{\xitwo}= - \pbrac{1-\xione}\xitwo \\ - \lbfn{4}{\xione,\xitwo}&=\lbfn{2}{\xione}\lbfn{2}{\xitwo}= - \xione\xitwo - \end{split} -\end{equation} - -The four \twodal bilinear Lagrange basis functions are shown in \figref{fig:bilinlagrangebfuns}. - -\pstexfigure{plots/Theory/bilinlagrangebfuns.pstex}{Bilinear Lagrange basis functions.} - {Bilinear Lagrange basis functions.}{fig:bilinlagrangebfuns} - -The multi-dimensional interpolation formula is still a sum of the products of -the nodal basis function and the field value at the node. For example the -interpolated geometric position vector within an element is given by -\begin{equation} - \begin{split} - \fnof{\vect{x}}{\xione,\xitwo}&=\lbfn{\alpha}{\xione,\xitwo} - \nodept{\vect{x}}{\alpha}\\ - &=\lbfn{1}{\xione,\xitwo}\nodept{\vect{x}}{1}+\lbfn{2}{\xione,\xitwo} - \nodept{\vect{x}}{2}+\lbfn{3}{\xione,\xitwo}\nodept{\vect{x}}{3}+ - \lbfn{4}{\xione,\xitwo}\nodept{\vect{x}}{4} - \end{split} -\end{equation} -where, for the vector field, each component is interpolated separately using -the given basis functions. - -\subsection{Hermitian Basis Functions} -\label{sec:Hermitianbasisfunctions} - -Hermitian basis functions preserve continuity of the derivative of the -interpolating variable \ie $C^{1}$ continuity, with respect to $\xi$ across -element boundaries by defining additional nodal derivative parameters. Like -Lagrange bases, Hermitian basis functions are also chosen so that, at a -particular node, only one basis function is non-zero and equal to one. They -also are chosen so that, at a particular node, the \emph{derivative} of only -one of four basis functions is non-zero and is equal to one. Hermitian basis -functions hence serve to weight the interpolated solution in terms of the -field value and derivative of the field value at nodes. - -\subsubsection{Cubic Hermite basis functions} - -\Cubicherm basis functions are the simplest of the Hermitian family and -involve two local nodes per element. The interpolation within each element is -in terms of $\nodept{\vect{x}}{\alpha}$ and \evalat{\dby{\vect{x}}{\xi}}{\alpha} -and is given by \index{cubic Hermite basis!$\xi$ interpolation formula} -\begin{equation} - \fnof{\vect{x}}{\xi}=\chbfn{1}{0}{\xi}\nodept{\vect{x}}{1}+\chbfn{1}{1}{\xi} - \evalat{\dby{\vect{x}}{\xi}}{1}+\chbfn{2}{0}{\xi}\nodept{\vect{x}}{2}+ - \chbfn{2}{1}{\xi}\evalat{\dby{\vect{x}}{\xi}}{2} - \label{eqn:chxiinterpolation} -\end{equation} -where the four \onedal \cubicherm basis functions are given in -\eqnref{eqn:chbfuns} and shown in \figref{fig:chbfuns}. -\index{cubic Hermite basis!basis functions formulae} -\begin{equation} - \begin{split} - \chbfn{1}{0}{\xi} &= 1-3\xi^{2}+2\xi^{3} \\ - \chbfn{1}{1}{\xi} &= \xi(\xi-1)^{2} \\ - \chbfn{2}{0}{\xi} &= \xi^{2}(3-2\xi) \\ - \chbfn{2}{1}{\xi} &= \xi^{2}(\xi-1) - \end{split} - \label{eqn:chbfuns} -\end{equation} -\pstexfigure{plots/Theory/chbfuns.pstex}{Cubic Hermite basis functions.} -{Cubic Hermite basis functions.}{fig:chbfuns} - -\subsubsection{Scaling} - -One further step is required to make \cubicherm basis functions useful in -practice. Consider the two \cubicherm elements shown in -\figref{fig:chelements}. - -\epstexfigure{svgs/Theory/cubichermiteelem.eps_tex}{Two - cubic Hermite elements formed from three nodes.}{Two cubic Hermite elements - (denoted by $\mathit{1}$ and $\mathit{2}$) formed from three nodes (shown as - a $\bullet$ and denoted by $\mathbf{1}, \mathbf{2}$ and $\mathbf{3}$) and - having \arclens $s_{1}$ and $s_{2}$ respectively.}{fig:chelements}{0.35} - -The derivative $\evalat{\dby{\vect{x}}{\xi}}{\alpha}$ defined at local node -$\alpha$ is dependent upon the local element \xicoord and is therefore, in -general, different in the two adjacent elements. Interpretation of the -derivative is hence difficult as two derivatives with the same magnitude in -different parts of the mesh might represent two completely different physical -derivatives. This is problematic for modelling and computation if the interpretation of the -magnitude of the derivative (or \emph{scaling}) is unknown \eg we cannot -assign physical units. If the scaling varies throughout the mesh then a -derivative at a node that has a magnitude of, say, 5 will be different from -another derivative at another node that also has the magnitude of 5. Thus, a -numerical solver that is given a vector of derivative values would assume that -the scalings are the same and interpret the magnitudes identically. This would -mean that algorithms may fail \eg if, say, we needed to compute the -norm of a vector of derivatives then by assuming the same scaling the wrong -result would be computed. - -In order to the have a consistent interpretation of the derivative -throughout the mesh it is better to base the interpolation on a physical -coordinate. Whilst we are free to choose the physical coordinate to be -anything the optimum choice is arc length as this is what physical processes -are based on. However, arc-length is extremely difficult to use as an -interpolation parameter as the inherent nonlinearity involved in its -calculation makes conversion to and from coordinates non trivial. -The solution is to find a parameter that scales -in the same way as arc-length or as close to it as we can. - -Consider then basing the derivatives on an \arclen coordinate at nodes, -$\dby{\nodept{\vect{x}}{\alpha}}{s}$, with -\begin{equation} - \begin{split} - \evalat{\dby{\vect{x}}{\xi}}{\alpha}&=\dby{\nodept{\vect{x}}{ - \fnof{\Delta}{\alpha,e}}}{s}\pbrac{\dby{s}{\xi}}_{e} \\ &= - \dby{\nodept{\vect{x}}{\fnof{\Delta}{\alpha,e}}}{s}\esfone{e} - \end{split} - \label{eqn:xitosch} -\end{equation} -used to determine $\evalat{\dby{\vect{x}}{\xi}}{\alpha}$. Here -$\dby{\vect{x}}{s}$ is a physical \arclen derivative, -$\fnof{\Delta}{\alpha,e}$ is the global node number of local node $\alpha$ in -element $e$, $\pbrac{\dby{s}{\xi}}_{e}$ is an \index{element scale - factor}element \emph{scale factor}, denoted by $\esfone{e}$, which scales -the \arclen derivative to the \xicoord derivative. Thus $\dby{\vect{x}}{s}$ -is constrained to be continuous across element boundaries rather than -$\dby{\vect{x}}{\xi}$. The \cubicherm interpolation formula now becomes -\begin{equation} - \fnof{\vect{x}}{\xi}=\chbfn{1}{0}{\xi}\nodept{\vect{x}}{1}+\chbfn{1}{1}{\xi} - \dby{\nodept{\vect{x}}{1}}{s}\esfone{e}+\chbfn{2}{0}{\xi}\nodept{\vect{x}}{2}+ - \chbfn{2}{1}{\xi}\dby{\nodept{\vect{x}}{2}}{s}\esfone{e} - \label{eqn:chseinterpolation} -\end{equation} - -By interpolating with respect to $s$ rather than with respect to $\xi$ there is some -liberty as to the choice of the element scale factor, $\esfone{e}$. The choice -of the scale factor will, however, affect how $\xi$ changes with $s$. It is -computationally desirable to have a relatively uniform change of $\xi$ with -$s$ (for example not biasing the Gaussian quadrature -- see later -- scheme to -one end of the element). For this reason the element scale factor is chosen as -some function of the \arclen of the element, $s_{e}$. The simplest linear -function that can be chosen is the \arclen itself. This type of scaling is -called \index{arc-length scaling}\emph{\arclen scaling}. - -To calculate the \arclen for a particular element an iterative process is -needed. The \arclen for a \onedal element in \twods is defined as -\index{arc-length definition} -\begin{equation} - \text{\arclen, }s_{e}=\gint{0}{1}{\norm{\dby{\fnof{\vect{x}}{\xi}}{\xi}}} - {\xi}=\gint{0}{1}{\sqrt{\pbrac{\dby{\fnof{x}{\xi}}{\xi}}^{2}+ - \pbrac{\dby{\fnof{y}{\xi}}{\xi}}^{2}}}{\xi} - \label{eqn:arclendef} -\end{equation} - -However, since the interpolation of $\fnof{\vect{x}}{\xi}$, as defined in -\eqnref{eqn:chseinterpolation}, uses the \arclen in the calculation of the -scaling factor, an iterative root finding technique is needed to obtain the -\arclen. - -Thus, for an element $e$, the \onedal \cubicherm interpolation -formula in \eqnref{eqn:chseinterpolation} becomes -\begin{equation} - \fnof{\vect{x}}{\xi}=\chbfn{\alpha}{u}{\xi}\nodept{\vect{x}}{\alpha}_{,u} - \esftwo{e}{u} - \label{eqn:chsfinterpolation} -\end{equation} -where $\alpha$ varies from $1$ to $2$, $u$ varies from $0$ to $1$, -$\nodept{\vect{x}}{\alpha}_{,0}=\nodept{\vect{x}}{\alpha}$, -$\nodept{\vect{x}}{\alpha}_{,1}= \dby{\nodept{\vect{x}}{\alpha}}{s}$, -$\esftwo{e}{0}=1$ and $\esftwo{e}{1}=\esfone{e}=s_{e}$. \Eqnref{eqn:chsfinterpolation} is equivalent to -\begin{equation} - \fnof{\vect{x}}{\xi}=\chbfn{1}{0}{\xi}\nodept{\vect{x}}{1}_{,0}\esftwo{e}{0} - +\chbfn{1}{1}{\xi}\nodept{\vect{x}}{1}_{,1}\esftwo{e}{1}+ - \chbfn{2}{0}{\xi}\nodept{\vect{x}}{2}_{,0}\esftwo{e}{0} - +\chbfn{2}{1}{\xi}\nodept{\vect{x}}{2}_{,1}\esftwo{e}{1} -\end{equation} -\ie there is an implied sum with $\alpha$ and $u$ for $\chbfn{\alpha}{u}{\xi}$ -and $\nodept{\vect{x}}{\alpha}_{,u}$ but not for $\esftwo{e}{u}$. - -There is one final condition that must be placed on the $\xi$ to \arclen -transformation to ensure \arclen derivatives. This condition is based on the -geometric defintion of \arclen which is given by Pythagorus \ie for \twods in -rectangular cartesian coordinate we have -\begin{equation} - ds^{2}=dx^{2}+dy^{2} - \label{eqn:arclengthpythagorus} -\end{equation} -or, in general coordinates, -\begin{equation} - ds^{2}=g_{ij}dx^{i}dx^{j} - \label{eqn:genarclengthpythagorus} -\end{equation} -where $g_{ij}$ are the components of the metric tensor. - -Rearranging \eqnref{eqn:arclengthpythagorus} we find that the \arclen derivative vector at a -node for geometric like fields, for rectangular cartesian coordinates, must -have unit magnitude. Thus for global node $A$ we have -\begin{equation} - \norm{\dby{\nodept{\vect{x}}{A}}{s}}=1 - \label{eqn:chnormconstraint} -\end{equation} - -In general coordinates this condition becomes -\begin{equation} - \norm{\delby{\nodept{\vect{x}}{A}}{s_{k}}}=\sqrt{\det{\tensor{g}}} - \label{eqn:genchnormconstraint} -\end{equation} -where $s_{k}$ is the \nth{k} global arc-length direction and $\tensor{g}$ is the metric tensor. - -The use of this constraint on \arclen derivative magnitude ensures that there is continuity with respect to a physical parameter, -$s$, rather than with respect to a mathematical parameter $\xi$. The set of -mesh parameters, $\vect{u}$, for \cubicherm interpolation hence contains the -set of nodal values (or positions), the set of nodal \arclen derivatives and -the set of scale factors. - -\subsubsection{Extension to higher orders} - -\Bicubicherm basis functions are the \twodal extension of the \onedal -\cubicherm basis functions. They are formed from the tensor (or outer) product -of two of the \onedal cubic Hermite basis functions defined in -\eqnref{eqn:chbfuns}. The interpolation formula for the point -$\fnof{\vect{x}}{\xione,\xitwo}$ within an element is obtained from the -\bicubicherm interpolation formula \cite{nielsen:1991a}, \index{bicubic - Hermite basis!$\xi$ interpolation formula} -\begin{equation} - \begin{split} - \fnof{\vect{x}}{\xione,\xitwo} &= - \chbfn{1}{0}{\xione}\chbfn{1}{0}{\xitwo}\nodept{\vect{x}}{1} + - \chbfn{2}{0}{\xione}\chbfn{1}{0}{\xitwo}\nodept{\vect{x}}{2} + \\ - & \chbfn{1}{0}{\xione}\chbfn{2}{0}{\xitwo}\nodept{\vect{x}}{3} + - \chbfn{2}{0}{\xione}\chbfn{2}{0}{\xitwo}\nodept{\vect{x}}{4} + \\ - & \chbfn{1}{1}{\xione}\chbfn{1}{0}{\xitwo}\evalat{\delby{\vect{x}}{\xione}} - {1}+ - \chbfn{2}{1}{\xione}\chbfn{1}{0}{\xitwo}\evalat{\delby{\vect{x}}{\xione}} - {2}+ \\ - & \chbfn{1}{1}{\xione}\chbfn{2}{0}{\xitwo}\evalat{\delby{\vect{x}}{\xione}} - {3}+ - \chbfn{2}{1}{\xione}\chbfn{2}{0}{\xitwo}\evalat{\delby{\vect{x}}{\xione}} - {4} + \\ - & \chbfn{1}{0}{\xione}\chbfn{1}{1}{\xitwo}\evalat{\delby{\vect{x}}{\xitwo}} - {1}+ - \chbfn{2}{0}{\xione}\chbfn{1}{1}{\xitwo}\evalat{\delby{\vect{x}}{\xitwo}} - {2} + \\ - & \chbfn{1}{0}{\xione}\chbfn{2}{1}{\xitwo}\evalat{\delby{\vect{x}}{\xitwo}} - {3}+ - \chbfn{2}{0}{\xione}\chbfn{2}{1}{\xitwo}\evalat{\delby{\vect{x}}{\xitwo}} - {4} + \\ - & \chbfn{1}{1}{\xione}\chbfn{1}{1}{\xitwo}\evalat{\deltwoby{\vect{x}} - {\xione}{\xitwo}}{1} + - \chbfn{2}{1}{\xione}\chbfn{1}{1}{\xitwo}\evalat{\deltwoby{\vect{x}} - {\xione}{\xitwo}}{2} + \\ - & \chbfn{1}{1}{\xione}\chbfn{2}{1}{\xitwo}\evalat{\deltwoby{\vect{x}} - {\xione}{\xitwo}}{3} + - \chbfn{2}{1}{\xione}\chbfn{2}{1}{\xitwo}\evalat{ \deltwoby{\vect{x}} - {\xione}{\xitwo}}{4} - \end{split} - \label{eqn:bichxiinterp} -\end{equation} - -As with \onedal \cubicherm elements, the derivatives with respect to $\xi$ in -the \twodal interpolation formula above are expressed as the product of a -nodal \arclen derivative and a scale factor. This is, however, complicated by -the fact that there are now multiple $\xi$ directions at each node. From the -product rule the transformation from an $\xi$ based derivative to an \arclen -based derivative is given by, -\begin{equation} - \delby{\vect{x}}{\xi_{l}}=\delby{\vect{x}}{s_{1}}\delby{s_{1}}{\xi_{l}}+ - \delby{\vect{x}}{s_{2}}\delby{s_{2}}{\xi_{l}} - \label{eqn:xitosproductrule} -\end{equation} - -Now, by definition, the $\nth{l}$ \arclen direction is only a function of the -$\nth{l}$ $\xi$ direction, hence the derivative at local node $\alpha$ is -\begin{equation} - \evalat{\delby{\vect{x}}{\xi_{l}}}{\alpha}=\delby{\nodept{\vect{x}}{ - \fnof{\Delta}{\alpha,e}}}{s_{l}}\esftwo{e}{l} - \label{eqn:xitosbich} -\end{equation} -and the cross-derivative is -\begin{equation} - \evalat{\deltwoby{\vect{x}}{\xione}{\xitwo}}{\alpha}= - \deltwoby{\nodept{\vect{x}}{\fnof{\Delta}{\alpha,e}}}{s_{1}}{s_{2}}\esftwo{e}{1} - \esftwo{e}{2} - \label{eqn:xitosbichcd} -\end{equation} - -Unlike the \onedal \cubicherm case a condition must be placed on -this transformation in order to maintain $C^{1}$ continuity across element -boundaries. - -Consider the line between global nodes $\mathbf{1}$ and $\mathbf{2}$ in the -two \bicubicherm elements shown in \figref{fig:bichelementcont}. -\epstexfigure{svgs/Theory/C1bicubicHermite.eps_tex}{Continuity of two bicubic - Hermite elements.}{Two bicubic Hermite elements (denoted by $\mathit{1}$ and - $\mathit{2}$). The global node numbers are given in boldface, the local node - numbers in normal text and the element scale factors used along each line - are denoted by $\esfone{l}$.}{fig:bichelementcont}{0.35} - -For $C^{1}$ continuity, as opposed to $G^{1}$ continuity, between these -elements the derivative with respect to $\xione$, that is -\delby{\fnof{\vect{x}}{\xitwo}}{\xione}, must be continuous\footnote{For - $C^{1}$ continuity the normals either side of an element boundary must be in - the same direction \emph{and} have the same magnitude. For $G^{1}$ - continuity the normals must only have the same direction.}. The formula for -this derivative in element $\mathit{1}$ along the boundary between elements -$\mathit{1}$ and $\mathit{2}$ is -\begin{equation} - \delby{\fnof{\vect{x}}{1,\xitwo}}{\xione}=\chbfn{0}{1}{\xitwo}\evalat{ - \delby{\vect{x}}{\xione}}{2}+\chbfn{0}{2}{\xitwo}\evalat{ - \delby{\vect{x}}{\xione}}{4}+\chbfn{1}{1}{\xitwo}\evalat{ - \deltwoby{\vect{x}}{\xione}{\xitwo}}{2}+\chbfn{1}{2}{\xitwo}\evalat{ - \deltwoby{\vect{x}}{\xione}{\xitwo}}{4} - \label{eqn:c1contelem1} -\end{equation} -and for element $\mathit{2}$ is -\begin{equation} - \delby{\fnof{\vect{x}}{0,\xitwo}}{\xione}=\chbfn{0}{1}{\xitwo}\evalat{ - \delby{\vect{x}}{\xione}}{1}+\chbfn{0}{2}{\xitwo}\evalat{ - \delby{\vect{x}}{\xione}}{3}+\chbfn{1}{1}{\xitwo}\evalat{ - \deltwoby{\vect{x}}{\xione}{\xitwo}}{1}+\chbfn{1}{2}{\xitwo}\evalat{ - \deltwoby{\vect{x}}{\xione}{\xitwo}}{3} - \label{eqn:c1contelem2} -\end{equation} - -Now substituting \eqnrefs{eqn:xitosbich}{eqn:xitosbichcd} into the -above equations yields for element $\mathit{1}$ -\begin{equation} - \begin{split} - \delby{\fnof{\vect{x}}{1,\xitwo}}{\xione} &= - \chbfn{0}{1}{\xitwo}\delby{\nodept{\vect{x}}{2}}{s_{1}}\esfone{2}+ - \chbfn{0}{2}{\xitwo}\delby{\nodept{\vect{x}}{4}}{s_{1}}\esfone{5}+ \\ - &\quad\chbfn{1}{1}{\xitwo}\deltwoby{\nodept{\vect{x}}{2}}{s_{1}}{s_{2}} - \esfone{2}\esfone{4}+ - \chbfn{1}{2}{\xitwo}\deltwoby{\nodept{\vect{x}}{4}}{s_{1}}{s_{2}} - \esfone{5}\esfone{4} - \end{split} -\end{equation} -and for element $\mathit{2}$ -\begin{equation} - \begin{split} - \delby{\fnof{\vect{x}}{0,\xitwo}}{\xione} &= - \chbfn{0}{1}{\xione}\delby{\nodept{\vect{x}}{1}}{s_{1}}\esfone{3}+ - \chbfn{0}{2}{\xitwo}\delby{\nodept{\vect{x}}{3}}{s_{1}}\esfone{6}+ \\ - &\quad\chbfn{1}{1}{\xitwo}\deltwoby{\nodept{\vect{x}}{1}}{s_{1}}{s_{2}} - \esfone{3}\esfone{4}+ - \chbfn{1}{2}{\xitwo}\deltwoby{\nodept{\vect{x}}{3}}{s_{1}}{s_{2}} - \esfone{6}\esfone{4} - \end{split} -\end{equation} - -Now local node $2$ in element $\mathit{1}$ and local node $1$ in element -$\mathit{2}$ is the same as global node $\mathbf{1}$ and local node $4$ in -element $\mathit{1}$ and local node $3$ in element $\mathit{2}$ is the same as -global node $\mathbf{2}$. Hence for a given $\xitwo$ the condition for $C^{1}$ -continuity across the element boundary is -\begin{multline} - \chbfn{0}{1}{\xitwo}\delby{\nodept{\vect{x}}{\mathbf{1}}}{s_{1}}\esfone{2}+ - \chbfn{0}{2}{\xitwo}\delby{\nodept{\vect{x}}{\mathbf{2}}}{s_{1}}\esfone{5}+ - \chbfn{1}{1}{\xitwo}\deltwoby{\nodept{\vect{x}}{\mathbf{1}}}{s_{1}}{s_{2}} - \esfone{2}\esfone{4} \\ - +\chbfn{1}{2}{\xitwo}\deltwoby{\nodept{\vect{x}}{\mathbf{2}}}{s_{1}}{s_{2}} - \esfone{5}\esfone{4} = \chbfn{0}{1}{\xitwo}\delby{\nodept{\vect{x}} - {\mathbf{1}}}{s_{1}}\esfone{3}+\chbfn{0}{2}{\xitwo}\delby{\nodept{\vect{x}} - {\mathbf{2}}}{s_{1}}\esfone{6} \\ - +\chbfn{1}{1}{\xitwo}\deltwoby{\nodept{\vect{x}}{\mathbf{1}}}{s_{1}}{s_{2}} - \esfone{3}\esfone{4}+\chbfn{1}{2}{\xitwo}\deltwoby{\nodept{\vect{x}} - {\mathbf{2}}}{s_{1}}{s_{2}}\esfone{6}\esfone{4} -\end{multline} -or -\begin{multline} - \pbrac{\esfone{2}-\esfone{3}}\pbrac{\chbfn{0}{1}{\xitwo} - \delby{\nodept{\vect{x}}{\mathbf{1}}}{s_{1}}+\chbfn{1}{1}{\xitwo} - \deltwoby{\nodept{\vect{x}}{\mathbf{1}}}{s_{1}}{s_{2}}\esfone{4}} = \\ - \pbrac{\esfone{6}-\esfone{5}}\pbrac{\chbfn{0}{2}{\xitwo} - \delby{\nodept{\vect{x}}{\mathbf{2}}}{s_{1}}+\chbfn{1}{2}{\xitwo} - \deltwoby{\nodept{\vect{x}}{\mathbf{2}}}{s_{1}}{s_{2}}\esfone{4}} - \label{eqn:bchc1condition} -\end{multline} - -Now by choosing the scale factors to be equal on either side of node -$\mathbf{1}$ and $\mathbf{2}$ (\ie $\esfone{2}=\esfone{3}=\nsfone{\mathbf{1}}$ -and $\esfone{5}=\esfone{6}=\nsfone{\mathbf{2}}$), that is nodal based scale -factors, \eqnref{eqn:bchc1condition} is satisfied for any choice of the scale -factors. Hence nodal scale factors are a sufficient condition to ensure -$C^{1}$ continuity. If it is desired that the scale factors be different -either side of the node then \eqnref{eqn:bchc1condition} must be satisfied to -ensure continuity. - -The choice of the scale factors again determines the $\xi$ -to $s$ spacing. We have a number of choices for the scale factor depending on -whether or not the $\xi$ to $s$ spacing should favour bigger or smaller -elements. One choice which equally favours both elements either side of the -node is for the scale factors to be chosen to be nodally based and equal to the average \arclen on either side -of the node for each $\xi$ direction \ie for the $\nth{l}$ direction -\begin{equation} - \nsftwo{A}{l}=\dfrac{\fnof{s_{l}}{\fnof{A_{\ominus}}{l}}+ - \fnof{s_{l}}{\fnof{A_{\oplus}}{l}}}{2} - \label{eqn:arithmeanarclenscale} -\end{equation} -where $\nsftwo{A}{l}$ is the nodal scale factor in the $\nth{l}$ $\xi$ -direction at global node $A$, $\fnof{A_{\ominus}}{l}$ is the element -immediately preceding (in the \nth{l} direction) node $A$, and -$\fnof{A_{\oplus}}{l}$ is the element immediately after (in the \nth{l} -direction) node $A$ and $\fnof{s_{l}}{e}$ is the \arclen in the \nth{l} $\xi$ -direction from node $A$ in element $e$. This type of scaling is known as -\emph{arithmetic mean \arclen scaling}. - -Other means can be used \ie \emph{geometric mean \arclen scaling} -\begin{equation} - \nsftwo{A}{l}=\sqrt{\fnof{s_{l}}{\fnof{A_{\ominus}}{l}} - \fnof{s_{l}}{\fnof{A_{\oplus}}{l}}} - \label{eqn:geomeanarclenscale} -\end{equation} -or \emph{harmonic mean \arclen scaling} -\begin{equation} - \nsftwo{A}{l}=\dfrac{\fnof{s_{l}}{\fnof{A_{\ominus}}{l}} - \fnof{s_{l}}{\fnof{A_{\oplus}}{l}}}{\fnof{s_{l}}{\fnof{A_{\ominus}}{l}}+ - \fnof{s_{l}}{\fnof{A_{\oplus}}{l}}} - \label{eqn:harmonicmeanarclenscale} -\end{equation} - - - -\pstexfigure{plots/Theory/funcscaling.pstex}{Function scaling.} -{Function scaling.}{fig:functionscaling}{1.5} - -\pstexfigure{plots/Theory/firstdscaling.pstex}{First derivative scaling.} -{First derivative scaling.}{fig:firstdscaling}{1.5} - -\pstexfigure{plots/Theory/seconddscaling.pstex}{Second derivative scaling.} -{Second derivative scaling.}{fig:seconddscaling}{1.5} - - -\subsubsection{Hermite-sector elements} -\label{sec:hselements} - -One problem that arises when using quadrilateral elements (such as -\bicubicherm elements) to describe a surface is that it is impossible to -'close the surface' in three-dimensions whilst maintaining consistent $\xione$ -and $\xitwo$ directions throughout the mesh. This is important as $C^{1}$ -continuity requires either consistent $\xi$ directions or a transformation at -each node to take into account the inconsistent directions \cite{petera:1994}. - -One solution to this problem is to \emph{collapse} a \bicubicherm element. -This entails placing one of the four local nodes of the element at the same -geometric location as another local node of the element and results in a -triangular element from which it is possible to close the surface. There are -two main problems with this solution. The first is that one of the two $\xi$ -directions at the collapsed node is undefined. The second is that the -distance between the two nodes at the same location is zero. Numerical -problems can result from this zero distance. An alternative strategy has -been developed in which special elements, called ``Hermite-sector'' -elements\index{Hermite-sector elements}, are used to close a \bicubicherm -surface in three-dimensions. There are two types of elements depending on -whether the $\xi$ (or $s$) directions come together at local node one or local -node three. These two elements are shown in \figref{fig:hermitesectors}. - -\epstexfigure{svgs/Theory/hermitesectors.eps_tex}{Hermite-sector elements.} -{Hermite-sector elements. (a) Apex node one element. (b) Apex node three - element.}{fig:hermitesectors}{0.3} - -From \figref{fig:hermitesectors} it can be seen that the $s_{2}$ direction is -not unique at the apex nodes. This gives us two choices for the interpolation -within the element: ignore the $s_{2}$ derivative when interpolating or set -the $s_{2}$ derivative identically to zero. - -\textbf{Ignore $s_{2}$ apex derivative}: For this case it can be seen from -\figref{fig:hermitesectors} that the interpolation in the $\xione$ direction -is just the standard cubic Hermite interpolation. The interpolation in the -$\xitwo$ direction is now a little different in that the nodal \arclen -derivative has been dropped as it is no longer defined at the apex node. For -an apex node one element shown in \figref{fig:hermitesectors}(a) the -interpolation for the line between local node one and local node $n$ is now -quadratic and is given by -\begin{equation} - \fnof{\vect{x}}{\xitwo}=\hsonebfn{1}{\xitwo}\nodept{\vect{x}}{1}+ - \hsonebfn{2}{\xitwo}\nodept{\vect{x}}{n}+ - \hsonebfn{3}{\xitwo}\evalat{\delby{\vect{x}}{\xitwo}}{n} - \label{eqn:hsapex1xiinterp} -\end{equation} -with the basis functions given by -\index{quadratic Hermite basis!apex node one!basis functions formulae} -\begin{equation} - \begin{split} - \hsonebfn{1}{\xi}&=\pbrac{\xi-1}^{2} \\ - \hsonebfn{2}{\xi}&=2\xi-\xi^{2} \\ - \hsonebfn{3}{\xi}&=\xi^{2}-\xi - \end{split} - \label{eqn:hsapex1bfuns} -\end{equation} - -For the apex node three element shown in \figref{fig:hermitesectors}(b) the -interpolation for the line connecting local node $n$ with local node three is -given by -\begin{equation} - \fnof{\vect{x}}{\xitwo}=\hsthreebfn{1}{\xitwo}\nodept{\vect{x}}{3}+ - \hsthreebfn{2}{\xitwo}\nodept{\vect{x}}{n}+ - \hsthreebfn{3}{\xitwo}\evalat{\delby{\vect{x}}{\xitwo}}{n} - \label{eqn:hsapex3xiinterp} -\end{equation} -with the basis functions given by -\index{quadratic Hermite basis!apex node three!basis functions formulae} -\begin{equation} - \begin{split} - \hsthreebfn{1}{\xi}&=\xi^{2} \\ - \hsthreebfn{2}{\xi}&=1-\xi^{2} \\ - \hsthreebfn{3}{\xi}&=\xi-\xi^{2} - \end{split} - \label{eqn:hsapex3Bfuns} -\end{equation} - -The full interpolation formula for the sector element can then be found by -taking the tensor product of the interpolation in the $\xione$ direction, -given in \eqnref{eqn:chxiinterpolation}, with the interpolation in the -$\xitwo$ direction (given by either Equations \bref{eqn:hsapex1xiinterp} or -\bref{eqn:hsapex3xiinterp}). The interpolation formula can be converted from -nodal $\xi$ derivatives to nodal \arclen derivatives using the procedure -outlined for the \bicubicherm case. For example, the interpolation formulae for -an apex node one element is \index{Hermite-sector basis!apex node one!\arclen - interpolation formula} -\begin{equation} - \begin{split} - \fnof{\vect{x}}{\xione,\xitwo} &= - \hsonebfn{1}{\xitwo}\nodept{\vect{x}}{1}+\chbfn{1}{0}{\xione}\hsonebfn{2} - {\xitwo}\nodept{\vect{x}}{2}+\chbfn{2}{0}{\xione}\hsonebfn{2}{\xitwo} - \nodept{\vect{x}}{3} + \\ - & \chbfn{1}{1}{\xione}\hsonebfn{2}{\xitwo}\delby{\nodept{\vect{x}}{2}}{s_{1}} - \nsftwo{2}{1}+\chbfn{2}{1}{\xione}\hsonebfn{2}{\xitwo}\delby{\nodept{\vect{x}} - {3}}{s_{1}}\nsftwo{3}{1} + \\ - & \chbfn{1}{0}{\xione}\hsonebfn{3}{\xitwo}\delby{\nodept{\vect{x}}{2}}{s_{2}} - \nsftwo{2}{2} + \chbfn{2}{0}{\xione}\hsonebfn{3}{\xitwo} - \delby{\nodept{\vect{x}}{3}}{s_{2}}\nsftwo{3}{2} + \\ - & \chbfn{1}{1}{\xione}\hsonebfn{3}{\xitwo}\deltwoby{\nodept{\vect{x}}{2}} - {s_{1}}{s_{2}}\nsftwo{2}{1}\nsftwo{2}{2} + - \chbfn{2}{1}{\xione}\hsonebfn{3}{\xitwo}\deltwoby{\nodept{\vect{x}}{3}} - {s_{1}}{s_{2}}\nsftwo{3}{1}\nsftwo{3}{2} - \end{split} - \label{eqn:hsapex1sinterp} -\end{equation} - -Care must be taken when using Hermite-sector elements for rapidly changing -surfaces. Consider an apex node one element with undefined $s_{2}$ apex -derivatives. The rate of change of $\vect{x}$ with respect to -$\xione$ along the line from node one to node three (\ie $\xione=1$) is -\begin{equation} - \begin{split} - \delby{\fnof{\vect{x}}{1,\xitwo}}{\xione} &= \hsonebfn{2}{\xitwo}\delby{ - \nodept{\vect{x}}{3}}{s_{1}}\nsftwo{3}{1}+\hsonebfn{3}{\xitwo}\deltwoby{ - \nodept{\vect{x}}{3}}{s_{1}}{s_{2}}\nsftwo{3}{1}\nsftwo{3}{2} \\ - &= \nsftwo{3}{1}\pbrac{\pbrac{2\xitwo-\xitwo^{2}}\delby{\nodept{\vect{x}}{3}} - {s_{1}}+\pbrac{\xitwo^{2}-\xitwo}\deltwoby{\nodept{\vect{x}}{3}}{s_{1}}{s_{2}} - \nsftwo{3}{2}} - \end{split} -\end{equation} - -Taking the dot product of $\delby{\fnof{\vect{x}}{1,\xitwo}}{\xione}$ with -$\delby{\nodept{\vect{x}}{3}}{s_{1}}$ gives -\begin{equation} - \dotprod{\delby{\fnof{\vect{x}}{1,\xitwo}}{\xione}}{\delby{\nodept{\vect{x}}{3}} - {s_{1}}} = \nsftwo{3}{1} - \pbrac{\pbrac{2\xitwo-\xitwo^{2}}\dotprod{\delby{\nodept{\vect{x}}{3}}{s_{1}}} - {\delby{\nodept{\vect{x}}{3}}{s_{1}}}+\pbrac{\xitwo^{2}-\xitwo}\nsftwo{3}{2} - \dotprod{\deltwoby{\nodept{\vect{x}}{3}}{s_{1}}{s_{2}}} - {\delby{\nodept{\vect{x}}{3}}{s_{1}}}} - \label{eqn:hsonedirectiondotprod} -\end{equation} - -The normality constraint for \arclen derivatives means that -$\dotprod{\delby{\nodept{\vect{x}}{3}}{s_{1}}}{\delby{\nodept{\vect{x}}{3}} - {s_{1}}}=1$ and thus the right hand side of -\eqnref{eqn:hsonedirectiondotprod} divided by $\nsftwo{3}{1}$ (\ie normalised -by $\nsftwo{3}{1}$) is the quadratic -\begin{equation*} - \pbrac{2\xitwo-\xitwo^{2}}+\pbrac{\xitwo^{2}-\xitwo}\nsftwo{3}{2} - \dotprod{\deltwoby{\nodept{\vect{x}}{3}}{s_{1}}{s_{2}}}{\delby{\nodept{\vect{x}} - {3}}{s_{1}}} -\end{equation*} -or -\begin{equation*} - \pbrac{\nsftwo{3}{2}\dotprod{\deltwoby{\nodept{\vect{x}}{3}}{s_{1}}{s_{2}}} - {\delby{\nodept{\vect{x}}{3}}{s_{1}}} -1}\xitwo^{2}+ - \pbrac{2-\nsftwo{3}{2}\dotprod{\deltwoby{\nodept{\vect{x}}{3}}{s_{1}}{s_{2}}} - {\delby{\nodept{\vect{x}}{3}}{s_{1}}}}\xitwo - \label{eqn:hsonedirectionpolynomial} -\end{equation*} - -This quadratic is $1$ at $\xitwo=1$ and always has a root at $\xitwo=0$. -Consider the case of this quadratic having its second root in the interval -$(0,1)$. This would mean that at some point in the interval $(0,1)$ the dot -product of \delby{\fnof{\vect{x}}{1,\xitwo}}{\xione} and -\delby{\nodept{\vect{x}}{3}}{s_{1}} would go from zero to negative and then -positive as $\xitwo$ changed from $0$ to $1$ \ie the angle between -$\delby{\fnof{\vect{x}}{1,\xitwo}}{\xione}$ and -$\delby{\nodept{\vect{x}}{3}}{s_{1}}$ would, at some stage, be greater than -ninety degrees. As the direction of the normal to the surface along the line -between local node one and three is given by the cross product of -$\delby{\fnof{\vect{x}}{1,\xitwo}}{\xione}$ and -$\delby{\fnof{\vect{x}}{1,\xitwo}}{\xitwo}$ then, if the quadratic became -sufficiently negative, the normal to the surface could reverse direction from -an outward to an inward normal as $\xitwo$ changed from $0$ to $1$. This is -clearly undesirable. In fact even if the quadratic is only slightly negative -the resulting surface would be grossly deformed. - -To avoid these effects the second root of the quadratic must be outside the -interval $(0,1)$. From the quadratic formula the conditions for this are -\begin{equation} - \dfrac{\nsftwo{3}{2}\dotprod{\deltwoby{\nodept{\vect{x}}{3}}{s_{1}}{s_{2}}} - {\delby{\nodept{\vect{x}}{3}}{s_{1}}}-2}{\nsftwo{3}{2}\dotprod{ - \deltwoby{\nodept{\vect{x}}{3}}{s_{1}}{s_{2}}}{\delby{\nodept{\vect{x}}{3}} - {s_{1}}}-1}<0 -\end{equation} -and -\begin{equation} - \dfrac{\nsftwo{3}{2}\dotprod{\deltwoby{\nodept{\vect{x}}{3}}{s_{1}}{s_{2}}} - {\delby{\nodept{\vect{x}}{3}}{s_{1}}}-2}{\nsftwo{3}{2}\dotprod{ - \deltwoby{\nodept{\vect{x}}{3}}{s_{1}}{s_{2}}}{\delby{\nodept{\vect{x}}{3}} - {s_{1}}}-1}>1 -\end{equation} -that is (for the line from local node one to local node $n$) -\index{Hermite-sector basis!apex node one!cross-derivative condition} -\begin{equation} - \dotprod{\deltwoby{\nodept{\vect{x}}{n}}{s_{1}}{s_{2}}}{\delby{\nodept{\vect{x}} - {n}}{s_{1}}}<\dfrac{2}{\nsftwo{n}{2}} -\end{equation} - -The simplest way to interpret this constraint is that if the element is large -(\ie $\nsftwo{n}{2}$ is large) then $\dotprod{\deltwoby{\nodept{\vect{x}}{n}} - {s_{1}}{s_{2}}}{\delby{\nodept{\vect{x}}{n}}{s_{1}}}$ must be small. The -simplest way for this to happen is to ensure the magnitude of the components of -$\deltwoby{\nodept{\vect{x}}{n}}{s_{1}}{s_{2}}$ are small (or of opposite sign to -the comparable components of $\delby{\nodept{\vect{x}}{n}}{s_{1}}$). - -The equivalent interpolation formula to \eqnref{eqn:hsapex1sinterp} for an -apex node three Hermite-sector element is -\index{Hermite-sector basis!apex node three!\arclen interpolation formula} -\begin{equation} - \begin{split} - \fnof{\vect{x}}{\xione,\xitwo} &= - \chbfn{1}{0}{\xione}\hsthreebfn{2}{\xitwo}\nodept{\vect{x}}{1}+ - \chbfn{2}{0}{\xione}\hsthreebfn{2}{\xitwo}\nodept{\vect{x}}{2}+ - \hsthreebfn{1}{\xitwo}\nodept{\vect{x}}{3}+ \\ - & \chbfn{1}{1}{\xione}\hsthreebfn{2}{\xitwo}\delby{\nodept{\vect{x}}{1}} - {s_{1}}\nsftwo{1}{1}+\chbfn{2}{1}{\xione}\hsthreebfn{2}{\xitwo} - \delby{\nodept{\vect{x}}{2}}{s_{1}}\nsftwo{2}{1} + \\ - & \chbfn{1}{0}{\xione}\hsthreebfn{3}{\xitwo}\delby{\nodept{\vect{x}}{1}} - {s_{2}}\nsftwo{1}{2}+\chbfn{2}{0}{\xione}\hsthreebfn{3}{\xitwo} - \delby{\nodept{\vect{x}}{2}}{s_{2}}\nsftwo{2}{2} + \\ - & \chbfn{1}{1}{\xione}\hsthreebfn{3}{\xitwo}\deltwoby{\nodept{\vect{x}}{1}} - {s_{1}}{s_{2}}\nsftwo{1}{1}\nsftwo{1}{2} + - \chbfn{2}{1}{\xione}\hsthreebfn{3}{\xitwo}\deltwoby{\nodept{\vect{x}}{2}} - {s_{1}}{s_{2}}\nsftwo{2}{1}\nsftwo{2}{2} - \end{split} - \label{eqn:hsapex3sinterp} -\end{equation} -and the equivalent constraint for apex node three Hermite-sector elements (for -the line from local node $n$ to local node three) is -\index{Hermite-sector basis!apex node three!cross-derivative condition} -\begin{equation} - \dotprod{\deltwoby{\nodept{\vect{x}}{n}}{s_{1}}{s_{2}}}{\delby{\nodept{\vect{x}} - {n}}{s_{1}}}>\dfrac{-2}{\nsftwo{n}{2}} -\end{equation} - -\textbf{Zero $s_{2}$ apex derivative}: For this case the sector basis -functions are just the cubic Hermite basis functions. The corresponding -interpolation formulae for an apex node one element is hence -\begin{equation} - \begin{split} - \fnof{\vect{x}}{\xione,\xitwo} &= \chbfn{1}{0}{\xitwo} - \nodept{\vect{x}}{1} + - \chbfn{1}{0}{\xione}\chbfn{2}{0}{\xitwo}\nodept{\vect{x}}{2} + - \chbfn{2}{0}{\xione}\chbfn{2}{0}{\xitwo}\nodept{\vect{x}}{3} + \\ - & \chbfn{1}{1}{\xione}\chbfn{2}{0}{\xitwo}\delby{\nodept{\vect{x}}{2}}{s_{1}} - \nsftwo{2}{1}+ - \chbfn{2}{1}{\xione}\chbfn{2}{0}{\xitwo}\delby{\nodept{\vect{x}}{3}}{s_{1}} - \nsftwo{3}{1} + \\ - & \chbfn{1}{0}{\xione}\chbfn{2}{1}{\xitwo}\delby{\nodept{\vect{x}}{2}}{s_{2}} - \nsftwo{2}{2}+ - \chbfn{2}{0}{\xione}\chbfn{2}{1}{\xitwo}\delby{\nodept{\vect{x}}{2}}{s_{2}} - \nsftwo{3}{2} + \\ - & \chbfn{1}{1}{\xione}\chbfn{2}{1}{\xitwo}\deltwoby{\nodept{\vect{x}}{2}} - {s_{1}}{s_{2}}\nsftwo{2}{1}\nsftwo{2}{2} + - \chbfn{2}{1}{\xione}\chbfn{2}{1}{\xitwo}\deltwoby{\nodept{\vect{x}}{3}} - {s_{1}}{s_{2}}\nsftwo{3}{1}\nsftwo{3}{2} - \end{split} -\end{equation} -and the condition to avoid reversal of the normal is -\begin{equation} - \dotprod{\deltwoby{\nodept{\vect{x}}{n}}{s_{1}}{s_{2}}}{\delby{\nodept{\vect{x}} - {n}}{s_{1}}}<\dfrac{3}{\nsftwo{n}{2}} -\end{equation} -and for the apex node three element the interpolation formula is -\begin{equation} - \begin{split} - \fnof{\vect{x}}{\xione,\xitwo} &= - \chbfn{1}{0}{\xione}\chbfn{2}{0}{\xitwo}\nodept{\vect{x}}{1} + - \chbfn{2}{0}{\xione}\chbfn{2}{0}{\xitwo}\nodept{\vect{x}}{2} + - \chbfn{2}{0}{\xitwo}\nodept{\vect{x}}{3} + \\ - & \chbfn{1}{1}{\xione}\chbfn{1}{0}{\xitwo}\delby{\nodept{\vect{x}}{1}}{s_{1}} - \nsftwo{1}{1}+ - \chbfn{2}{1}{\xione}\chbfn{1}{0}{\xitwo}\delby{\nodept{\vect{x}}{2}}{s_{1}} - \nsftwo{2}{1} + \\ - & \chbfn{1}{0}{\xione}\chbfn{1}{1}{\xitwo}\delby{\nodept{\vect{x}}{1}}{s_{2}} - \nsftwo{1}{2}+ - \chbfn{2}{0}{\xione}\chbfn{1}{1}{\xitwo}\delby{\nodept{\vect{x}}{2}}{s_{2}} - \nsftwo{2}{2} + \\ - & \chbfn{1}{1}{\xione}\chbfn{1}{1}{\xitwo}\deltwoby{\nodept{\vect{x}}{1}} - {s_{1}}{s_{2}}\nsftwo{1}{1}\nsftwo{1}{2} + - \chbfn{2}{1}{\xione}\chbfn{1}{1}{\xitwo}\deltwoby{\nodept{\vect{x}}{2}} - {s_{1}}{s_{2}}\nsftwo{2}{1}\nsftwo{2}{2} - \end{split} -\end{equation} -with a condition of -\begin{equation} - \dotprod{\deltwoby{\nodept{\vect{x}}{n}}{s_{1}}{s_{2}}}{\delby{\nodept{\vect{x}} - {n}}{s_{1}}}>\dfrac{-3}{\nsftwo{n}{2}} -\end{equation} - -Although the Hermite-sector basis function in which the $s_{2}$ apex node -derivatives are identically zero have an increased limit on the -cross-derivative constraints (a right hand side numerator of $\pm 3$ instead -of $\pm 2$) they have the problem that as all derivatives vanish at the apex -any interpolated function has a zero Hessian at the apex. As this can cause -numerical problems the Hermite-sector basis functions which have an undefined -$s_{2}$ derivative are prefered. - - -\subsection{Simplex Basis Functions} - -Simplex basis function and its derivatives are evaluated with respect to external $\vect{\xi}$ coordinates. - -For Simplex line elements there are two area coordinates which are a function of $\xi_{1}$ \ie -\begin{align} - L_{1} &= 1 - \xi_{1} \\ - L_{2} &= \xi_{1} - 1 -\end{align} - -The derivatives wrt to external coordinates are then given by -\begin{align} - \delby{\vect{\sbfnsymb{}}}{\xi_{1}} &= \delby{\vect{\sbfnsymb{}}}{L_{2}}-\delby{\vect{\sbfnsymb{}}}{L_{1}} \\ - \deltwosqby{\vect{\sbfnsymb{}}}{\xi_{1}} &= \deltwosqby{\vect{\sbfnsymb{}}}{L_{1}}- - 2\deltwoby{\vect{\sbfnsymb{}}}{L_{1}}{L_{2}}+\deltwosqby{\vect{\sbfnsymb{}}}{L_{2}} -\end{align} - -For Simplex triangle elements there are three area coordinates which are a function of $\xi_{1}$ and -$\xi_{2}$ \ie -\begin{align} - L_{1} &= 1 - \xi_{1} \\ - L_{2} &= 1 - \xi_{2} \\ - L_{3} &= \xi_{1} + \xi_{2} - 1 -\end{align} - -The derivatives wrt to external coordinates are then given by -\begin{align} - \delby{\vect{\sbfnsymb{}}}{\xi_{1}} &= \delby{\vect{\sbfnsymb{}}}{L_{3}}-\delby{\vect{\sbfnsymb{}}}{L_{1}} \\ - \delby{\vect{\sbfnsymb{}}}{\xi_{2}} &= \delby{\vect{\sbfnsymb{}}}{L_{3}}-\delby{\vect{\sbfnsymb{}}}{L_{2}} \\ - \deltwosqby{\vect{\sbfnsymb{}}}{\xi_{1}} &= \deltwosqby{\vect{\sbfnsymb{}}}{L_{1}}- - 2\deltwoby{\vect{\sbfnsymb{}}}{L_{1}}{L_{3}}+\deltwosqby{\vect{\sbfnsymb{}}}{L_{3}} \\ - \deltwosqby{\vect{\sbfnsymb{}}}{\xi_{2}} &= \deltwosqby{\vect{\sbfnsymb{}}}{L_{2}}- - 2\deltwoby{\vect{\sbfnsymb{}}}{L_{2}}{L_{3}}+\deltwosqby{\vect{\sbfnsymb{}}}{L_{3}} \\ - \deltwoby{\vect{\sbfnsymb{}}}{\xi_{1}}{\xi_{2}} &= \deltwosqby{\vect{\sbfnsymb{}}}{L_{3}}- - \deltwoby{\vect{\sbfnsymb{}}}{L_{1}}{L_{3}}-\deltwoby{\vect{\sbfnsymb{}}}{L_{2}}{L_{3}}+ - \deltwoby{\vect{\sbfnsymb{}}}{L_{1}}{L_{2}} -\end{align} - -For Simplex tetrahedral elements there are four area coordinates which are a -function of $\xi_{1}$, $\xi_{2}$ and $\xi_{3}$ \ie -\begin{align} - L_{1} &= 1 - \xi_{1} \\ - L_{2} &= 1 - \xi_{2} \\ - L_{3} &= 1 - \xi_{3} \\ - L_{4} &= \xi_{1} + \xi_{2} + \xi_{3} - 2 -\end{align} - -The derivatives wrt to external coordinates are then given by -\begin{align} - \delby{\vect{\sbfnsymb{}}}{\xi_{1}} &= \delby{\vect{\sbfnsymb{}}}{L_{4}}-\delby{\vect{\sbfnsymb{}}}{L_{1}} \\ - \delby{\vect{\sbfnsymb{}}}{\xi_{2}} &= \delby{\vect{\sbfnsymb{}}}{L_{4}}-\delby{\vect{\sbfnsymb{}}}{L_{2}} \\ - \delby{\vect{\sbfnsymb{}}}{\xi_{3}} &= \delby{\vect{\sbfnsymb{}}}{L_{4}}-\delby{\vect{\sbfnsymb{}}}{L_{3}} \\ - \deltwosqby{\vect{\sbfnsymb{}}}{\xi_{1}} &= \deltwosqby{\vect{\sbfnsymb{}}}{L_{1}}- - 2\deltwoby{\vect{\sbfnsymb{}}}{L_{1}}{L_{4}}+\deltwosqby{\vect{\sbfnsymb{}}}{L_{4}} \\ - \deltwosqby{\vect{\sbfnsymb{}}}{\xi_{2}} &= \deltwosqby{\vect{\sbfnsymb{}}}{L_{2}}- - 2\deltwoby{\vect{\sbfnsymb{}}}{L_{2}}{L_{4}}+\deltwosqby{\vect{\sbfnsymb{}}}{L_{4}} \\ - \deltwosqby{\vect{\sbfnsymb{}}}{\xi_{3}} &= \deltwosqby{\vect{\sbfnsymb{}}}{L_{3}}- - 2\deltwoby{\vect{\sbfnsymb{}}}{L_{3}}{L_{4}}+\deltwosqby{\vect{\sbfnsymb{}}}{L_{4}} \\ - \deltwoby{\vect{\sbfnsymb{}}}{\xi_{1}}{\xi_{2}} &= \deltwosqby{\vect{\sbfnsymb{}}}{L_{4}}- - \deltwoby{\vect{\sbfnsymb{}}}{L_{1}}{L_{4}}-\deltwoby{\vect{\sbfnsymb{}}}{L_{2}}{L_{4}}+ - \deltwoby{\vect{\sbfnsymb{}}}{L_{1}}{L_{2}} \\ - \deltwoby{\vect{\sbfnsymb{}}}{\xi_{1}}{\xi_{3}} &= \deltwosqby{\vect{\sbfnsymb{}}}{L_{4}}- - \deltwoby{\vect{\sbfnsymb{}}}{L_{1}}{L_{4}}-\deltwoby{\vect{\sbfnsymb{}}}{L_{3}}{L_{4}}+ - \deltwoby{\vect{\sbfnsymb{}}}{L_{1}}{L_{3}} \\ - \deltwoby{\vect{\sbfnsymb{}}}{\xi_{2}}{\xi_{3}} &= \deltwosqby{\vect{\sbfnsymb{}}}{L_{4}}- - \deltwoby{\vect{\sbfnsymb{}}}{L_{2}}{L_{4}}-\deltwoby{\vect{\sbfnsymb{}}}{L_{3}}{L_{4}}+ - \deltwoby{\vect{\sbfnsymb{}}}{L_{2}}{L_{3}} \\ - \delthreeby{\vect{\sbfnsymb{}}}{\xi_{1}}{\xi_{2}}{\xi_{3}} &= \delthreecuby{\vect{\sbfnsymb{}}}{L_{4}}- - \deldeltwoby{\vect{\sbfnsymb{}}}{L_{1}}{L_{4}}-\deldeltwoby{\vect{\sbfnsymb{}}}{L_{2}}{L_{4}}- - \deldeltwoby{\vect{\sbfnsymb{}}}{L_{3}}{L_{4}}+ \\ - &\delthreeby{\vect{\sbfnsymb{}}}{L_{1}}{L_{2}}{L_{4}}+\delthreeby{\vect{\sbfnsymb{}}}{L_{1}}{L_{3}}{L_{4}}+ - \delthreeby{\vect{\sbfnsymb{}}}{L_{2}}{L_{3}}{L_{4}}-\delthreeby{\vect{\sbfnsymb{}}}{L_{1}}{L_{2}}{L_{3}} -\end{align} - -\section{Tensor Analysis} -\subsection{Base vectors} - -Now, if we have a vector, $\vect{v}$ we can write -\begin{equation} - \vect{v}=v^{i}\vect{g}_{i} -\end{equation} -where $v^{i}$ are the components of the contravariant vector, and -$\vect{g}_{i}$ are the covariant base vectors. - -Similarly, the vector $\vect{v}$ can also be written as -\begin{equation} - \vect{v}=v_{i}\vect{g}^{i} -\end{equation} -where $v_{i}$ are the components of the covariant vector, and -$\vect{g}^{i}$ are the contravariant base vectors. - -We now note that -\begin{equation} - \vect{v}=v^{i}\vect{g}_{i}=v^{i}\sqrt{g_{ii}}\hat{\vect{g}_{i}} -\end{equation} -where $v^{i}\sqrt{g_{ii}}$ are the physical components of the vector and -$\hat{\vect{g}_{i}}$ are the unit vectors given by -\begin{equation} - \hat{\vect{g}_{i}}=\dfrac{\vect{g}_{i}}{\sqrt{g_{ii}}} -\end{equation} - -\subsection{Metric Tensors} -\label{sec:metric tensors} - -Metric tensors are the inner product of base vectors. If $\vect{g}_{i}$ are the -covariant base vectors then the covariant metric tensor is given by -\begin{equation} - g_{ij}=\dotprod{\vect{g}_{i}}{\vect{g}_{j}} -\end{equation} - -Similarily if $\vect{g}^{i}$ are the contravariant base vectors then the -contravariant metric tensor is given by -\begin{equation} - g^{ij}=\dotprod{\vect{g}^{i}}{\vect{g}^{j}} -\end{equation} - -We can also form a mixed metric tensor from the dot product of a contravariant -and a covariant base vector \ie -\begin{equation} - g^{i}_{.j}=\dotprod{\vect{g}^{i}}{\vect{g}_{j}} -\end{equation} -and -\begin{equation} - g_{i}^{.j}=\dotprod{\vect{g}_{i}}{\vect{g}^{j}} -\end{equation} - -Note that for mixed tensors the ``.'' indicates the order of the index \ie -$g^{i}_{.j}$ indicates that the first index is contravariant and the second -index is covariant whereas $g_{i}^{.j}$ indicates that the first index is -covariant and the second index is contravariant. - -If the base vectors are all mutually orthogonal and constant then -$\vect{g}_{i}=\vect{g}^{i}$ and $g_{ij}=g^{ij}$. - -The metric tensors generalise (Euclidean) distance \ie -\begin{equation} - ds^{2}=g_{ij}dx^{i}dx^{j} -\end{equation} - -Note that multiplying by the covariant metric tensor lowers indices \ie -\begin{equation} - \begin{split} - \vect{A}_{i} &= g_{ij}\vect{A}^{j} \\ - A_{ij} &= g_{ik}g_{jl}A^{kl} = g_{jk}A_{i}^{.k} = g_{ik}A^{k}_{.j} - \end{split} -\end{equation} -and that multiplying by the contravariant metric tensor raises indices \ie -\begin{equation} - \begin{split} - \vect{A}^{i} &= g^{ij}\vect{A}_{j} \\ - A^{ij} &= g^{ik}g^{jl}A_{kl} = g^{ik}A_{k}^{.j} = g^{jk}A^{i}_{.k} - \end{split} -\end{equation} -and for the mixed tensors -\begin{equation} - \begin{split} - A_{i}^{.j} &= g^{jk}A_{ik} = g_{ik}A^{kj} \\ - A^{i}_{.j} &= g^{ik}A_{kj} = g_{jk}A^{ik} \\ - \end{split} -\end{equation} - -\subsection{Transformations} - -The transformation rules for tensors in going from a $\vect{\nu}$ coordinate -system to a $\vect{\xi}$ coordinate system are as follows: - - -For a covariant vector (a rank (0,1) tensor) -\begin{equation} - {\tilde{a}}_{i}=\delby{\nu^{a}}{\xi^{i}}a_{a} -\end{equation} - -For a contravariant vector (a rank (1,0) tensor) -\begin{equation} - {\tilde{a}}^{i}=\delby{\xi^{i}}{\nu^{a}}a^{a} -\end{equation} - -For a covariant tensor (a rank (0,2) tensor) -\begin{equation} - {\tilde{A}}_{ij}=\delby{\nu^{a}}{\xi^{i}}\delby{\nu^{b}}{\xi^{j}}A_{ab} -\end{equation} - -For a contravariant tensor (a rank (2,0) tensor) -\begin{equation} - {\tilde{A}}^{ij}=\delby{\xi^{i}}{\nu^{a}}\delby{\xi^{j}}{\nu^{b}}A^{ab} -\end{equation} - -and for Mixed tensors (rank (1,1) tensors) -\begin{equation} - {\tilde{A}}^{i}_{.j}=\delby{\xi^{i}}{\nu^{a}}\delby{\nu^{b}}{\xi^{j}}A^{a}_{.b} -\end{equation} -and -\begin{equation} - {\tilde{A}}_{i}^{.j}=\delby{\nu^{a}}{\xi^{i}}\delby{\xi^{j}}{\nu^{b}}A_{a}^{.b} -\end{equation} - -\subsection{Derivatives} -\label{subsec:function derivatives} - -\subsubsection{Scalars} - -We note that a scalar quantity $\fnof{u}{\vect{\xi}}$ has derivatives -\begin{equation} - \delby{u}{\xi^{i}}=\partialderiv{u}{i} -\end{equation} - -Or more formally, the covariant derivative ($\covarderiv{\cdot}{\cdot}$) of a -rank 0 tensor $u$ is -\begin{equation} - \covarderiv{u}{i}=\delby{u}{\xi^{i}}=\partialderiv{u}{i} -\end{equation} - -\subsubsection{Vectors} - -The derivatives of a vector $\vect{v}$ are given by -\begin{equation} - \begin{split} - \delby{\vect{v}}{\xi^{i}} &= - \delby{}{\xi^{i}}\pbrac{v^{k}\vect{g}_{k}} \\ - &= \delby{v^{k}}{\xi^{i}}\vect{g}_{k}+v^{k}\delby{\vect{g}_{k}}{\xi^{i}} \\ - &= \partialderiv{v^{k}}{i}\vect{g}_{k}+v^{k}\partialderiv{\vect{g}_{k}}{i} - \end{split} -\end{equation} - -Now introducing the notation -\begin{equation} - \christoffelsecond{i}{j}{k} = \dotprod{\vect{g}^{i}}{\delby{\vect{g}_{j}}{x^{k}}} -\end{equation} -where $\christoffelsecond{i}{j}{k}$ are the Christoffel symbols of the second -kind. - -Note that the Christoffel symbols of the first kind are given by -\begin{equation} - \christoffelfirst{i}{j}{k} = \dotprod{\vect{g}_{i}}{\delby{\vect{g}_{j}}{x^{k}}} -\end{equation} - -Note that -\begin{equation} - \begin{split} - \christoffel{i}{j}{k} &= \dotprod{\vect{g}^{i}}{\partialderiv{\vect{g}_{j}}{k}} \\ - &=\dotprod{\vect{g}^{i}}{\christoffelsecond{l}{j}{k}\vect{g}_{l}} \\ - &= \christoffel{i}{j}{l}g^{i}_{.l} - \end{split} -\end{equation} - -The Christoffel symbols of the first kind are also given by -\begin{equation} - \christoffelfirst{i}{j}{k}=\frac{1}{2}\pbrac{\delby{g_{ij}}{\xi^{k}}+\delby{g_{ik}}{\xi^{j}}-\delby{g_{jk}}{\xi^{i}}} -\end{equation} -and that Christoffel symbols of the second kind are given by -\begin{equation} - \begin{split} - \christoffelsecond{i}{j}{k} &= g^{il}\christoffelfirst{l}{j}{k} \\ - &= \frac{1}{2}g^{il}\pbrac{\delby{g_{lj}}{\xi^{k}}+\delby{g_{lk}}{\xi^{j}}-\delby{g_{jk}}{\xi^{l}}} - \end{split} -\end{equation} - -Note that Christoffel symbols are not tensors and the have the following -transformation laws from $\vect{\nu}$ to $\vect{\xi}$ coordinates -\begin{align} - \christoffelfirst{i}{j}{k} &= - \christoffelfirst{a}{b}{c}\delby{\nu^{b}}{\xi^{j}}\delby{\nu^{c}}{\xi^{k}}\delby{\nu^{a}}{\xi^{i}}+ - g_{ab}\delby{\nu^{c}}{\xi^{i}}\deltwoby{\nu^{c}}{\xi^{j}}{\xi^{k}} \\ - \christoffelsecond{i}{j}{k} &= \christoffelsecond{a}{b}{c}\delby{\xi^{i}}{\nu^{a}}\delby{\nu^{b}}{\xi^{k}}\delby{\nu^{c}}{\xi^{j}}+ - \delby{\xi^{i}}{\nu^{a}}\deltwoby{\nu^{a}}{\xi^{j}}{\xi^{k}} \\ -\end{align} - -We can now write (BELOW SEEMS WRONG - CHECK) -\begin{equation} - \begin{split} - \partialderiv{\vect{v}}{i}&=\partialderiv{v^{k}}{i}\vect{g}_{k}+\christoffel{k}{i}{j}v^{j}\vect{g}_{j}\\ - &=\partialderiv{v^{k}}{i}\vect{g}_{k}+\christoffel{j}{i}{k}v^{k}\vect{g}_{k}\\ - &=\pbrac{\partialderiv{v^{k}}{i}+\christoffel{j}{i}{k}v^{k}}\vect{g}_{k}\\ - &=\covarderiv{v^{k}}{i}\vect{g}_{k} - \end{split} -\end{equation} -where $\covarderiv{v^{k}}{i}$ is the covariant derivative of $v^{k}$ . - -The covariant derivative of a contravariant (rank (0,1)) tensor $v^{k}$ is -\begin{equation} - \covarderiv{v^{k}}{i} =\partialderiv{v^{k}}{i}+\christoffel{k}{i}{j}v^{j} -\end{equation} -and the covariant derivative of a covariant tensor (rank (1,0)) $v_{k}$ is -\begin{equation} - \covarderiv{v_{k}}{i} =\partialderiv{v_{k}}{i}-\christoffel{j}{k}{i}v_{j} -\end{equation} - -\subsubsection{Tensors} - -The covariant derivative of a contravariant (rank (0,2)) tensor $W^{mn}$ is -\begin{equation} - \covarderiv{W^{mn}}{i}=\partialderiv{W^{mn}}{i}+\christoffel{m}{j}{i}W^{jn}+\christoffel{n}{j}{i}W^{mj} -\end{equation} -and the covariant derivative of a covariant (rank (2,0)) tensor $W_{mn}$ is -\begin{equation} - \covarderiv{W_{mn}}{i}=\partialderiv{W_{mn}}{i}-\christoffel{j}{m}{i}W_{jn}-\christoffel{j}{n}{i}W_{mj} -\end{equation} -and the covariant derivative of a mixed (rank (1,1)) tensor $W^{m}_{.n}$ is -\begin{equation} - \covarderiv{W^{m}_{.n}}{i}=\partialderiv{W^{m}_{.n}}{i}+\christoffel{m}{j}{i}W^{j}_{.n}-\christoffel{j}{n}{i}W^{m}_{.j} -\end{equation} - -\subsection{Common Operators} - -For tensor equations to hold in any coordinate system the equations must -involve tensor quantities \ie covariant derivatives rather than partial derivatives. - -\subsubsection{Gradient} - -As the covariant derivative of a scalar is just the partial derivative the -gradient of a scalar function $\phi$ using covariant derivatives is -\begin{equation} - \text{grad } \phi = \gradient{\phi}=\covarderiv{\phi}{i}\vect{g}^{i}=\partialderiv{\phi}{i}\vect{g}^{i} -\end{equation} -and -\begin{equation} - \gradient{\phi}=\partialderiv{\phi}{i}\vect{g}^{i}=\partialderiv{\phi}{i}g^{ij}\vect{g}_{j} -\end{equation} - -\subsubsection{Divergence} - -The divergence of a vector using covariant derivatives is -\begin{equation} - \text{div } \vect{\phi} = \diverg{\vect{\phi}}=\covarderiv{\phi^{i}}{i}=\frac{1}{\sqrt{\abs{g}}}\partialderiv{\pbrac{\sqrt{\abs{g}}\phi^{i}}}{i} -\end{equation} -where $g$ is the determinant of the covariant metric tensor $g_{ij}$. - -\subsubsection{Curl} - -The curl of a vector using covariant derivatives is -\begin{equation} - \text{curl } \vect{\phi} = \curl{\vect{\phi}}=\frac{1}{\sqrt{g}}\pbrac{\covarderiv{\phi_{j}}{i}-\covarderiv{\phi_{i}}{j}}\vect{g}_{k} -\end{equation} -where $g$ is the determinant of the covariant metric tensor $g_{ij}$. - -\subsubsection{Laplacian} - -The Laplacian of a scalar using covariant derivatives is -\begin{equation} - \laplacian{\phi}=\text{div}\pbrac{\text{grad }\phi}=\diverg{\gradient{\phi}}=\mixedderiv{\phi}{i}{i}=\frac{1}{\sqrt{g}}\partialderiv{\pbrac{\sqrt{g}g^{ij}\partialderiv{\phi}{j}}}{i} -\end{equation} -where $g$ is the determinant of the covariant metric tensor $g_{ij}$. - -The Laplacian of a vector using covariant derivatives is -\begin{equation} - \laplacian{\vect{\phi}}=\text{grad }\pbrac{\text{div }\vect{\phi}}-\text{curl } \pbrac{\text{curl }\vect{\phi}}==\mixedderiv{\vect{\phi}}{i}{i} -\end{equation} - -The Laplacian of a contravariant (rank (0,1)) tensor $\phi^{k}$ is -\begin{equation} - \laplacian{\vect{\phi}}=\pbrac{\laplacian{\phi_{k}}-2g^{ij}\christoffel{K}{j}{H}\delby{\phi^{h}}{x^{i}}+\phi^{h}\delby{g^{ij}\christoffel{K}{i}{j}}{x^{h}}}\vect{e}^{k} -\end{equation} -and the covariant derivative of a covariant tensor (rank (1,0)) $\phi_{k}$ is -\begin{equation} - \laplacian{\vect{\phi}}=\pbrac{\laplacian{\phi_{k}}-2g^{ij}\christoffel{h}{j}{k}\delby{\phi_{h}}{x^{i}}+\phi_{h}g^{ij}\delby{\christoffel{h}{i}{j}}{x^{i}}}\vect{e}_{k} -\end{equation} - -\subsection{Coordinate Systems} -\label{sec:coordinate systems} - -\subsubsection{Rectangular Cartesian} - -The base vectors with respect to the global coordinate system are -\begin{equation} - \vect{g}_{i}=\begin{bmatrix} - \vect{i}_{1} \\ - \vect{i}_{2} \\ - \vect{i}_{3} - \end{bmatrix} -\end{equation} - -The covariant metric tensor is -\begin{equation} - g_{ij}=\begin{bmatrix} - 1 & 0 & 0 \\ - 0 & 1 & 0 \\ - 0 & 0 & 1 - \end{bmatrix} -\end{equation} -and the contravariant metric tensor is -\begin{equation} - g^{ij}=\begin{bmatrix} - 1 & 0 & 0 \\ - 0 & 1 & 0 \\ - 0 & 0 & 1 - \end{bmatrix} -\end{equation} - -The Christoffel symbols of the second kind are all zero. - -\subsubsection{Cylindrical Polar} - -The global coordinates $\pbrac{x,y,z}$ with respect to the cylindrical polar -coordinates $\pbrac{r,\theta,z}$ are defined by -\begin{equation} - \begin{aligned} - x = r\cos\theta & \qquad r \ge0 \\ - y = r\sin\theta & \qquad 0 \le\theta\le2\pi \\ - z = z & \qquad -\infty < z < \infty - \end{aligned} -\end{equation} - -The base vectors with respect to the global coordinate system are -\begin{equation} - \vect{g}_{i}=\begin{bmatrix} - \cos\theta\vect{i}_{1} + \sin\theta\vect{i}_{2} \\ - -r\sin\theta\vect{i}_{1}+ r\cos\theta\vect{i}_{2} \\ - \vect{i}_{3} - \end{bmatrix} -\end{equation} - -The covariant metric tensor is -\begin{equation} - g_{ij}=\begin{bmatrix} - 1 & 0 & 0 \\ - 0 & r^{2} & 0 \\ - 0 & 0 & 1 - \end{bmatrix} -\end{equation} -and the contravariant metric tensor is -\begin{equation} - g^{ij}=\begin{bmatrix} - 1 & 0 & 0 \\ - 0 & \frac{1}{r^{2}} & 0 \\ - 0 & 0 & 1 - \end{bmatrix} -\end{equation} - -The Christoffell symbols of the second kind are -\begin{align} - \christoffelsecond{r}{\theta}{\theta}&=-r \\ - \christoffelsecond{\theta}{r}{\theta}=\christoffelsecond{\theta}{\theta}{r}&=\frac{1}{r} -\end{align} -with all other Christoffell symbols zero. - -\subsubsection{Spherical Polar} - -The global coordinates $\pbrac{x,y,z}$ with respect to the cylindrical polar -coordinates $\pbrac{r,\theta,\phi}$ are defined by -\begin{equation} - \begin{aligned} - x = r\cos\theta\sin\phi & \qquad r \ge 0 \\ - y = r\sin\theta\sin\phi & \qquad 0 \le \theta \le 2\pi \\ - z = r\cos\phi & \qquad 0 \le \phi \le \pi - \end{aligned} -\end{equation} - -The base vectors with respect to the spherical polar coordinate system are -\begin{equation} - \vect{g}_{i}=\begin{bmatrix} - \cos\theta\sin\phi\vect{i}_{1}+\sin\theta\sin\phi\vect{i}_{2}+\cos\phi\vect{i}_{3} \\ - -r\sin\theta\sin\phi\vect{i}_{1}+r\cos\theta\sin\phi\vect{i}_{2} \\ - r\cos\theta\cos\phi\vect{i}_{1}+r\sin\theta\cos\phi\vect{i}_{2}-r\sin\phi\vect{i}_{3} - \end{bmatrix} -\end{equation} - -The covariant metric tensor is -\begin{equation} - g_{ij}=\begin{bmatrix} - 1 & 0 & 0 \\ - 0 & r^{2}\sin^{2}\phi & 0 \\ - 0 & 0 & r^{2} - \end{bmatrix} -\end{equation} -and the contravariant metric tensor is -\begin{equation} - g^{ij}=\begin{bmatrix} - 1 & 0 & 0 \\ - 0 & \frac{1}{r^{2}\sin^{2}\phi} & 0 \\ - 0 & 0 & \frac{1}{r^{2}} - \end{bmatrix} -\end{equation} - -The Christoffell symbols of the second kind are -\begin{align} - \christoffelsecond{r}{\theta}{\theta}&=-r\sin^{2}\phi \\ - \christoffelsecond{r}{\phi}{\phi}&=-r \\ - \christoffelsecond{\phi}{\theta}{\theta}&=-\sin\phi\cos\phi \\ - \christoffelsecond{\theta}{r}{\theta}=\christoffelsecond{\theta}{\theta}{r}&=\frac{1}{r} \\ - \christoffelsecond{\phi}{r}{\phi}=\christoffelsecond{\phi}{\phi}{r}&=\frac{1}{r} \\ - \christoffelsecond{\theta}{\theta}{\phi}=\christoffelsecond{\theta}{\phi}{\theta}&=\cot\phi -\end{align} -with all other Christofell symbols zero. - -\subsubsection{Prolate Spheroidal} - -The global coordinates $\pbrac{x,y,z}$ with respect to the prolate spheroidal -coordinates $\pbrac{\lambda,\mu,\theta}$ are defined by -\begin{equation} - \begin{aligned} - x = a\sinh\lambda\sin\mu\cos\theta & \qquad \lambda \ge 0 \\ - y = a\sinh\lambda\sin\mu\sin\theta & \qquad 0 \le \mu \le \pi \\ - z = a\cosh\lambda\cos\mu & \qquad 0 \le \theta \le 2\pi - \end{aligned} -\end{equation} -where $a\ge0$ is the focus. - -The base vectors with respect to the global coordinate system are -\begin{equation} - \vect{g}_{i}=\begin{bmatrix} - a\cosh\lambda\sin\mu\cos\theta\vect{i}_{1}+a\cosh\lambda\sin\mu\sin\theta\vect{i}_{2}+a\sinh\lambda\cos\mu\vect{i}_{3}\\ - a\sinh\lambda\cos\mu\cos\theta\vect{i}_{1}+a\sinh\lambda\cos\mu\sin\theta\vect{i}_{2}-a\cosh\lambda\sin\mu\vect{i}_{3}\\ - -a\sinh\lambda\sin\mu\sin\theta\vect{i}_{1}+a\sinh\lambda\sin\mu\cos\theta\vect{i}_{2} - \end{bmatrix} -\end{equation} - -The covariant metric tensor is -\begin{equation} - g_{ij}=\begin{bmatrix} - a^{2}\pbrac{\sinh^{2}\lambda+\sin^{2}\mu} & 0 & 0 \\ - 0 & a^{2}\pbrac{\sinh^{2}\lambda+\sin^{2}\mu} & 0 \\ - 0 & 0 & a^{2}\sinh^{2}\lambda\sin^{2}\mu - \end{bmatrix} -\end{equation} -and the contravariant metric tensor is -\begin{equation} - g^{ij}=\begin{bmatrix} - \frac{1}{a^{2}\pbrac{\sinh^{2}\lambda+\sin^{2}\mu}}& 0 & 0 \\ - 0 & \frac{1}{a^{2}\pbrac{\sinh^{2}\lambda+\sin^{2}\mu}} & 0 \\ - 0 & 0 & \frac{1}{a^{2}\sinh^{2}\lambda\sin^{2}\mu} - \end{bmatrix} -\end{equation} - -The Christoffell symbols of the second kind are -\begin{align} - \christoffelsecond{\lambda}{\lambda}{\lambda}&=\frac{\sinh\lambda\cosh\lambda}{\sinh^{2}\lambda+\sin^{2}\mu} \\ - \christoffelsecond{\lambda}{\mu}{\mu}&=\frac{-\sinh\lambda\cosh\lambda}{\sinh^{2}\lambda+\sin^{2}\mu} \\ - \christoffelsecond{\lambda}{\theta}{\theta}&=\frac{-\sinh\lambda\cosh\lambda\sin^{2}\mu}{\sinh^{2}\lambda+\sin^{2}\mu} \\ - \christoffelsecond{\lambda}{\lambda}{\mu}&=\frac{\sin\mu\cos\mu}{\sinh^{2}\lambda+\sin^{2}\mu} \\ - \christoffelsecond{\mu}{\mu}{\mu}&=\frac{\sin\mu\cos\mu}{\sinh^{2}\lambda+\sin^{2}\mu} \\ - \christoffelsecond{\mu}{\lambda}{\lambda}&=\frac{-\sin\mu\cos\mu}{\sinh^{2}\lambda+\sin^{2}\mu} \\ - \christoffelsecond{\mu}{\theta}{\theta}&=\frac{-\sinh^{2}\lambda\sin\mu\cos\mu}{\sinh^{2}\lambda+\sin^{2}\mu} \\ - \christoffelsecond{\mu}{\mu}{\lambda}&=\frac{\sinh\lambda\cosh\lambda}{\sinh^{2}\lambda+\sin^{2}\mu} \\ - \christoffelsecond{\theta}{\theta}{\lambda}&=\frac{\cosh\lambda}{\sinh\lambda} \\ - \christoffelsecond{\theta}{\theta}{\mu}&=\frac{\cos\mu}{\sin\mu} \\ - \end{align} -with all other Christofell symbols zero. - -\subsubsection{Oblate Spheroidal} - -The global coordinates $\pbrac{x,y,z}$ with respect to the oblate spheroidal -coordinates $\pbrac{\lambda,\mu,\theta}$ are defined by -\begin{equation} - \begin{aligned} - x = a\cosh\lambda\cos\mu\cos\theta & \qquad \lambda \ge 0 \\ - y = a\cosh\lambda\cos\mu\sin\theta & \qquad \frac{-\pi}{2} \le \mu \le \frac{\pi}{2} \\ - z = a\sinh\lambda\sin\mu & \qquad 0 \le \theta \le 2\pi - \end{aligned} -\end{equation} -where $a\ge0$ is the focus. - -The base vectors with respect to the global coordinate system are -\begin{equation} - \vect{g}_{i}=\begin{bmatrix} - a\sinh\lambda\cos\mu\cos\theta\vect{i}_{1}+a\sinh\lambda\cos\mu\sin\theta\vect{i}_{2}+a\cosh\lambda\sin\mu\vect{i}_{3}\\ - -a\cosh\lambda\sin\mu\cos\theta\vect{i}_{1}-a\cosh\lambda\sin\mu\sin\theta\vect{i}_{2}+a\sinh\lambda\cos\mu\vect{i}_{3}\\ - -a\cosh\lambda\cos\mu\sin\theta\vect{i}_{1}+a\cosh\lambda\cos\mu\cos\theta\vect{i}_{2} - \end{bmatrix} -\end{equation} - -The covariant metric tensor is -\begin{equation} - g_{ij}=\begin{bmatrix} - a^{2}\pbrac{\sinh^{2}\lambda+\sin^{2}\mu} & 0 & 0 \\ - 0 & a^{2}\pbrac{\sinh^{2}\lambda+\sin^{2}\mu} & 0 \\ - 0 & 0 & a^{2}\cosh^{2}\lambda\cos^{2}\mu - \end{bmatrix} -\end{equation} -and the contravariant metric tensor is -\begin{equation} - g^{ij}=\begin{bmatrix} - \frac{1}{a^{2}\pbrac{\sinh^{2}\lambda+\sin^{2}\mu}}& 0 & 0 \\ - 0 & \frac{1}{a^{2}\pbrac{\sinh^{2}\lambda+\sin^{2}\mu}} & 0 \\ - 0 & 0 & \frac{1}{a^{2}\cosh^{2}\lambda\cos^{2}\mu} - \end{bmatrix} -\end{equation} - -The Christoffell symbols of the second kind are -\begin{align} - \christoffelsecond{\lambda}{\lambda}{\lambda}&=\frac{\sinh\lambda\cosh\lambda}{\sinh^{2}\lambda+\sin^{2}\mu} \\ - \christoffelsecond{\lambda}{\mu}{\mu}&=\frac{-\sinh\lambda\cosh\lambda}{\sinh^{2}\lambda+\sin^{2}\mu} \\ - \christoffelsecond{\lambda}{\theta}{\theta}&=\frac{-\sinh\lambda\cosh\lambda\cos^{2}\mu}{\sinh^{2}\lambda+\sin^{2}\mu} \\ - \christoffelsecond{\lambda}{\lambda}{\mu}&=\frac{\sin\mu\cos\mu}{\sinh^{2}\lambda+\sin^{2}\mu} \\ - \christoffelsecond{\mu}{\mu}{\mu}&=\frac{\sin\mu\cos\mu}{\sinh^{2}\lambda+\sin^{2}\mu} \\ - \christoffelsecond{\mu}{\lambda}{\lambda}&=\frac{-\sin\mu\cos\mu}{\sinh^{2}\lambda+\sin^{2}\mu} \\ - \christoffelsecond{\mu}{\theta}{\theta}&=\frac{\cosh^{2}\lambda\sin\mu\cos\mu}{\sinh^{2}\lambda+\sin^{2}\mu} \\ - \christoffelsecond{\mu}{\mu}{\lambda}&=\frac{\sinh\lambda\cosh\lambda}{\sinh^{2}\lambda+\sin^{2}\mu} \\ - \christoffelsecond{\theta}{\theta}{\lambda}&=\frac{\sinh\lambda}{\cosh\lambda} \\ - \christoffelsecond{\theta}{\theta}{\mu}&=\frac{-\sin\mu}{\cos\mu} \\ -\end{align} -with all other Christofell symbols zero. - -\subsubsection{Cylindrical parabolic} - -The global coordinates $\pbrac{x,y,z}$ with respect to the cylindrical parabolic -coordinates $\pbrac{\xi,\eta,z}$ are defined by -\begin{equation} - \begin{aligned} - x = \xi\eta & \qquad -\infty < \xi < \infty \\ - y = \frac{1}{2}\pbrac{\xi^{2}-\eta^{2}} & \qquad \eta \ge 0 \\ - z = z & \qquad -\infty < z < \infty - \end{aligned} -\end{equation} - -The base vectors with respect to the global coordinate system are -\begin{equation} - \vect{g}_{i}=\begin{bmatrix} - \eta\vect{i}_{1}+\xi\vect{i}_{2}\\ - \xi\vect{i}_{1}-\eta\vect{i}_{2}\\ - \vect{i}_{3} - \end{bmatrix} -\end{equation} - -The covariant metric tensor is -\begin{equation} - g_{ij}=\begin{bmatrix} - \xi^{2}+\eta^{2} & 0 & 0 \\ - 0 & \xi^{2}+\eta^{2} & 0 \\ - 0 & 0 & 1 - \end{bmatrix} -\end{equation} -and the contravariant metric tensor is -\begin{equation} - g^{ij}=\begin{bmatrix} - \frac{1}{\xi^{2}+\eta^{2}}& 0 & 0 \\ - 0 & \frac{1}{\xi^{2}+\eta^{2}} & 0 \\ - 0 & 0 & 1 - \end{bmatrix} -\end{equation} - -The Christoffell symbols of the second kind are -\begin{align} - \christoffelsecond{\xi}{\xi}{\xi}&=\frac{\xi}{\xi^{2}+\eta^{2}} \\ - \christoffelsecond{\eta}{\eta}{\eta}&=\frac{\eta}{\xi^{2}+\eta^{2}} \\ - \christoffelsecond{\eta}{\xi}{\xi}&=\frac{-\eta}{\xi^{2}+\eta^{2}} \\ - \christoffelsecond{\xi}{\eta}{\eta}&=\frac{-\xi}{\xi^{2}+\eta^{2}} \\ - \christoffelsecond{\xi}{\xi}{\eta}=\christoffelsecond{\xi}{\eta}{\xi}&=\frac{\eta}{\xi^{2}+\eta^{2}} \\ - \christoffelsecond{\eta}{\xi}{\eta}=\christoffelsecond{\eta}{\eta}{\xi}&=\frac{\xi}{\xi^{2}+\eta^{2}} \\ -\end{align} -with all other Christofell symbols zero. - -\subsubsection{Parabolic polar} - -The global coordinates $\pbrac{x,y,z}$ with respect to the cylindrical parabolic -coordinates $\pbrac{\xi,\eta,\theta}$ are defined by -\begin{equation} - \begin{aligned} - x = \xi\eta\cos\theta & \qquad \xi \ge 0 \\ - y = \xi\eta\sin\theta & \qquad \eta \ge 0 \\ - z = \frac{1}{2}\pbrac{\xi^{2}-\eta^{2}} & \qquad 0 \le \theta < 2\pi - \end{aligned} -\end{equation} - -The base vectors with respect to the global coordinate system are -\begin{equation} - \vect{g}_{i}=\begin{bmatrix} - \eta\cos\theta\vect{i}_{1}+\eta\sin\theta\vect{i}_{3}+\xi\vect{i}_{3}\\ - \xi\cos\theta\vect{i}_{1}+\xi\sin\theta\vect{i}_{3}-\eta\vect{i}_{3}\\ - -\xi\eta\sin\theta\vect{i}_{1}+\xi\eta\cos\theta\vect{i}_{2} - \end{bmatrix} -\end{equation} - -The covariant metric tensor is -\begin{equation} - g_{ij}=\begin{bmatrix} - \xi^{2}+\eta^{2} & 0 & 0 \\ - 0 & \xi^{2}+\eta^{2} & 0 \\ - 0 & 0 & \xi\eta - \end{bmatrix} -\end{equation} -and the contravariant metric tensor is -\begin{equation} - g^{ij}=\begin{bmatrix} - \frac{1}{\xi^{2}+\eta^{2}}& 0 & 0 \\ - 0 & \frac{1}{\xi^{2}+\eta^{2}} & 0 \\ - 0 & 0 & \frac{1}{\xi\eta} - \end{bmatrix} -\end{equation} - -The Christoffell symbols of the second kind are -\begin{align} - \christoffelsecond{\xi}{\xi}{\xi}&=\frac{\xi}{\xi^{2}+\eta^{2}} \\ - \christoffelsecond{\eta}{\eta}{\eta}&=\frac{\eta}{\xi^{2}+\eta^{2}} \\ - \christoffelsecond{\xi}{\eta}{\eta}&=\frac{-\xi}{\xi^{2}+\eta^{2}} \\ - \christoffelsecond{\eta}{\xi}{\xi}&=\frac{-\eta}{\xi^{2}+\eta^{2}} \\ - \christoffelsecond{\eta}{\theta}{\theta}&=\frac{-\xi^{2}\eta}{\xi^{2}+\eta^{2}} \\ - \christoffelsecond{\xi}{\theta}{\theta}&=\frac{-\xi\eta^{2}}{\xi^{2}+\eta^{2}} \\ - \christoffelsecond{\xi}{\xi}{\eta}=\christoffelsecond{\xi}{\eta}{\xi}&=\frac{\eta}{\xi^{2}+\eta^{2}} \\ - \christoffelsecond{\eta}{\xi}{\eta}=\christoffelsecond{\eta}{\eta}{\xi}&=\frac{\xi}{\xi^{2}+\eta^{2}} \\ - \christoffelsecond{\theta}{\xi}{\theta}=\christoffelsecond{\theta}{\theta}{\xi}&=\frac{1}{\xi} \\ - \christoffelsecond{\theta}{\eta}{\theta}=\christoffelsecond{\theta}{\theta}{\eta}&=\frac{1}{\eta} \\ -\end{align} -with all other Christofell symbols zero. - -\section{Equation set types} - -\subsection{Static Equations} - -The general form for static equations is - -\subsection{Dynamic Equations} - -The general form for dynamic equations is -\begin{equation} - \matr{M}\fnof{\ddot{\vect{u}}}{t}+\matr{C}\fnof{\dot{\vect{u}}}{t}+\matr{K}\fnof{\vect{u}}{t}+ - \fnof{\vect{g}}{\fnof{\vect{u}}{t}}+\fnof{\vect{f}}{t}=\vect{0} - \label{eqn:generaldynamicnonlinear} -\end{equation} -where $\fnof{\vect{u}}{t}$ is the unknown ``displacement vector'', $\matr{M}$ -is the mass matrix, $\matr{C}$ is the damping matrix, $\matr{K}$ is the -stiffness matrix, $\fnof{\vect{g}}{\fnof{\vect{u}}{t}}$ a non-linear vector -function and $\fnof{\vect{f}}{t}$ the forcing vector. - -From \cite{zienkiewicz:2006_1} we now expand the unknown vector $\fnof{\vect{u}}{t}$ in terms of a polynomial of degree -$p$. With the known values of $\vect{u}_{n}$, $\dot{\vect{u}}_{n}$, -$\ddot{\vect{u}}_{n}$ up to $\symover{p-1}{\vect{u}}_{n}$ at the beginning of -the time step $\Delta t$ we can write the polynomial expansion as -\begin{equation} - \fnof{\vect{u}}{t_{n}+\tau}\approx\fnof{\tilde{\vect{u}}}{t_{n}+\tau}=\vect{u}_{n}+\tau\dot{\vect{u}}_{n}+ - \frac{1}{2!}\tau^{2}\ddot{\vect{u}}_{n}+\cdots+\dfrac{1}{\factorial{p-1}}\tau^{p-1}\symover{p-1}{\vect{u}}_{n}+ - \dfrac{1}{p!}\tau^{p}\vect{\alpha}^{p}_{n} - \label{eqn:timepolyexpansion} -\end{equation} -where the only unknown is the the vector $\vect{\alpha}^{p}_{n}$, -\begin{equation} - \vect{\alpha}^{p}_{n}\approx\symover{p}{\vect{u}}\equiv\dnby{p}{\vect{u}}{t} -\end{equation} - -A recurrance relationship can be established by substituting -\eqnref{eqn:timepolyexpansion} into \eqnref{eqn:generaldynamicnonlinear} and -taking a weighted residual approach \ie -\begin{multline} - \dintl{0}{\Delta - t}\fnof{W}{\tau}\left[\matr{M}\pbrac{\ddot{\vect{u}}_{n}+\tau\dddot{\vect{u}}_{n}+\cdots+ - \dfrac{1}{\factorial{p-2}}\tau^{p-2}\vect{\alpha}^{p}_{n}} \right.\\ - +\matr{C}\pbrac{\dot{\vect{u}}_{n}+\tau\ddot{\vect{u}}_{n}+\cdots+ - \dfrac{1}{\factorial{p-1}}\tau^{p-1}\vect{\alpha}^{p}_{n}} \\ - +\matr{K}\pbrac{\vect{u}_{n}+\tau\dot{\vect{u}}_{n}+\cdots+ - \dfrac{1}{p!}\tau^{p}\vect{\alpha}^{p}_{n}} \\ - +\left.\fnof{\vect{g}}{\vect{u}_{n}+\tau\dot{\vect{u}}_{n}+\cdots+ - \dfrac{1}{p!}\tau^{p}\vect{\alpha}^{p}_{n}}+\fnof{\vect{f}}{t_{n}+\tau}\right] d\tau = \vect{0} -\end{multline} -where $\fnof{W}{\tau}$ is some weight function, $\tau=t-t_{n}$ and $\Delta -t=t_{n+1}-t_{n}$. Dividing by $\gint{0}{\Delta t}{\fnof{W}{\tau}}{\tau}$ we obtain -\begin{multline} - \dfrac{\gint{0}{\Delta t}{\fnof{W}{\tau}\matr{M}\pbrac{\ddot{\vect{u}}_{n}+\tau\dddot{\vect{u}}_{n}+\cdots+ - \dfrac{1}{\factorial{p-2}}\tau^{p-2}\vect{\alpha}^{p}_{n}}}{\tau}}{\gint{0}{\Delta - t}{\fnof{W}{\tau}}{\tau}} \\ - + \dfrac{\gint{0}{\Delta t}{\fnof{W}{\tau}\matr{C}\pbrac{\dot{\vect{u}}_{n}+\tau\ddot{\vect{u}}_{n}+\cdots+ - \dfrac{1}{\factorial{p-1}}\tau^{p-1}\vect{\alpha}^{p}_{n}}}{\tau}}{\gint{0}{\Delta - t}{\fnof{W}{\tau}}{\tau}} \\ - + \dfrac{\gint{0}{\Delta t}{\fnof{W}{\tau}\matr{K}\pbrac{\vect{u}_{n}+\tau\dot{\vect{u}}_{n}+\cdots+ - \dfrac{1}{p!}\tau^{p}\vect{\alpha}^{p}_{n}}}{\tau}}{\gint{0}{\Delta - t}{\fnof{W}{\tau}}{\tau}} \\ - + \dfrac{\gint{0}{\Delta t}{\fnof{W}{\tau}\fnof{\vect{g}}{\vect{u}_{n}+\tau\dot{\vect{u}}_{n}+\cdots+ - \dfrac{1}{p!}\tau^{p}\vect{\alpha}^{p}_{n}}}{\tau}}{\gint{0}{\Delta - t}{\fnof{W}{\tau}}{\tau}} - + \dfrac{\gint{0}{\Delta t}{\fnof{W}{\tau}\fnof{\vect{f}}{t_{n}+ - \tau}}{\tau}}{\gint{0}{\Delta t}{\fnof{W}{\tau}}{\tau}}=\vect{0} -\end{multline} - -Now if -\begin{equation} - \theta_{k}=\dfrac{\gint{0}{\Delta t}{\fnof{W}{\tau}\tau^{k}}{\tau}}{{\Delta - t}^{k}\gint{0}{\Delta t}{\fnof{W}{\tau}}{\tau}} \text{ for } k=0,1,\ldots,p -\end{equation} -and -\begin{equation} - \bar{\vect{f}}=\dfrac{\gint{0}{\Delta - t}{\fnof{W}{\tau}\fnof{\vect{f}}{t_{n}+\tau}}{\tau}}{ - \gint{0}{\Delta t}{\fnof{W}{\tau}}{\tau}} - \label{eqn:meanweightedloadvector} -\end{equation} -we can write -\begin{multline} - \matr{M}\pbrac{\ddot{\bar{\vect{u}}}_{n+1}+\dfrac{\theta_{p-2}{\Delta - t}^{p-2}}{\factorial{p-2}}\vect{\alpha}^{p}_{n}}+ - \matr{C}\pbrac{\dot{\bar{\vect{u}}}_{n+1}+\dfrac{\theta_{p-1}{\Delta - t}^{p-1}}{\factorial{p-1}}\vect{\alpha}^{p}_{n}}+ - \matr{K}\pbrac{\bar{\vect{u}}_{n+1}+\dfrac{\theta_{p}{\Delta - t}^{p}}{p!}\vect{\alpha}^{p}_{n}}+ \\ - + \dfrac{\gint{0}{\Delta t}{\fnof{W}{\tau}\fnof{\vect{g}}{\vect{u}_{n}+\tau\dot{\vect{u}}_{n}+\cdots+ - \dfrac{1}{p!}\tau^{p}\vect{\alpha}^{p}_{n}}}{\tau}}{\gint{0}{\Delta - t}{\fnof{W}{\tau}}{\tau}}+\bar{\vect{f}}=\vect{0} - \label{eqn:dynamic1} -\end{multline} -where -\begin{equation} - \begin{split} - \bar{\vect{u}}_{n+1} &= \gsum{q=0}{p-1}{\dfrac{\theta_{q}{\Delta - t}^{q}}{q!}\symover{q}{\vect{u}}_{n}} \\ - \dot{\bar{\vect{u}}}_{n+1} &= \gsum{q=1}{p-1}{\dfrac{\theta_{q-1}{\Delta - t}^{q-1}}{\factorial{q-1}}\symover{q}{\vect{u}}_{n}} \\ - \ddot{\bar{\vect{u}}}_{n+1} &= \gsum{q=2}{p-1}{\dfrac{\theta_{q-2}{\Delta - t}^{q-2}}{\factorial{q-2}}\symover{q}{\vect{u}}_{n}} - \end{split} -\end{equation} - -We note that as $\fnof{\vect{g}}{\fnof{\vect{u}}{t}}$ is nonlinear we need to -evaluate an integral of the form -\begin{equation} - \gint{0}{\Delta t}{\fnof{W}{\tau}\fnof{\vect{g}}{\fnof{\vect{u}}{t_{n}+\tau}}}{\tau} -\end{equation} - -To do this we form Taylor's series expansions for -$\fnof{\vect{g}}{\fnof{\vect{u}}{t}}$ about the point $\fnof{\vect{u}}{t_{n}+\tau}$ \ie -\begin{equation} - \fnof{\vect{g}}{\fnof{\vect{u}}{t_{n}}}=\fnof{\vect{g}}{\fnof{\vect{u}}{t_{n}+\tau}}- - \tau\delby{\fnof{\vect{g}}{\fnof{\vect{u}}{t}}}{\vect{u}}\evalat{\delby{\fnof{\vect{u}}{t}}{t}}{t_{n}+\tau} - + \orderof{\tau^{2}} - \label{eqn:firstTaylorexpansion} -\end{equation} -and -\begin{equation} - \fnof{\vect{g}}{\fnof{\vect{u}}{t_{n+1}}}=\fnof{\vect{g}}{\fnof{\vect{u}}{t_{n}+\tau}}+ - \pbrac{t_{n+1}-t_{n}-\tau}\delby{\fnof{\vect{g}}{\fnof{\vect{u}}{t}}}{\vect{u}} - \evalat{\delby{\fnof{\vect{u}}{t}}{t}}{t_{n}+\tau}+ \orderof{\tau^{2}} - \label{eqn:secondTaylorexpansion} -\end{equation} - -Now if we add $\dfrac{1}{\tau}$ times \eqnref{eqn:firstTaylorexpansion} and -$\dfrac{1}{t_{n+1}-t_{n}-\tau}=\dfrac{1}{\Delta t-\tau}$ times -\eqnref{eqn:secondTaylorexpansion} we obtain -\begin{equation} - \dfrac{\fnof{\vect{g}}{\fnof{\vect{u}}{t_{n}}}}{\tau}+\dfrac{\fnof{\vect{g}}{\fnof{\vect{u}}{t_{n+1}}}}{\Delta - t-\tau}=\pbrac{\dfrac{\Delta t}{\tau\pbrac{\Delta t-\tau}}}\fnof{\vect{g}}{\fnof{\vect{u}}{t_{n}+\tau}}+ - \pbrac{\dfrac{\Delta t}{\tau\pbrac{\Delta t-\tau}}}\orderof{\tau^{2}} -\end{equation} - -Multiplying through by $\dfrac{\tau\pbrac{\Delta t-\tau}}{\Delta t}$ gives -\begin{equation} - \dfrac{\Delta t-\tau}{\Delta t}\fnof{\vect{g}}{\fnof{\vect{u}}{t_{n}}}+ - \dfrac{\tau}{\Delta t}\fnof{\vect{g}}{\fnof{\vect{u}}{t_{n+1}}}= - \fnof{\vect{g}}{\fnof{\vect{u}}{t_{n}+\tau}}+\orderof{\tau^{2}} -\end{equation} - -Therefore -\begin{equation} - \dfrac{\gint{0}{\Delta t}{\fnof{W}{\tau}\fnof{\vect{g}}{\fnof{\vect{u}}{t_{n}+\tau}}}{\tau}} - {\gint{0}{\Delta t}{\fnof{W}{\tau}}{\tau}}=\dfrac{\gint{0}{\Delta t}{\fnof{W}{\tau} - \pbrac{\dfrac{\Delta t-\tau}{\Delta t}\fnof{\vect{g}}{\fnof{\vect{u}}{t_{n}}}+ - \dfrac{\tau}{\Delta t}\fnof{\vect{g}}{\fnof{\vect{u}}{t_{n+1}}}+\orderof{\tau^{2}}}}{\tau}} - {\gint{0}{\Delta t}{\fnof{W}{\tau}}{\tau}} -\end{equation} - -Now if we recall that -\begin{equation} -\theta_{1}=\dfrac{\gint{0}{\Delta t}{\fnof{W}{\tau}\tau}{\tau}}{\Delta t\gint{0}{\Delta t}{\fnof{W}{\tau}}{\tau}} -\end{equation} -we can write -\begin{equation} - \dfrac{\gint{0}{\Delta t}{\fnof{W}{\tau}\fnof{\vect{g}}{\fnof{\vect{u}}{t_{n+1}}}}{\tau}} - {\gint{0}{\Delta t}{\fnof{W}{\tau}}{\tau}}=\pbrac{1-\theta_{1}}\fnof{\vect{g}}{\fnof{\vect{u}}{t_{n}}}+ - \theta_{1}\fnof{\vect{g}}{\fnof{\vect{u}}{t_{n+1}}}+\text{Error} -\end{equation} -where -\begin{equation} - \text{Error}=\dfrac{\gint{0}{\Delta t}{\fnof{W}{\tau}\orderof{\tau^{2}}}{\tau}}{ - \gint{0}{\Delta t}{\fnof{W}{\tau}}{\tau}} -\end{equation} - -\Eqnref{eqn:dynamic1} now becomes -\begin{multline} - \matr{M}\pbrac{\ddot{\bar{\vect{u}}}_{n+1}+\dfrac{\theta_{p-2}{\Delta - t}^{p-2}}{\factorial{p-2}}\vect{\alpha}^{p}_{n}}+ - \matr{C}\pbrac{\dot{\bar{\vect{u}}}_{n+1}+\dfrac{\theta_{p-1}{\Delta - t}^{p-1}}{\factorial{p-1}}\vect{\alpha}^{p}_{n}}\\ - +\matr{K}\pbrac{\bar{\vect{u}}_{n+1}+\dfrac{\theta_{p}{\Delta - t}^{p}}{p!}\vect{\alpha}^{p}_{n}}+ - \pbrac{1-\theta_{1}}\fnof{\vect{g}}{\vect{u}_{n}}+\theta_{1}\fnof{\vect{g}}{\vect{u}_{n+1}}+\bar{\vect{f}}+ - \text{Error}=\vect{0} - \label{eqn:dynamic2} -\end{multline} -as $\fnof{\vect{u}}{t_{n}}=\vect{u}_{n}$ and -$\fnof{\vect{u}}{t_{n+1}}=\vect{u}_{n+1}=\hat{\vect{u}}_{n+1}+ -\dfrac{{\Delta t}^{p}}{p!}\vect{\alpha}^{p}_{n}$ where $\hat{\vect{u}}_{n+1}$ -is the \emph{predicted displacement} at the new time step and is given by -\begin{equation} - \hat{\vect{u}}_{n+1}=\gsum{q=0}{p-1}{\dfrac{{\Delta - t}^{q}}{q!}\symover{q}{\vect{u}}_{n}} -\end{equation} - -Rearranging gives -\begin{multline} - \fnof{\vect{\psi}}{\vect{\alpha}^{p}_{n}}=\pbrac{\dfrac{\theta_{p-2}{\Delta - t}^{p-2}}{\factorial{p-2}}\matr{M}+\dfrac{\theta_{p-1}{\Delta - t}^{p-1}}{\factorial{p-1}}\matr{C}+\dfrac{\theta_{p}{\Delta - t}^{p}}{p!}\matr{K}}\vect{\alpha}^{p}_{n}+\theta_{1}\fnof{\vect{g}}{\hat{\vect{u}}_{n+1}+ - \dfrac{{\Delta t}^{p}}{p!}\vect{\alpha}^{p}_{n}} \\ - +\pbrac{1-\theta_{1}}\fnof{\vect{g}}{\vect{u}_{n}}+ - \pbrac{\matr{M}\ddot{\bar{\vect{u}}}_{n+1}+\matr{C}\dot{\bar{\vect{u}}}_{n+1}+\matr{K}\bar{\vect{u}}_{n+1}+ - \bar{\vect{f}}}= \vect{0} - \label{eqn:dynamic} -\end{multline} -or -\begin{equation} -\fnof{\vect{\psi}}{\vect{\alpha}^{p}_{n}}=\matr{A}\vect{\alpha}^{p}_{n}+ -\theta_{1}\fnof{\vect{g}}{\hat{\vect{u}}_{n+1}+ \dfrac{{\Delta - t}^{p}}{p!}\vect{\alpha}^{p}_{n}}+\pbrac{1-\theta_{1}}\fnof{\vect{g}}{\vect{u}_{n}}+\vect{b}= \vect{0} -\end{equation} -where $\matr{A}$ is the \emph{Amplification matrix} given by -\begin{equation} - \matr{A}=\dfrac{\theta_{p-2}{\Delta t}^{p-2}}{\factorial{p-2}}\matr{M}+ - \dfrac{\theta_{p-1}{\Delta t}^{p-1}}{\factorial{p-1}}\matr{C}+ - \dfrac{\theta_{p}{\Delta t}^{p}}{p!}\matr{K} -\end{equation} -and $\vect{b}$ is the right hand side vector given by -\begin{equation} - \vect{b}=\matr{M}\ddot{\bar{\vect{u}}}_{n+1}+\matr{C}\dot{\bar{\vect{u}}}_{n+1}+ - \matr{K}\bar{\vect{u}}_{n+1}+\bar{\vect{f}} -\end{equation} - -If $\fnof{\vect{g}}{\vect{u}}\equiv\vect{0}$ then \eqnref{eqn:dynamic} is linear in -$\vect{\alpha}^{p}_{n}$ and $\vect{\alpha}^{p}_{n}$ can be found by solving -the linear equation -\begin{equation} - \vect{\alpha}^{p}_{n} =-\inverse{\pbrac{\dfrac{\theta_{p-2}{\Delta t}^{p-2}}{\factorial{p-2}}\matr{M}+ - \dfrac{\theta_{p-1}{\Delta t}^{p-1}}{\factorial{p-1}}\matr{C}+ - \dfrac{\theta_{p}{\Delta - t}^{p}}{p!}\matr{K}}}\pbrac{\matr{M}\ddot{\bar{\vect{u}}}_{n+1}+ - \matr{C}\dot{\bar{\vect{u}}}_{n+1}+\matr{K}\bar{\vect{u}}_{n+1}+\bar{\vect{f}}} -\end{equation} -or -\begin{equation} - \vect{\alpha}^{p}_{n} =-\inverse{\matr{A}}\vect{b} -\end{equation} - -If $\fnof{\vect{g}}{\vect{u}}$ is not $\equiv\vect{0}$ then -\eqnref{eqn:dynamic} is nonlinear in $\vect{\alpha}^{p}_{n}$. To solve this -equation we use Newton's method \ie -\begin{equation} - \begin{split} - \text{1. } & \fnof{\matr{J}}{\vect{\alpha}^{p}_{n(i)}}.\delta - \vect{\alpha}^{p}_{n(i)} = - -\fnof{\vect{\psi}}{\vect{\alpha}^{p}_{n(i)}} \\ - \text{2. } & \vect{\alpha}^{p}_{n(i+1)}=\vect{\alpha}^{p}_{n(i)}+\delta - \vect{\alpha}^{p}_{n(i)} - \end{split} -\end{equation} -where $\fnof{\matr{J}}{\vect{\alpha}^{p}_{n}}$ is the Jacobian and is given by -\begin{equation} - \fnof{\matr{J}}{\vect{\alpha}^{p}_{n}}=\dfrac{\theta_{p-2}{\Delta t}^{p-2}}{\factorial{p-2}}\matr{M}+ - \dfrac{\theta_{p-1}{\Delta - t}^{p-1}}{\factorial{p-1}}\matr{C}+\dfrac{\theta_{p}{\Delta t}^{p}}{p!}\matr{K}+ - \dfrac{\theta_{1}{\Delta t}^{p}}{p!} - \delby{\fnof{\vect{g}}{\hat{\vect{u}}_{n+1}+\dfrac{{\Delta - t}^{p}}{p!} - \vect{\alpha}^{p}_{n}}}{\vect{\alpha}^{p}_{n}} -\end{equation} -or -\begin{equation} - \fnof{\matr{J}}{\vect{\alpha}^{p}_{n}}=\matr{A}+\dfrac{\theta_{1}{\Delta - t}^{p}}{p!} - \delby{\fnof{\vect{g}}{\hat{\vect{u}}_{n+1}+\dfrac{{\Delta t}^{p}}{p!}\vect{\alpha}^{p}_{n}}}{\vect{\alpha}^{p}_{n}} -\end{equation} - -Once $\vect{\alpha}^{p}_{n}$ has been obtained the values at the next time step can be obtained from -\begin{equation} - \begin{split} - \vect{u}_{n+1} &= \vect{u}_{n}+\Delta t - \dot{\vect{u}}_{n}+\cdots+\dfrac{{\Delta - t}^{p}}{p!}\vect{\alpha}^{p}_{n}=\hat{\vect{u}}_{n+1}+ - \dfrac{{\Delta t}^{p}}{p!}\vect{\alpha}^{p}_{n}\\ - \dot{\vect{u}}_{n+1} &= \dot{\vect{u}}_{n}+\Delta t - \ddot{\vect{u}}_{n}+\cdots+\dfrac{{\Delta - t}^{p-1}}{\factorial{p-1}}\vect{\alpha}^{p}_{n}=\dot{\hat{\vect{u}}}_{n+1}+\dfrac{{\Delta - t}^{p-1}}{\factorial{p-1}}\vect{\alpha}^{p}_{n} \\ - &\vdots \\ - \symover{p-1}{\vect{u}}_{n+1} &= \symover{p-1}{\vect{u}}_{n}+\Delta t\vect{\alpha}^{p}_{n} - \end{split} -\end{equation} - -For algorithms in which the degree of the polynomial, $p$, is higher than the -order we require the algorithm to be initialised so that the initial velocity -or acceleration can be computed. The initial velocity or acceleration values -can be obtained by substituting the initial displacement or initial -displacement and velocity values into \eqnref{eqn:generaldynamicnonlinear}, -rearranging and solving. For example consider an the case of a second degree -polynomial and a first order system. Substituing the initial displacement -$\vect{u}_{0}$ into \eqnref{eqn:generaldynamicnonlinear} gives -\begin{equation} - \matr{C}\dot{\vect{u}}_{0}+\matr{K}\vect{u}_{0}+\fnof{\vect{g}}{\vect{u}_{0}}+\bar{\vect{f}}_{0}=\vect{0} -\end{equation} -and therefore an approximation to the initial velocity can be found from -\begin{equation} - \dot{\vect{u}}_{0}=-\inverse{\matr{C}}\pbrac{\matr{K}\vect{u}_{0}+\fnof{\vect{g}}{\vect{u}_{0}}+\bar{\vect{f}}_{0}} -\end{equation} - -Similarily for a third degree polynomial and a second order system the initial -acceleration can be found from -\begin{equation} - \ddot{\vect{u}}_{0}=-\inverse{\matr{M}}\pbrac{\matr{C}\dot{\vect{u}}_{0}+\matr{K}\vect{u}_{0}+ - \fnof{\vect{g}}{\vect{u}_{0}}+\bar{\vect{f}}_{0}} -\end{equation} - -To evaluate the mean weighted load vector, $\bar{\vect{f}}$, we need to -evaluate the integral in \eqnref{eqn:meanweightedloadvector}. In some cases, -however, we can make the assumption that the load vector varies linearly -during the time step. In these cases the mean weighted load vector can be -computed from -\begin{equation} - \bar{\vect{f}}=\theta_{1}\vect{f}_{n+1}+\pbrac{1-\theta_{1}}\vect{f}_{n} -\end{equation} - -\subsubsection{Special SN11 case, p=1} - -For this special case, the mean predicited values are given by -\begin{equation} - \bar{\vect{u}}_{n+1} = \vect{u}_{n} -\end{equation} - -The predicted displacement values are given by -\begin{equation} - \hat{\vect{u}}_{n+1} = \vect{u}_{n} -\end{equation} - -The amplification matrix is given by -\begin{equation} - \matr{A}=\matr{C}+\theta_{1}\Delta t \matr{K} -\end{equation} - -The right hand side vector is given by -\begin{equation} - \vect{b}=\matr{K}\bar{\vect{u}}_{n+1}+\bar{\vect{f}} -\end{equation} - -The nonlinear function is given by -\begin{equation} - \fnof{\vect{\psi}}{\vect{\alpha}^{1}_{n}}=\matr{A}\vect{\alpha}^{1}_{n}+\theta_{1}\fnof{\vect{g}}{\hat{\vect{u}}_{n+1}+ - \Delta t\vect{\alpha}^{1}_{n}}+\pbrac{1-\theta_{1}}\fnof{\vect{g}}{\vect{u}_{n}}+\vect{b}=\vect{0} -\end{equation} - -The Jacobian matrix is given by -\begin{equation} - \fnof{\matr{J}}{\vect{\alpha}^{1}_{n}}=\matr{A}+\theta_{1}\Delta t - \delby{\fnof{\vect{g}}{\hat{\vect{u}}_{n+1}+\Delta t\vect{\alpha}^{1}_{n}}}{\vect{\alpha}^{1}_{n}} -\end{equation} - -And the time step update is given by -\begin{equation} - \vect{u}_{n+1} = \vect{u}_{n}+\Delta t\vect{\alpha}^{1}_{n} -\end{equation} - -\subsubsection{Special SN21 case, p=2} - -For this special case, the mean predicited values are given by -\begin{equation} - \begin{split} - \bar{\vect{u}}_{n+1} &= \vect{u}_{n}+\theta_{1}\Delta t\dot{\vect{u}}_{n}\\ - \dot{\bar{\vect{u}}}_{n+1} &= \dot{\vect{u}}_{n} - \end{split} -\end{equation} -where -\begin{equation} - \dot{\vect{u}}_{0}=-\inverse{\matr{C}}\pbrac{\matr{K}\vect{u}_{0}+\fnof{\vect{g}}{\vect{u}_{0}}+\bar{\vect{f}}_{0}} -\end{equation} - -The predicted displacement values are given by -\begin{equation} - \hat{\vect{u}}_{n+1} = \vect{u}_{n}+\Delta t\dot{\vect{u}}_{n} -\end{equation} - -The amplification matrix is given by -\begin{equation} - \matr{A}=\theta_{1}\Delta t\matr{C}+\dfrac{\theta_{2}{\Delta t}^{2}}{2}\matr{K} -\end{equation} - -The right hand side vector is given by -\begin{equation} - \vect{b}=\matr{C}\dot{\bar{\vect{u}}}_{n+1}+\matr{K}\bar{\vect{u}}_{n+1}+\bar{\vect{f}} -\end{equation} - -The nonlinear function is given by -\begin{equation} - \fnof{\vect{\psi}}{\vect{\alpha}^{2}_{n}}=\matr{A}\vect{\alpha}^{2}_{n}+\theta_{1}\fnof{\vect{g}}{\hat{\vect{u}}_{n+1}+ - \dfrac{{\Delta t}^{2}}{2}\vect{\alpha}^{2}_{n}}+\pbrac{1-\theta_{1}}\fnof{\vect{g}}{\vect{u}_{n}}+\vect{b}=\vect{0} -\end{equation} - -The Jacobian matrix is given by -\begin{equation} - \fnof{\matr{J}}{\vect{\alpha}^{2}_{n}}=\matr{A}+\dfrac{\theta_{1}{\Delta t}^{2}}{2} - \delby{\fnof{\vect{g}}{\hat{\vect{u}}_{n+1}+\dfrac{{\Delta t}^{2}}{2}\vect{\alpha}^{2}_{n}}}{\vect{\alpha}^{2}_{n}} -\end{equation} - -And the time step update is given by -\begin{equation} - \begin{split} - \vect{u}_{n+1} &= \vect{u}_{n}+\Delta t\dot{\vect{u}}_{n} +\dfrac{{\Delta t}^{2}}{2}\vect{\alpha}^{2}_{n} \\ - \dot{\vect{u}}_{n+1} &= \dot{\vect{u}}_{n}+\Delta t\vect{\alpha}^{2}_{n} - \end{split} -\end{equation} - -\subsubsection{Special SN22 case, p=2} - -For this special case, the mean predicited values are given by -\begin{equation} - \begin{split} - \bar{\vect{u}}_{n+1} &= \vect{u}_{n}+\theta_{1}\Delta t\dot{\vect{u}}_{n}\\ - \dot{\bar{\vect{u}}}_{n+1} &= \dot{\vect{u}}_{n} - \end{split} -\end{equation} - -The predicted displacement values are given by -\begin{equation} - \hat{\vect{u}}_{n+1} = \vect{u}_{n}+\Delta t\dot{\vect{u}}_{n} -\end{equation} - -The amplification matrix is given by -\begin{equation} - \matr{A}=\matr{M}+\theta_{1}\Delta t\matr{C}+\dfrac{\theta_{2}{\Delta t}^{2}}{2}\matr{K} -\end{equation} - -The right hand side vector is given by -\begin{equation} - \vect{b}=\matr{C}\dot{\bar{\vect{u}}}_{n+1}+\matr{K}\bar{\vect{u}}_{n+1}+\bar{\vect{f}} -\end{equation} - -The nonlinear function is given by -\begin{equation} - \fnof{\vect{\psi}}{\vect{\alpha}^{2}_{n}}=\matr{A}\vect{\alpha}^{2}_{n}+\theta_{1}\fnof{\vect{g}}{\hat{\vect{u}}_{n+1}+ - \dfrac{{\Delta t}^{2}}{2}\vect{\alpha}^{2}_{n}}+\pbrac{1-\theta_{1}}\fnof{\vect{g}}{\vect{u}_{n}}+\vect{b}=\vect{0} -\end{equation} - -The Jacobian matrix is given by -\begin{equation} - \fnof{\matr{J}}{\vect{\alpha}^{2}_{n}}=\matr{A}+\dfrac{\theta_{1}{\Delta t}^{2}}{2} - \delby{\fnof{\vect{g}}{{\hat{\vect{u}}_{n+1}+\dfrac{{\Delta t}^{2}}{2}\vect{\alpha}^{2}_{n}}}}{\vect{\alpha}^{2}_{n}} -\end{equation} - -And the time step update is given by -\begin{equation} - \begin{split} - \vect{u}_{n+1} &= \vect{u}_{n}+\Delta t\dot{\vect{u}}_{n} +\dfrac{{\Delta t}^{2}}{2}\vect{\alpha}^{2}_{n} \\ - \dot{\vect{u}}_{n+1} &= \dot{\vect{u}}_{n}+\Delta t\vect{\alpha}^{2}_{n} - \end{split} -\end{equation} - -\section{Interface Conditions} - -\subsection{Variational principles} - -The branch of mathematics concerned with the problem of finding a function for -which a certain integral of that function is either at its largest or smallest -value is called the \emph{calculus of variations}. When scientific laws are formulated in terms of the principles of the calculus -of variations they are termed \emph{variational principles}. - -\subsection{Lagrange Multipliers} - diff --git a/doc/notes/TitlePage/TitlePage.tex b/doc/notes/TitlePage/TitlePage.tex deleted file mode 100755 index 468ecdd2..00000000 --- a/doc/notes/TitlePage/TitlePage.tex +++ /dev/null @@ -1,32 +0,0 @@ -\thispagestyle{empty} - -\begin{center} - \huge OpenCMISS NOTES - \vspace{10mm} - - \large http://www.opencmiss.org/ - \vspace{10mm} - - \begin{figure}[htbp] \centering - \epsfig{file=OpenCMISS_Logo.eps,width=8.3cm,height=7cm} - \end{figure} % - \vspace{10mm} - - \vspace{5mm} - \today\\ % today's date - \vspace{20mm} - \small - \textcopyright \thickspace Copyright 2009-\\ - Auckland Bioengineering Institute, University of Auckland, \\ - University of Oxford and \\ - King's College London, University of London. -\end{center} - - - - - -%%% Local Variables: -%%% mode: latex -%%% TeX-master: t -%%% End: diff --git a/doc/notes/svgs/Theory/cubichermiteelem.svg b/doc/notes/svgs/Theory/cubichermiteelem.svg deleted file mode 100755 index 3ddb73b1..00000000 --- a/doc/notes/svgs/Theory/cubichermiteelem.svg +++ /dev/null @@ -1,397 +0,0 @@ - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/#1657# b/src/#1657# deleted file mode 100644 index e69de29b..00000000 diff --git a/src/Burgers_equation_routines.f90.fsicpb b/src/Burgers_equation_routines.f90.fsicpb deleted file mode 100644 index f5acdf87..00000000 --- a/src/Burgers_equation_routines.f90.fsicpb +++ /dev/null @@ -1,2576 +0,0 @@ -!> \file -!> \author David Ladd -!> \brief This module handles all Burgers equation routines. -!> -!> \section LICENSE -!> -!> Version: MPL 1.1/GPL 2.0/LGPL 2.1 -!> -!> The contents of this file are subject to the Mozilla Public License -!> Version 1.1 (the "License"); you may not use this file except in -!> compliance with the License. You may obtain a copy of the License at -!> http://www.mozilla.org/MPL/ -!> -!> Software distributed under the License is distributed on an "AS IS" -!> basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -!> License for the specific language governing rights and limitations -!> under the License. -!> -!> The Original Code is OpenCMISS -!> -!> The Initial Developer of the Original Code is University of Auckland, -!> Auckland, New Zealand, the University of Oxford, Oxford, United -!> Kingdom and King's College, London, United Kingdom. Portions created -!> by the University of Auckland, the University of Oxford and King's -!> College, London are Copyright (C) 2007-2010 by the University of -!> Auckland, the University of Oxford and King's College, London. -!> All Rights Reserved. -!> -!> Contributor(s): Chris Bradley -!> -!> Alternatively, the contents of this file may be used under the terms of -!> either the GNU General Public License Version 2 or later (the "GPL"), or -!> the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), -!> in which case the provisions of the GPL or the LGPL are applicable instead -!> of those above. If you wish to allow use of your version of this file only -!> under the terms of either the GPL or the LGPL, and not to allow others to -!> use your version of this file under the terms of the MPL, indicate your -!> decision by deleting the provisions above and replace them with the notice -!> and other provisions required by the GPL or the LGPL. If you do not delete -!> the provisions above, a recipient may use your version of this file under -!> the terms of any one of the MPL, the GPL or the LGPL. -!> - -!>This module handles all Burgers equation routines. -MODULE BURGERS_EQUATION_ROUTINES - - USE ANALYTIC_ANALYSIS_ROUTINES - USE BaseRoutines - USE BASIS_ROUTINES - USE BOUNDARY_CONDITIONS_ROUTINES - USE Constants - USE CONTROL_LOOP_ROUTINES - USE ControlLoopAccessRoutines - USE DISTRIBUTED_MATRIX_VECTOR - USE DOMAIN_MAPPINGS - USE EquationsRoutines - USE EquationsAccessRoutines - USE EquationsMappingRoutines - USE EquationsMatricesRoutines - USE EQUATIONS_SET_CONSTANTS - USE EquationsSetAccessRoutines - USE FIELD_ROUTINES - USE FieldAccessRoutines - USE FIELD_IO_ROUTINES - USE INPUT_OUTPUT - USE ISO_VARYING_STRING - USE Kinds - USE MATRIX_VECTOR - USE PROBLEM_CONSTANTS - USE Strings - USE SOLVER_ROUTINES - USE SolverAccessRoutines - USE Timer - USE Types - - USE FLUID_MECHANICS_IO_ROUTINES - -#include "macros.h" - - IMPLICIT NONE - - PRIVATE - - !Module parameters - - !Module types - - !Module variables - - !Interfaces - - PUBLIC Burgers_AnalyticFunctionsEvaluate - - PUBLIC Burgers_BoundaryConditionsAnalyticCalculate - - PUBLIC BURGERS_EQUATION_EQUATIONS_SET_SETUP - - PUBLIC Burgers_EquationsSetSolutionMethodSet - - PUBLIC Burgers_EquationsSetSpecificationSet - - PUBLIC Burgers_FiniteElementJacobianEvaluate - - PUBLIC Burgers_FiniteElementResidualEvaluate - - PUBLIC Burgers_ProblemSpecificationSet - - PUBLIC BURGERS_EQUATION_PROBLEM_SETUP - - PUBLIC BURGERS_EQUATION_PRE_SOLVE,BURGERS_EQUATION_POST_SOLVE - -CONTAINS - - ! - !================================================================================================================================ - ! - - - !>Calculates the analytic solution and sets the boundary conditions for an analytic problem. - !Calculates a one-dimensional dynamic solution to the burgers equation - SUBROUTINE Burgers_BoundaryConditionsAnalyticCalculate(EQUATIONS_SET,BOUNDARY_CONDITIONS,err,error,*) - - !Argument variables - TYPE(EQUATIONS_SET_TYPE), POINTER :: EQUATIONS_SET - TYPE(BOUNDARY_CONDITIONS_TYPE), POINTER :: BOUNDARY_CONDITIONS - INTEGER(INTG), INTENT(OUT) :: ERR !EQUATIONS_SET%DEPENDENT%DEPENDENT_FIELD - IF(ASSOCIATED(dependentField)) THEN - geometricField=>EQUATIONS_SET%GEOMETRY%GEOMETRIC_FIELD - IF(ASSOCIATED(geometricField)) THEN - ANALYTIC_FUNCTION_TYPE=EQUATIONS_SET%ANALYTIC%ANALYTIC_FUNCTION_TYPE - ANALYTIC_FIELD=>EQUATIONS_SET%ANALYTIC%ANALYTIC_FIELD - CALL FIELD_NUMBER_OF_COMPONENTS_GET(geometricField,FIELD_U_VARIABLE_TYPE,NUMBER_OF_DIMENSIONS,err,error,*999) - NULLIFY(GEOMETRIC_VARIABLE) - NULLIFY(GEOMETRIC_PARAMETERS) - CALL Field_VariableGet(geometricField,FIELD_U_VARIABLE_TYPE,GEOMETRIC_VARIABLE,err,error,*999) - CALL FIELD_PARAMETER_SET_DATA_GET(geometricField,FIELD_U_VARIABLE_TYPE,FIELD_VALUES_SET_TYPE,GEOMETRIC_PARAMETERS, & - & err,error,*999) - NULLIFY(ANALYTIC_VARIABLE) - NULLIFY(ANALYTIC_PARAMETERS) - IF(ASSOCIATED(ANALYTIC_FIELD)) THEN - CALL Field_VariableGet(ANALYTIC_FIELD,FIELD_U_VARIABLE_TYPE,ANALYTIC_VARIABLE,err,error,*999) - CALL FIELD_PARAMETER_SET_DATA_GET(ANALYTIC_FIELD,FIELD_U_VARIABLE_TYPE,FIELD_VALUES_SET_TYPE, & - & ANALYTIC_PARAMETERS,err,error,*999) - ENDIF - NULLIFY(materialsField) - NULLIFY(MATERIALS_VARIABLE) - NULLIFY(MATERIALS_PARAMETERS) - IF(ASSOCIATED(EQUATIONS_SET%MATERIALS)) THEN - materialsField=>EQUATIONS_SET%MATERIALS%MATERIALS_FIELD - CALL Field_VariableGet(materialsField,FIELD_U_VARIABLE_TYPE,MATERIALS_VARIABLE,err,error,*999) - CALL FIELD_PARAMETER_SET_DATA_GET(materialsField,FIELD_U_VARIABLE_TYPE,FIELD_VALUES_SET_TYPE, & - & MATERIALS_PARAMETERS,err,error,*999) - ENDIF - ANALYTIC_FUNCTION_TYPE=EQUATIONS_SET%ANALYTIC%ANALYTIC_FUNCTION_TYPE - TIME=EQUATIONS_SET%ANALYTIC%ANALYTIC_TIME - IF(ASSOCIATED(BOUNDARY_CONDITIONS)) THEN - DO variable_idx=1,dependentField%NUMBER_OF_VARIABLES - variable_type=dependentField%VARIABLES(variable_idx)%VARIABLE_TYPE - FIELD_VARIABLE=>dependentField%VARIABLE_TYPE_MAP(variable_type)%ptr - IF(ASSOCIATED(FIELD_VARIABLE)) THEN - CALL Field_ParameterSetEnsureCreated(dependentField,variable_type,FIELD_ANALYTIC_VALUES_SET_TYPE,err,error,*999) - DO component_idx=1,FIELD_VARIABLE%NUMBER_OF_COMPONENTS - IF(FIELD_VARIABLE%COMPONENTS(component_idx)%INTERPOLATION_TYPE==FIELD_NODE_BASED_INTERPOLATION) THEN - DOMAIN=>FIELD_VARIABLE%COMPONENTS(component_idx)%DOMAIN - IF(ASSOCIATED(DOMAIN)) THEN - IF(ASSOCIATED(DOMAIN%TOPOLOGY)) THEN - DOMAIN_NODES=>DOMAIN%TOPOLOGY%NODES - IF(ASSOCIATED(DOMAIN_NODES)) THEN - !Loop over the local nodes excluding the ghosts. - DO node_idx=1,DOMAIN_NODES%NUMBER_OF_NODES -!!TODO \todo We should interpolate the geometric field here and the node position. - DO dim_idx=1,NUMBER_OF_DIMENSIONS - !Default to version 1 of each node derivative - local_ny=GEOMETRIC_VARIABLE%COMPONENTS(dim_idx)%PARAM_TO_DOF_MAP%NODE_PARAM2DOF_MAP% & - & NODES(node_idx)%DERIVATIVES(1)%VERSIONS(1) - X(dim_idx)=GEOMETRIC_PARAMETERS(local_ny) - ENDDO !dim_idx - !Loop over the derivatives - DO deriv_idx=1,DOMAIN_NODES%NODES(node_idx)%NUMBER_OF_DERIVATIVES - GLOBAL_DERIV_INDEX=DOMAIN_NODES%NODES(node_idx)%DERIVATIVES(deriv_idx)%GLOBAL_DERIVATIVE_INDEX - CALL Burgers_AnalyticFunctionsEvaluate(EQUATIONS_SET,ANALYTIC_FUNCTION_TYPE, & - & X,TANGENTS,NORMAL,0.0_DP,variable_type,GLOBAL_DERIV_INDEX,component_idx, & - & ANALYTIC_PARAMETERS,MATERIALS_PARAMETERS,INITIAL_VALUE,err,error,*999) - CALL Burgers_AnalyticFunctionsEvaluate(EQUATIONS_SET,ANALYTIC_FUNCTION_TYPE, & - & X,TANGENTS,NORMAL,TIME,variable_type,GLOBAL_DERIV_INDEX,component_idx, & - & ANALYTIC_PARAMETERS,MATERIALS_PARAMETERS,VALUE,err,error,*999) - DO version_idx=1,DOMAIN_NODES%NODES(node_idx)%DERIVATIVES(deriv_idx)%numberOfVersions - local_ny=FIELD_VARIABLE%COMPONENTS(component_idx)%PARAM_TO_DOF_MAP% & - & NODE_PARAM2DOF_MAP%NODES(node_idx)%DERIVATIVES(deriv_idx)%VERSIONS(version_idx) - CALL FIELD_PARAMETER_SET_UPDATE_LOCAL_DOF(dependentField,variable_type, & - & FIELD_ANALYTIC_VALUES_SET_TYPE,local_ny,VALUE,err,error,*999) - IF(variable_type==FIELD_U_VARIABLE_TYPE) THEN - IF(DOMAIN_NODES%NODES(node_idx)%BOUNDARY_NODE) THEN - !If we are a boundary node then set the analytic value on the boundary - CALL BOUNDARY_CONDITIONS_SET_LOCAL_DOF(BOUNDARY_CONDITIONS,dependentField,variable_type, & - & local_ny,BOUNDARY_CONDITION_FIXED,VALUE,err,error,*999) - ELSE - !Set the initial condition. - CALL FIELD_PARAMETER_SET_UPDATE_LOCAL_DOF(dependentField,variable_type, & - & FIELD_VALUES_SET_TYPE,local_ny,INITIAL_VALUE,err,error,*999) - ENDIF - ENDIF - ENDDO !version_idx - ENDDO !deriv_idx - ENDDO !node_idx - ELSE - CALL FlagError("Domain topology nodes is not associated.",err,error,*999) - ENDIF - ELSE - CALL FlagError("Domain topology is not associated.",err,error,*999) - ENDIF - ELSE - CALL FlagError("Domain is not associated.",err,error,*999) - ENDIF - ELSE - CALL FlagError("Only node based interpolation is implemented.",err,error,*999) - ENDIF - ENDDO !component_idx - CALL FIELD_PARAMETER_SET_UPDATE_START(dependentField,variable_type,FIELD_ANALYTIC_VALUES_SET_TYPE, & - & err,error,*999) - CALL FIELD_PARAMETER_SET_UPDATE_START(dependentField,variable_type,FIELD_VALUES_SET_TYPE, & - & err,error,*999) - CALL FIELD_PARAMETER_SET_UPDATE_FINISH(dependentField,variable_type,FIELD_ANALYTIC_VALUES_SET_TYPE, & - & err,error,*999) - CALL FIELD_PARAMETER_SET_UPDATE_FINISH(dependentField,variable_type,FIELD_VALUES_SET_TYPE, & - & err,error,*999) - ELSE - CALL FlagError("Field variable is not associated.",err,error,*999) - ENDIF - ENDDO !variable_idx - CALL FIELD_PARAMETER_SET_DATA_RESTORE(geometricField,FIELD_U_VARIABLE_TYPE,FIELD_VALUES_SET_TYPE, & - & GEOMETRIC_PARAMETERS,err,error,*999) - ELSE - CALL FlagError("Boundary conditions are not associated.",err,error,*999) - ENDIF - ELSE - CALL FlagError("Equations set geometric field is not associated.",err,error,*999) - ENDIF - ELSE - CALL FlagError("Equations set dependent field is not associated.",err,error,*999) - ENDIF - ELSE - CALL FlagError("Equations set analytic is not associated.",err,error,*999) - ENDIF - ELSE - CALL FlagError("Equations set is not associated.",err,error,*999) - ENDIF - - EXITS("Burgers_BoundaryConditionsAnalyticCalculate") - RETURN -999 ERRORSEXITS("Burgers_BoundaryConditionsAnalyticCalculate",err,error) - RETURN 1 - - END SUBROUTINE Burgers_BoundaryConditionsAnalyticCalculate - - - ! - !================================================================================================================================ - ! - !>Evaluate the analytic solutions for a Burgers equation - SUBROUTINE Burgers_AnalyticFunctionsEvaluate(EQUATIONS_SET,ANALYTIC_FUNCTION_TYPE,X, & - & TANGENTS,NORMAL,TIME,VARIABLE_TYPE,GLOBAL_DERIVATIVE,COMPONENT_NUMBER,ANALYTIC_PARAMETERS,MATERIALS_PARAMETERS, & - & VALUE,err,error,*) - - !Argument variables - TYPE(EQUATIONS_SET_TYPE), POINTER, INTENT(IN) :: EQUATIONS_SET !Sets/changes the solution method for a burgers equation type of an fluid mechanics equations set class. - SUBROUTINE Burgers_EquationsSetSolutionMethodSet(EQUATIONS_SET,SOLUTION_METHOD,err,error,*) - - !Argument variables - TYPE(EQUATIONS_SET_TYPE), POINTER :: EQUATIONS_SET !Sets the equation specification for a Burgers type of a fluid mechanics equations set. - SUBROUTINE Burgers_EquationsSetSpecificationSet(equationsSet,specification,err,error,*) - - !Argument variables - TYPE(EQUATIONS_SET_TYPE), POINTER :: equationsSet !Sets up the Burgers equation type of a fluid mechanics equations set class. - SUBROUTINE BURGERS_EQUATION_EQUATIONS_SET_SETUP(EQUATIONS_SET,EQUATIONS_SET_SETUP,err,error,*) - - !Argument variables - TYPE(EQUATIONS_SET_TYPE), POINTER :: EQUATIONS_SET !EQUATIONS_SET%MATERIALS - IF(ASSOCIATED(EQUATIONS_MATERIALS)) THEN - IF(EQUATIONS_SET%SPECIFICATION(3)/=EQUATIONS_SET_INVISCID_BURGERS_SUBTYPE) THEN - !Not an inviscid Burgers equation - IF(EQUATIONS_MATERIALS%MATERIALS_FIELD_AUTO_CREATED) THEN - !Create the auto created materials field - CALL FIELD_CREATE_START(EQUATIONS_SET_SETUP%FIELD_USER_NUMBER,EQUATIONS_SET%REGION,EQUATIONS_MATERIALS% & - & MATERIALS_FIELD,err,error,*999) - CALL FIELD_LABEL_SET(EQUATIONS_MATERIALS%MATERIALS_FIELD,"Materials Field",err,error,*999) - CALL FIELD_TYPE_SET_AND_LOCK(EQUATIONS_MATERIALS%MATERIALS_FIELD,FIELD_MATERIAL_TYPE,err,error,*999) - CALL FIELD_DEPENDENT_TYPE_SET_AND_LOCK(EQUATIONS_MATERIALS%MATERIALS_FIELD,FIELD_INDEPENDENT_TYPE,err,error,*999) - CALL FIELD_MESH_DECOMPOSITION_GET(EQUATIONS_SET%GEOMETRY%GEOMETRIC_FIELD,GEOMETRIC_DECOMPOSITION,err,error,*999) - CALL FIELD_MESH_DECOMPOSITION_SET_AND_LOCK(EQUATIONS_MATERIALS%MATERIALS_FIELD,GEOMETRIC_DECOMPOSITION, & - & err,error,*999) - CALL FIELD_GEOMETRIC_FIELD_SET_AND_LOCK(EQUATIONS_MATERIALS%MATERIALS_FIELD,EQUATIONS_SET%GEOMETRY% & - & GEOMETRIC_FIELD,err,error,*999) - CALL FIELD_NUMBER_OF_VARIABLES_SET_AND_LOCK(EQUATIONS_MATERIALS%MATERIALS_FIELD,1,err,error,*999) - CALL FIELD_VARIABLE_TYPES_SET_AND_LOCK(EQUATIONS_MATERIALS%MATERIALS_FIELD,[FIELD_U_VARIABLE_TYPE], & - & err,error,*999) - CALL FIELD_VARIABLE_LABEL_SET(EQUATIONS_MATERIALS%MATERIALS_FIELD,FIELD_U_VARIABLE_TYPE, & - & "Materials",err,error,*999) - CALL FIELD_DIMENSION_SET_AND_LOCK(EQUATIONS_MATERIALS%MATERIALS_FIELD,FIELD_U_VARIABLE_TYPE, & - & FIELD_VECTOR_DIMENSION_TYPE,err,error,*999) - CALL FIELD_DATA_TYPE_SET_AND_LOCK(EQUATIONS_MATERIALS%MATERIALS_FIELD,FIELD_U_VARIABLE_TYPE, & - & FIELD_DP_TYPE,err,error,*999) - SELECT CASE(EQUATIONS_SET%SPECIFICATION(3)) - CASE(EQUATIONS_SET_BURGERS_SUBTYPE,EQUATIONS_SET_STATIC_BURGERS_SUBTYPE) - !1 materials field component - !i.e., k = viscosity*(-1) in du/dt + k*(d^2u/dx^2)+ u*(du/dx) = 0 - NUMBER_OF_MATERIALS_COMPONENTS=1 - CASE(EQUATIONS_SET_GENERALISED_BURGERS_SUBTYPE) - !3 materials field components - !i.e., a.du/dt + b.(d^2u/dx^2) + c.u*(du/dx) = 0 - NUMBER_OF_MATERIALS_COMPONENTS=3 - CASE DEFAULT - localError="The action type of "//TRIM(NUMBER_TO_VSTRING(EQUATIONS_SET_SETUP%ACTION_TYPE,"*",err,error))// & - & " for a setup type of "//TRIM(NUMBER_TO_VSTRING(EQUATIONS_SET_SETUP%SETUP_TYPE,"*",err,error))// & - & " is invalid for a nonlinear Burgers equation." - CALL FlagError(localError,err,error,*999) - END SELECT - !Set the number of materials components - CALL FIELD_NUMBER_OF_COMPONENTS_SET_AND_LOCK(EQUATIONS_MATERIALS%MATERIALS_FIELD,FIELD_U_VARIABLE_TYPE, & - & NUMBER_OF_MATERIALS_COMPONENTS,err,error,*999) - !Default the materials components to the 1st geometric component interpolation setup with constant interpolation - CALL FIELD_COMPONENT_MESH_COMPONENT_GET(EQUATIONS_SET%GEOMETRY%GEOMETRIC_FIELD,FIELD_U_VARIABLE_TYPE, & - & 1,GEOMETRIC_MESH_COMPONENT,err,error,*999) - DO component_idx=1,NUMBER_OF_MATERIALS_COMPONENTS - CALL FIELD_COMPONENT_MESH_COMPONENT_SET(EQUATIONS_MATERIALS%MATERIALS_FIELD,FIELD_U_VARIABLE_TYPE, & - & component_idx,GEOMETRIC_MESH_COMPONENT,err,error,*999) - CALL FIELD_COMPONENT_INTERPOLATION_SET(EQUATIONS_MATERIALS%MATERIALS_FIELD,FIELD_U_VARIABLE_TYPE, & - & component_idx,FIELD_CONSTANT_INTERPOLATION,err,error,*999) - ENDDO !component_idx - !Default the field scaling to that of the geometric field - CALL FIELD_SCALING_TYPE_GET(EQUATIONS_SET%GEOMETRY%GEOMETRIC_FIELD,GEOMETRIC_SCALING_TYPE,err,error,*999) - CALL FIELD_SCALING_TYPE_SET(EQUATIONS_MATERIALS%MATERIALS_FIELD,GEOMETRIC_SCALING_TYPE,err,error,*999) - ELSE - !Check the user specified field - CALL FIELD_TYPE_CHECK(EQUATIONS_SET_SETUP%FIELD,FIELD_MATERIAL_TYPE,err,error,*999) - CALL FIELD_DEPENDENT_TYPE_CHECK(EQUATIONS_SET_SETUP%FIELD,FIELD_INDEPENDENT_TYPE,err,error,*999) - CALL FIELD_NUMBER_OF_VARIABLES_CHECK(EQUATIONS_SET_SETUP%FIELD,1,err,error,*999) - CALL FIELD_VARIABLE_TYPES_CHECK(EQUATIONS_SET_SETUP%FIELD,[FIELD_U_VARIABLE_TYPE],err,error,*999) - CALL FIELD_DATA_TYPE_CHECK(EQUATIONS_SET_SETUP%FIELD,FIELD_U_VARIABLE_TYPE,FIELD_DP_TYPE,err,error,*999) - SELECT CASE(EQUATIONS_SET%SPECIFICATION(3)) - CASE(EQUATIONS_SET_BURGERS_SUBTYPE,EQUATIONS_SET_STATIC_BURGERS_SUBTYPE) - !1 materials field component - !i.e., k = viscosity*(-1) in du/dt + k*(d^2u/dx^2)+ u*(du/dx) = 0 - NUMBER_OF_MATERIALS_COMPONENTS=1 - CALL FIELD_DIMENSION_CHECK(EQUATIONS_SET_SETUP%FIELD,FIELD_U_VARIABLE_TYPE,FIELD_SCALAR_DIMENSION_TYPE, & - & err,error,*999) - CASE(EQUATIONS_SET_GENERALISED_BURGERS_SUBTYPE) - !3 materials field components - !i.e., a.du/dt + b.(d^2u/dx^2) + c.u*(du/dx) = 0 - NUMBER_OF_MATERIALS_COMPONENTS=3 - CALL FIELD_DIMENSION_CHECK(EQUATIONS_SET_SETUP%FIELD,FIELD_U_VARIABLE_TYPE,FIELD_VECTOR_DIMENSION_TYPE, & - & err,error,*999) - CASE DEFAULT - localError="The action type of "//TRIM(NUMBER_TO_VSTRING(EQUATIONS_SET_SETUP%ACTION_TYPE,"*",err,error))// & - & " for a setup type of "//TRIM(NUMBER_TO_VSTRING(EQUATIONS_SET_SETUP%SETUP_TYPE,"*",err,error))// & - & " is invalid for a nonlinear Burgers equation." - CALL FlagError(localError,err,error,*999) - END SELECT - CALL FIELD_NUMBER_OF_COMPONENTS_CHECK(EQUATIONS_SET_SETUP%FIELD,FIELD_U_VARIABLE_TYPE, & - & NUMBER_OF_MATERIALS_COMPONENTS,err,error,*999) - ENDIF - ENDIF - ELSE - CALL FlagError("Equations set materials is not associated.",err,error,*999) - ENDIF - CASE(EQUATIONS_SET_SETUP_FINISH_ACTION) - EQUATIONS_MATERIALS=>EQUATIONS_SET%MATERIALS - IF(ASSOCIATED(EQUATIONS_MATERIALS)) THEN - IF(EQUATIONS_SET%SPECIFICATION(3)/=EQUATIONS_SET_INVISCID_BURGERS_SUBTYPE) THEN - !Not an inviscid Burgers equation - IF(EQUATIONS_MATERIALS%MATERIALS_FIELD_AUTO_CREATED) THEN - !Finish creating the materials field - CALL FIELD_CREATE_FINISH(EQUATIONS_MATERIALS%MATERIALS_FIELD,err,error,*999) - !Set the default values for the materials field - SELECT CASE(EQUATIONS_SET%SPECIFICATION(3)) - CASE(EQUATIONS_SET_BURGERS_SUBTYPE,EQUATIONS_SET_STATIC_BURGERS_SUBTYPE) - !1 materials field component. Default to - !du/dt - d^2u/dx^2 + u*(du/dx) = 0 - CALL FIELD_COMPONENT_VALUES_INITIALISE(EQUATIONS_MATERIALS%MATERIALS_FIELD,FIELD_U_VARIABLE_TYPE, & - & FIELD_VALUES_SET_TYPE,1,-1.0_DP,err,error,*999) - CASE(EQUATIONS_SET_GENERALISED_BURGERS_SUBTYPE) - !3 materials field components. Default to - !du/dt - d^2u/dx^2 + u*(du/dx) = 0 - CALL FIELD_COMPONENT_VALUES_INITIALISE(EQUATIONS_MATERIALS%MATERIALS_FIELD,FIELD_U_VARIABLE_TYPE, & - & FIELD_VALUES_SET_TYPE,1,1.0_DP,err,error,*999) - CALL FIELD_COMPONENT_VALUES_INITIALISE(EQUATIONS_MATERIALS%MATERIALS_FIELD,FIELD_U_VARIABLE_TYPE, & - & FIELD_VALUES_SET_TYPE,2,-1.0_DP,err,error,*999) - CALL FIELD_COMPONENT_VALUES_INITIALISE(EQUATIONS_MATERIALS%MATERIALS_FIELD,FIELD_U_VARIABLE_TYPE, & - & FIELD_VALUES_SET_TYPE,3,1.0_DP,err,error,*999) - CASE DEFAULT - localError="The action type of "//TRIM(NUMBER_TO_VSTRING(EQUATIONS_SET_SETUP%ACTION_TYPE,"*",err,error))// & - & " for a setup type of "//TRIM(NUMBER_TO_VSTRING(EQUATIONS_SET_SETUP%SETUP_TYPE,"*",err,error))// & - & " is invalid for a nonlinear Burgers equation." - CALL FlagError(localError,err,error,*999) - END SELECT - ENDIF - ENDIF - ELSE - CALL FlagError("Equations set materials is not associated.",err,error,*999) - ENDIF - CASE DEFAULT - localError="The action type of "//TRIM(NUMBER_TO_VSTRING(EQUATIONS_SET_SETUP%ACTION_TYPE,"*",err,error))// & - & " for a setup type of "//TRIM(NUMBER_TO_VSTRING(EQUATIONS_SET_SETUP%SETUP_TYPE,"*",err,error))// & - & " is invalid for a nonlinear Burgers equation." - CALL FlagError(localError,err,error,*999) - END SELECT - !----------------------------------------------------------------- - ! S o u r c e f i e l d - !----------------------------------------------------------------- - CASE(EQUATIONS_SET_SETUP_SOURCE_TYPE) - SELECT CASE(EQUATIONS_SET_SETUP%ACTION_TYPE) - CASE(EQUATIONS_SET_SETUP_START_ACTION) - !Do nothing - CASE(EQUATIONS_SET_SETUP_FINISH_ACTION) - !Do nothing - CASE DEFAULT - localError="The action type of "//TRIM(NUMBER_TO_VSTRING(EQUATIONS_SET_SETUP%ACTION_TYPE,"*",err,error))// & - & " for a setup type of "//TRIM(NUMBER_TO_VSTRING(EQUATIONS_SET_SETUP%SETUP_TYPE,"*",err,error))// & - & " is invalid for a nonlinear Burgers equation." - CALL FlagError(localError,err,error,*999) - END SELECT - !----------------------------------------------------------------- - ! A n a l y t i c t y p e - !----------------------------------------------------------------- - CASE(EQUATIONS_SET_SETUP_ANALYTIC_TYPE) - SELECT CASE(EQUATIONS_SET_SETUP%ACTION_TYPE) - CASE(EQUATIONS_SET_SETUP_START_ACTION) - EQUATIONS_ANALYTIC=>EQUATIONS_SET%ANALYTIC - IF(ASSOCIATED(EQUATIONS_ANALYTIC)) THEN - IF(EQUATIONS_SET%DEPENDENT%DEPENDENT_FINISHED) THEN - dependentField=>EQUATIONS_SET%DEPENDENT%DEPENDENT_FIELD - IF(ASSOCIATED(dependentField)) THEN - EQUATIONS_MATERIALS=>EQUATIONS_SET%MATERIALS - IF(ASSOCIATED(EQUATIONS_MATERIALS)) THEN - IF(EQUATIONS_MATERIALS%MATERIALS_FINISHED) THEN - geometricField=>EQUATIONS_SET%GEOMETRY%GEOMETRIC_FIELD - IF(ASSOCIATED(geometricField)) THEN - CALL FIELD_NUMBER_OF_COMPONENTS_GET(geometricField,FIELD_U_VARIABLE_TYPE, & - & NUMBER_OF_GEOMETRIC_COMPONENTS,err,error,*999) - SELECT CASE(EQUATIONS_SET%SPECIFICATION(3)) - CASE(EQUATIONS_SET_BURGERS_SUBTYPE) - SELECT CASE(EQUATIONS_SET_SETUP%ANALYTIC_FUNCTION_TYPE) - CASE(EQUATIONS_SET_BURGERS_EQUATION_ONE_DIM_1) - !Check that domain is 1D - IF(NUMBER_OF_GEOMETRIC_COMPONENTS/=1) THEN - localError="The number of geometric dimensions of "// & - & TRIM(NUMBER_TO_VSTRING(NUMBER_OF_GEOMETRIC_COMPONENTS,"*",err,error))// & - & " is invalid. The analytic function type of "// & - & TRIM(NUMBER_TO_VSTRING(EQUATIONS_SET_SETUP%ANALYTIC_FUNCTION_TYPE,"*",err,error))// & - & " requires that there be 1 geometric dimension." - CALL FlagError(localError,err,error,*999) - ENDIF - !Check the materials values are constant - CALL FIELD_COMPONENT_INTERPOLATION_CHECK(EQUATIONS_MATERIALS%MATERIALS_FIELD,FIELD_U_VARIABLE_TYPE, & - & 1,FIELD_CONSTANT_INTERPOLATION,err,error,*999) - !Set analytic function type - EQUATIONS_SET%ANALYTIC%ANALYTIC_FUNCTION_TYPE=EQUATIONS_SET_BURGERS_EQUATION_ONE_DIM_1 - NUMBER_OF_ANALYTIC_COMPONENTS=1 - CASE DEFAULT - localError="The specified analytic function type of "// & - & TRIM(NUMBER_TO_VSTRING(EQUATIONS_SET_SETUP%ANALYTIC_FUNCTION_TYPE,"*",err,error))// & - & " is invalid for a Burgers equation." - CALL FlagError(localError,err,error,*999) - END SELECT - CASE(EQUATIONS_SET_GENERALISED_BURGERS_SUBTYPE) - SELECT CASE(EQUATIONS_SET_SETUP%ANALYTIC_FUNCTION_TYPE) - CASE(EQUATIONS_SET_GENERALISED_BURGERS_EQUATION_ONE_DIM_1, & - & EQUATIONS_SET_GENERALISED_BURGERS_EQUATION_ONE_DIM_2) - !Check that domain is 1D - IF(NUMBER_OF_GEOMETRIC_COMPONENTS/=1) THEN - localError="The number of geometric dimensions of "// & - & TRIM(NUMBER_TO_VSTRING(NUMBER_OF_GEOMETRIC_COMPONENTS,"*",err,error))// & - & " is invalid. The analytic function type of "// & - & TRIM(NUMBER_TO_VSTRING(EQUATIONS_SET_SETUP%ANALYTIC_FUNCTION_TYPE,"*",err,error))// & - & " requires that there be 1 geometric dimension." - CALL FlagError(localError,err,error,*999) - ENDIF - !Check the materials values are constant - CALL FIELD_COMPONENT_INTERPOLATION_CHECK(EQUATIONS_MATERIALS%MATERIALS_FIELD,FIELD_U_VARIABLE_TYPE, & - & 1,FIELD_CONSTANT_INTERPOLATION,err,error,*999) - CALL FIELD_COMPONENT_INTERPOLATION_CHECK(EQUATIONS_MATERIALS%MATERIALS_FIELD,FIELD_U_VARIABLE_TYPE, & - & 2,FIELD_CONSTANT_INTERPOLATION,err,error,*999) - CALL FIELD_COMPONENT_INTERPOLATION_CHECK(EQUATIONS_MATERIALS%MATERIALS_FIELD,FIELD_U_VARIABLE_TYPE, & - & 3,FIELD_CONSTANT_INTERPOLATION,err,error,*999) - !Set analytic function type - EQUATIONS_SET%ANALYTIC%ANALYTIC_FUNCTION_TYPE=EQUATIONS_SET_SETUP%ANALYTIC_FUNCTION_TYPE - NUMBER_OF_ANALYTIC_COMPONENTS=2 - CASE DEFAULT - localError="The specified analytic function type of "// & - & TRIM(NUMBER_TO_VSTRING(EQUATIONS_SET_SETUP%ANALYTIC_FUNCTION_TYPE,"*",err,error))// & - & " is invalid for a generalised Burgers equation." - CALL FlagError(localError,err,error,*999) - END SELECT - CASE(EQUATIONS_SET_STATIC_BURGERS_SUBTYPE) - CALL FlagError("Not implemented.",err,error,*999) - CASE(EQUATIONS_SET_INVISCID_BURGERS_SUBTYPE) - CALL FlagError("Not implemented.",err,error,*999) - CASE DEFAULT - localError="The equation set subtype of "// & - & TRIM(NUMBER_TO_VSTRING(EQUATIONS_SET%SPECIFICATION(3),"*",err,error))// & - & " is invalid for an analytical nonlinear Burgers equation." - CALL FlagError(localError,err,error,*999) - END SELECT - !Create analytic field if required - IF(NUMBER_OF_ANALYTIC_COMPONENTS>=1) THEN - IF(EQUATIONS_ANALYTIC%ANALYTIC_FIELD_AUTO_CREATED) THEN - !Create the auto created source field - CALL FIELD_CREATE_START(EQUATIONS_SET_SETUP%FIELD_USER_NUMBER,EQUATIONS_SET%REGION, & - & EQUATIONS_ANALYTIC%ANALYTIC_FIELD,err,error,*999) - CALL FIELD_LABEL_SET(EQUATIONS_ANALYTIC%ANALYTIC_FIELD,"Analytic Field",err,error,*999) - CALL FIELD_TYPE_SET_AND_LOCK(EQUATIONS_ANALYTIC%ANALYTIC_FIELD,FIELD_GENERAL_TYPE,err,error,*999) - CALL FIELD_DEPENDENT_TYPE_SET_AND_LOCK(EQUATIONS_ANALYTIC%ANALYTIC_FIELD,FIELD_INDEPENDENT_TYPE, & - & err,error,*999) - CALL FIELD_MESH_DECOMPOSITION_GET(EQUATIONS_SET%GEOMETRY%GEOMETRIC_FIELD,GEOMETRIC_DECOMPOSITION, & - & err,error,*999) - CALL FIELD_MESH_DECOMPOSITION_SET_AND_LOCK(EQUATIONS_ANALYTIC%ANALYTIC_FIELD, & - & GEOMETRIC_DECOMPOSITION,err,error,*999) - CALL FIELD_GEOMETRIC_FIELD_SET_AND_LOCK(EQUATIONS_ANALYTIC%ANALYTIC_FIELD,EQUATIONS_SET%GEOMETRY% & - & GEOMETRIC_FIELD,err,error,*999) - CALL FIELD_NUMBER_OF_VARIABLES_SET_AND_LOCK(EQUATIONS_ANALYTIC%ANALYTIC_FIELD,1,err,error,*999) - CALL FIELD_VARIABLE_TYPES_SET_AND_LOCK(EQUATIONS_ANALYTIC%ANALYTIC_FIELD,[FIELD_U_VARIABLE_TYPE], & - & err,error,*999) - CALL FIELD_VARIABLE_LABEL_SET(EQUATIONS_ANALYTIC%ANALYTIC_FIELD,FIELD_U_VARIABLE_TYPE, & - & "Analytic",err,error,*999) - CALL FIELD_DIMENSION_SET_AND_LOCK(EQUATIONS_ANALYTIC%ANALYTIC_FIELD,FIELD_U_VARIABLE_TYPE, & - & FIELD_VECTOR_DIMENSION_TYPE,err,error,*999) - CALL FIELD_DATA_TYPE_SET_AND_LOCK(EQUATIONS_ANALYTIC%ANALYTIC_FIELD,FIELD_U_VARIABLE_TYPE, & - & FIELD_DP_TYPE,err,error,*999) - !Set the number of analytic components - CALL FIELD_NUMBER_OF_COMPONENTS_SET_AND_LOCK(EQUATIONS_ANALYTIC%ANALYTIC_FIELD,FIELD_U_VARIABLE_TYPE, & - & NUMBER_OF_ANALYTIC_COMPONENTS,err,error,*999) - !Default the analytic components to the 1st geometric interpolation setup with constant interpolation - CALL FIELD_COMPONENT_MESH_COMPONENT_GET(EQUATIONS_SET%GEOMETRY%GEOMETRIC_FIELD, & - & FIELD_U_VARIABLE_TYPE,1,GEOMETRIC_MESH_COMPONENT,err,error,*999) - DO component_idx=1,NUMBER_OF_ANALYTIC_COMPONENTS - CALL FIELD_COMPONENT_MESH_COMPONENT_SET(EQUATIONS_ANALYTIC%ANALYTIC_FIELD,FIELD_U_VARIABLE_TYPE, & - & component_idx,GEOMETRIC_MESH_COMPONENT,err,error,*999) - CALL FIELD_COMPONENT_INTERPOLATION_SET(EQUATIONS_ANALYTIC%ANALYTIC_FIELD,FIELD_U_VARIABLE_TYPE, & - & component_idx,FIELD_CONSTANT_INTERPOLATION,err,error,*999) - ENDDO !component_idx - !Default the field scaling to that of the geometric field - CALL FIELD_SCALING_TYPE_GET(EQUATIONS_SET%GEOMETRY%GEOMETRIC_FIELD,GEOMETRIC_SCALING_TYPE, & - & err,error,*999) - CALL FIELD_SCALING_TYPE_SET(EQUATIONS_ANALYTIC%ANALYTIC_FIELD,GEOMETRIC_SCALING_TYPE,err,error,*999) - ELSE - !Check the user specified field - CALL FIELD_TYPE_CHECK(EQUATIONS_SET_SETUP%FIELD,FIELD_GENERAL_TYPE,err,error,*999) - CALL FIELD_DEPENDENT_TYPE_CHECK(EQUATIONS_SET_SETUP%FIELD,FIELD_INDEPENDENT_TYPE,err,error,*999) - CALL FIELD_NUMBER_OF_VARIABLES_CHECK(EQUATIONS_SET_SETUP%FIELD,1,err,error,*999) - CALL FIELD_VARIABLE_TYPES_CHECK(EQUATIONS_SET_SETUP%FIELD,[FIELD_U_VARIABLE_TYPE],err,error,*999) - IF(NUMBER_OF_ANALYTIC_COMPONENTS==1) THEN - CALL FIELD_DIMENSION_CHECK(EQUATIONS_SET_SETUP%FIELD,FIELD_U_VARIABLE_TYPE, & - & FIELD_SCALAR_DIMENSION_TYPE,err,error,*999) - ELSE - CALL FIELD_DIMENSION_CHECK(EQUATIONS_SET_SETUP%FIELD,FIELD_U_VARIABLE_TYPE, & - & FIELD_VECTOR_DIMENSION_TYPE,err,error,*999) - ENDIF - CALL FIELD_DATA_TYPE_CHECK(EQUATIONS_SET_SETUP%FIELD,FIELD_U_VARIABLE_TYPE,FIELD_DP_TYPE, & - & err,error,*999) - CALL FIELD_NUMBER_OF_COMPONENTS_CHECK(EQUATIONS_SET_SETUP%FIELD,FIELD_U_VARIABLE_TYPE, & - & NUMBER_OF_ANALYTIC_COMPONENTS,err,error,*999) - ENDIF - ENDIF - ELSE - CALL FlagError("Equations set materials is not finished.",err,error,*999) - ENDIF - ELSE - CALL FlagError("Equations set materials is not associated.",err,error,*999) - ENDIF - ELSE - CALL FlagError("Equations set geometric field is not associated.",err,error,*999) - ENDIF - ELSE - CALL FlagError("Equations set dependent field is not associated.",err,error,*999) - ENDIF - ELSE - CALL FlagError("Equations set dependent field has not been finished.",err,error,*999) - ENDIF - ELSE - CALL FlagError("Equations analytic is not associated.",err,error,*999) - ENDIF - CASE(EQUATIONS_SET_SETUP_FINISH_ACTION) - EQUATIONS_ANALYTIC=>EQUATIONS_SET%ANALYTIC - IF(ASSOCIATED(EQUATIONS_ANALYTIC)) THEN - ANALYTIC_FIELD=>EQUATIONS_ANALYTIC%ANALYTIC_FIELD - IF(ASSOCIATED(ANALYTIC_FIELD)) THEN - IF(EQUATIONS_ANALYTIC%ANALYTIC_FIELD_AUTO_CREATED) THEN - !Finish creating the analytic field - CALL FIELD_CREATE_FINISH(EQUATIONS_ANALYTIC%ANALYTIC_FIELD,err,error,*999) - !Set the default values for the analytic field - SELECT CASE(EQUATIONS_SET%SPECIFICATION(3)) - CASE(EQUATIONS_SET_BURGERS_SUBTYPE) - !Default the analytic parameter value to 0.0 - CALL FIELD_COMPONENT_VALUES_INITIALISE(EQUATIONS_ANALYTIC%ANALYTIC_FIELD,FIELD_U_VARIABLE_TYPE, & - & FIELD_VALUES_SET_TYPE,1,0.0_DP,err,error,*999) - CASE(EQUATIONS_SET_GENERALISED_BURGERS_SUBTYPE) - !Default the analytic parameter values to 1.0 - CALL FIELD_COMPONENT_VALUES_INITIALISE(EQUATIONS_ANALYTIC%ANALYTIC_FIELD,FIELD_U_VARIABLE_TYPE, & - & FIELD_VALUES_SET_TYPE,1,1.0_DP,err,error,*999) - CALL FIELD_COMPONENT_VALUES_INITIALISE(EQUATIONS_ANALYTIC%ANALYTIC_FIELD,FIELD_U_VARIABLE_TYPE, & - & FIELD_VALUES_SET_TYPE,2,1.0_DP,err,error,*999) - CASE(EQUATIONS_SET_STATIC_BURGERS_SUBTYPE) - CALL FlagError("Not implemented.",err,error,*999) - CASE(EQUATIONS_SET_INVISCID_BURGERS_SUBTYPE) - CALL FlagError("Not implemented.",err,error,*999) - CASE DEFAULT - localError="The equation set subtype of "// & - & TRIM(NUMBER_TO_VSTRING(EQUATIONS_SET%SPECIFICATION(3),"*",err,error))// & - & " is invalid for an analytical nonlinear Burgers equation." - CALL FlagError(localError,err,error,*999) - END SELECT - ENDIF - ENDIF - ELSE - CALL FlagError("Equations set analytic is not associated.",err,error,*999) - ENDIF - CASE DEFAULT - localError="The action type of "//TRIM(NUMBER_TO_VSTRING(EQUATIONS_SET_SETUP%ACTION_TYPE,"*",err,error))// & - & " for a setup type of "//TRIM(NUMBER_TO_VSTRING(EQUATIONS_SET_SETUP%SETUP_TYPE,"*",err,error))// & - & " is invalid for a nonlinear Burgers equation." - CALL FlagError(localError,err,error,*999) - END SELECT - !----------------------------------------------------------------- - ! E q u a t i o n s t y p e - !----------------------------------------------------------------- - CASE(EQUATIONS_SET_SETUP_EQUATIONS_TYPE) - SELECT CASE (EQUATIONS_SET%SPECIFICATION(3)) - CASE(EQUATIONS_SET_BURGERS_SUBTYPE,EQUATIONS_SET_GENERALISED_BURGERS_SUBTYPE,EQUATIONS_SET_INVISCID_BURGERS_SUBTYPE) - SELECT CASE(EQUATIONS_SET_SETUP%ACTION_TYPE) - CASE(EQUATIONS_SET_SETUP_START_ACTION) - IF(EQUATIONS_SET%DEPENDENT%DEPENDENT_FINISHED) THEN - CALL Equations_CreateStart(EQUATIONS_SET,EQUATIONS,err,error,*999) - CALL Equations_LinearityTypeSet(equations,EQUATIONS_NONLINEAR,err,error,*999) - CALL Equations_TimeDependenceTypeSet(equations,EQUATIONS_FIRST_ORDER_DYNAMIC,err,error,*999) - ELSE - CALL FlagError("Equations set dependent field has not been finished.",err,error,*999) - ENDIF - CASE(EQUATIONS_SET_SETUP_FINISH_ACTION) - SELECT CASE(EQUATIONS_SET%SOLUTION_METHOD) - CASE(EQUATIONS_SET_FEM_SOLUTION_METHOD) - !Finish the equations - CALL EquationsSet_EquationsGet(EQUATIONS_SET,EQUATIONS,err,error,*999) - CALL Equations_CreateFinish(equations,err,error,*999) - NULLIFY(vectorEquations) - CALL Equations_VectorEquationsGet(equations,vectorEquations,err,error,*999) - !Create the equations mapping. - CALL EquationsMapping_VectorCreateStart(vectorEquations,FIELD_DELUDELN_VARIABLE_TYPE,vectorMapping,err,error,*999) - IF(EQUATIONS_SET%SPECIFICATION(3)==EQUATIONS_SET_INVISCID_BURGERS_SUBTYPE) THEN - CALL EquationsMapping_DynamicMatricesSet(vectorMapping,.TRUE.,.FALSE.,err,error,*999) - ELSE - CALL EquationsMapping_DynamicMatricesSet(vectorMapping,.TRUE.,.TRUE.,err,error,*999) - ENDIF - CALL EquationsMapping_ResidualVariableTypesSet(vectorMapping,[FIELD_U_VARIABLE_TYPE],err,error,*999) - CALL EquationsMapping_DynamicVariableTypeSet(vectorMapping,FIELD_U_VARIABLE_TYPE,err,error,*999) - CALL EquationsMapping_RHSVariableTypeSet(vectorMapping,FIELD_DELUDELN_VARIABLE_TYPE,err,error,*999) - CALL EquationsMapping_VectorCreateFinish(vectorMapping,err,error,*999) - !Create the equations matrices - CALL EquationsMatrices_VectorCreateStart(vectorEquations,vectorMatrices,err,error,*999) - !Set up matrix storage and structure - IF(equations%lumpingType==EQUATIONS_LUMPED_MATRICES) THEN - !Set up lumping - IF(EQUATIONS_SET%SPECIFICATION(3)==EQUATIONS_SET_INVISCID_BURGERS_SUBTYPE) THEN - CALL EquationsMatrices_DynamicLumpingTypeSet(vectorMatrices, & - & [EQUATIONS_MATRIX_LUMPED],err,error,*999) - ELSE - CALL EquationsMatrices_DynamicLumpingTypeSet(vectorMatrices, & - & [EQUATIONS_MATRIX_UNLUMPED,EQUATIONS_MATRIX_LUMPED],err,error,*999) - ENDIF - SELECT CASE(equations%sparsityType) - CASE(EQUATIONS_MATRICES_FULL_MATRICES) - IF(EQUATIONS_SET%SPECIFICATION(3)==EQUATIONS_SET_INVISCID_BURGERS_SUBTYPE) THEN - CALL EquationsMatrices_DynamicStorageTypeSet(vectorMatrices, & - & [DISTRIBUTED_MATRIX_DIAGONAL_STORAGE_TYPE],err,error,*999) - CALL EquationsMatrices_DynamicStructureTypeSet(vectorMatrices, & - [EQUATIONS_MATRIX_DIAGONAL_STRUCTURE],err,error,*999) - ELSE - CALL EquationsMatrices_DynamicStorageTypeSet(vectorMatrices, & - & [DISTRIBUTED_MATRIX_BLOCK_STORAGE_TYPE,DISTRIBUTED_MATRIX_DIAGONAL_STORAGE_TYPE],err,error,*999) - CALL EquationsMatrices_DynamicStructureTypeSet(vectorMatrices, & - [EQUATIONS_MATRIX_FEM_STRUCTURE,EQUATIONS_MATRIX_DIAGONAL_STRUCTURE],err,error,*999) - ENDIF - CALL EquationsMatrices_NonlinearStorageTypeSet(vectorMatrices,DISTRIBUTED_MATRIX_BLOCK_STORAGE_TYPE, & - & err,error,*999) - CASE(EQUATIONS_MATRICES_SPARSE_MATRICES) - IF(EQUATIONS_SET%SPECIFICATION(3)==EQUATIONS_SET_INVISCID_BURGERS_SUBTYPE) THEN - CALL EquationsMatrices_DynamicStorageTypeSet(vectorMatrices, & - & [DISTRIBUTED_MATRIX_DIAGONAL_STORAGE_TYPE],err,error,*999) - CALL EquationsMatrices_DynamicStructureTypeSet(vectorMatrices, & - & [EQUATIONS_MATRIX_DIAGONAL_STRUCTURE],err,error,*999) - ELSE - CALL EquationsMatrices_DynamicStorageTypeSet(vectorMatrices, & - & [DISTRIBUTED_MATRIX_COMPRESSED_ROW_STORAGE_TYPE,DISTRIBUTED_MATRIX_DIAGONAL_STORAGE_TYPE],err,error,*999) - CALL EquationsMatrices_DynamicStructureTypeSet(vectorMatrices, & - & [EQUATIONS_MATRIX_FEM_STRUCTURE,EQUATIONS_MATRIX_DIAGONAL_STRUCTURE],err,error,*999) - ENDIF - CALL EquationsMatrices_NonlinearStorageTypeSet(vectorMatrices, & - & DISTRIBUTED_MATRIX_COMPRESSED_ROW_STORAGE_TYPE,err,error,*999) - CALL EquationsMatrices_NonlinearStructureTypeSet(vectorMatrices,EQUATIONS_MATRIX_FEM_STRUCTURE, & - & err,error,*999) - CASE DEFAULT - localError="The equations matrices sparsity type of "// & - & TRIM(NUMBER_TO_VSTRING(equations%sparsityType,"*",err,error))//" is invalid." - CALL FlagError(localError,err,error,*999) - END SELECT - ELSE - SELECT CASE(equations%sparsityType) - CASE(EQUATIONS_MATRICES_FULL_MATRICES) - IF(EQUATIONS_SET%SPECIFICATION(3)==EQUATIONS_SET_INVISCID_BURGERS_SUBTYPE) THEN - CALL EquationsMatrices_DynamicStorageTypeSet(vectorMatrices, & - & [DISTRIBUTED_MATRIX_BLOCK_STORAGE_TYPE],err,error,*999) - ELSE - CALL EquationsMatrices_DynamicStorageTypeSet(vectorMatrices, & - & [DISTRIBUTED_MATRIX_BLOCK_STORAGE_TYPE,DISTRIBUTED_MATRIX_BLOCK_STORAGE_TYPE],err,error,*999) - ENDIF - CALL EquationsMatrices_NonlinearStorageTypeSet(vectorMatrices,DISTRIBUTED_MATRIX_BLOCK_STORAGE_TYPE, & - & err,error,*999) - CASE(EQUATIONS_MATRICES_SPARSE_MATRICES) - IF(EQUATIONS_SET%SPECIFICATION(3)==EQUATIONS_SET_INVISCID_BURGERS_SUBTYPE) THEN - CALL EquationsMatrices_DynamicStorageTypeSet(vectorMatrices, & - & [DISTRIBUTED_MATRIX_COMPRESSED_ROW_STORAGE_TYPE], & - & err,error,*999) - CALL EquationsMatrices_DynamicStructureTypeSet(vectorMatrices, & - [EQUATIONS_MATRIX_FEM_STRUCTURE],err,error,*999) - ELSE - CALL EquationsMatrices_DynamicStorageTypeSet(vectorMatrices, & - & [DISTRIBUTED_MATRIX_COMPRESSED_ROW_STORAGE_TYPE,DISTRIBUTED_MATRIX_COMPRESSED_ROW_STORAGE_TYPE], & - & err,error,*999) - CALL EquationsMatrices_DynamicStructureTypeSet(vectorMatrices, & - [EQUATIONS_MATRIX_FEM_STRUCTURE,EQUATIONS_MATRIX_FEM_STRUCTURE],err,error,*999) - ENDIF - CALL EquationsMatrices_NonlinearStorageTypeSet(vectorMatrices, & - & DISTRIBUTED_MATRIX_COMPRESSED_ROW_STORAGE_TYPE,err,error,*999) - CALL EquationsMatrices_NonlinearStructureTypeSet(vectorMatrices, & - EQUATIONS_MATRIX_FEM_STRUCTURE,err,error,*999) - CASE DEFAULT - localError="The equations matrices sparsity type of "// & - & TRIM(NUMBER_TO_VSTRING(equations%sparsityType,"*",err,error))//" is invalid." - CALL FlagError(localError,err,error,*999) - END SELECT - ENDIF - ! Use the analytic Jacobian calculation - CALL EquationsMatrices_JacobianTypesSet(vectorMatrices,[EQUATIONS_JACOBIAN_ANALYTIC_CALCULATED], & - & err,error,*999) - CALL EquationsMatrices_VectorCreateFinish(vectorMatrices,err,error,*999) - CASE(EQUATIONS_SET_BEM_SOLUTION_METHOD) - CALL FlagError("Not implemented.",err,error,*999) - CASE(EQUATIONS_SET_FD_SOLUTION_METHOD) - CALL FlagError("Not implemented.",err,error,*999) - CASE(EQUATIONS_SET_FV_SOLUTION_METHOD) - CALL FlagError("Not implemented.",err,error,*999) - CASE(EQUATIONS_SET_GFEM_SOLUTION_METHOD) - CALL FlagError("Not implemented.",err,error,*999) - CASE(EQUATIONS_SET_GFV_SOLUTION_METHOD) - CALL FlagError("Not implemented.",err,error,*999) - CASE DEFAULT - localError="The solution method of "//TRIM(NUMBER_TO_VSTRING(EQUATIONS_SET%SOLUTION_METHOD,"*",err,error))// & - & " is invalid." - CALL FlagError(localError,err,error,*999) - END SELECT - CASE DEFAULT - localError="The action type of "//TRIM(NUMBER_TO_VSTRING(EQUATIONS_SET_SETUP%ACTION_TYPE,"*",err,error))// & - & " for a setup type of "//TRIM(NUMBER_TO_VSTRING(EQUATIONS_SET_SETUP%SETUP_TYPE,"*",err,error))// & - & " is invalid for a nonlinear Burgers equation." - CALL FlagError(localError,err,error,*999) - END SELECT - CASE(EQUATIONS_SET_STATIC_BURGERS_SUBTYPE) - SELECT CASE(EQUATIONS_SET_SETUP%ACTION_TYPE) - CASE(EQUATIONS_SET_SETUP_START_ACTION) - IF(EQUATIONS_SET%DEPENDENT%DEPENDENT_FINISHED) THEN - CALL Equations_CreateStart(EQUATIONS_SET,EQUATIONS,err,error,*999) - CALL Equations_LinearityTypeSet(equations,EQUATIONS_NONLINEAR,err,error,*999) - CALL Equations_TimeDependenceTypeSet(equations,EQUATIONS_STATIC,err,error,*999) - ELSE - CALL FlagError("Equations set dependent field has not been finished.",err,error,*999) - ENDIF - CASE(EQUATIONS_SET_SETUP_FINISH_ACTION) - SELECT CASE(EQUATIONS_SET%SOLUTION_METHOD) - CASE(EQUATIONS_SET_FEM_SOLUTION_METHOD) - !Finish the equations - CALL EquationsSet_EquationsGet(EQUATIONS_SET,EQUATIONS,err,error,*999) - CALL Equations_CreateFinish(equations,err,error,*999) - NULLIFY(vectorEquations) - CALL Equations_VectorEquationsGet(equations,vectorEquations,err,error,*999) - !Create the equations mapping. - CALL EquationsMapping_VectorCreateStart(vectorEquations,FIELD_DELUDELN_VARIABLE_TYPE,vectorMapping,err,error,*999) - CALL EquationsMapping_LinearMatricesNumberSet(vectorMapping,1,err,error,*999) - CALL EquationsMapping_LinearMatricesVariableTypesSet(vectorMapping,[FIELD_U_VARIABLE_TYPE],err,error,*999) - CALL EquationsMapping_RHSVariableTypeSet(vectorMapping,FIELD_DELUDELN_VARIABLE_TYPE,err,error,*999) - CALL EquationsMapping_VectorCreateFinish(vectorMapping,err,error,*999) - !Create the equations matrices - CALL EquationsMatrices_VectorCreateStart(vectorEquations,vectorMatrices,err,error,*999) - SELECT CASE(equations%sparsityType) - CASE(EQUATIONS_MATRICES_FULL_MATRICES) - CALL EquationsMatrices_LinearStorageTypeSet(vectorMatrices,[MATRIX_BLOCK_STORAGE_TYPE], & - & err,error,*999) - CALL EquationsMatrices_NonlinearStorageTypeSet(vectorMatrices,MATRIX_BLOCK_STORAGE_TYPE, & - & err,error,*999) - CASE(EQUATIONS_MATRICES_SPARSE_MATRICES) - CALL EquationsMatrices_LinearStorageTypeSet(vectorMatrices, & - & [MATRIX_COMPRESSED_ROW_STORAGE_TYPE],err,error,*999) - CALL EquationsMatrices_LinearStructureTypeSet(vectorMatrices, & - & [EQUATIONS_MATRIX_FEM_STRUCTURE],err,error,*999) - CALL EquationsMatrices_NonlinearStorageTypeSet(vectorMatrices, & - & MATRIX_COMPRESSED_ROW_STORAGE_TYPE,err,error,*999) - CALL EquationsMatrices_NonlinearStructureTypeSet(vectorMatrices, & - & EQUATIONS_MATRIX_FEM_STRUCTURE,err,error,*999) - CASE DEFAULT - localError="The equations matrices sparsity type of "// & - & TRIM(NUMBER_TO_VSTRING(equations%sparsityType,"*",err,error))//" is invalid." - CALL FlagError(localError,err,error,*999) - END SELECT - ! Use the analytic Jacobian calculation - CALL EquationsMatrices_JacobianTypesSet(vectorMatrices,[EQUATIONS_JACOBIAN_ANALYTIC_CALCULATED], & - & err,error,*999) - CALL EquationsMatrices_VectorCreateFinish(vectorMatrices,err,error,*999) - CASE(EQUATIONS_SET_BEM_SOLUTION_METHOD) - CALL FlagError("Not implemented.",err,error,*999) - CASE(EQUATIONS_SET_FD_SOLUTION_METHOD) - CALL FlagError("Not implemented.",err,error,*999) - CASE(EQUATIONS_SET_FV_SOLUTION_METHOD) - CALL FlagError("Not implemented.",err,error,*999) - CASE(EQUATIONS_SET_GFEM_SOLUTION_METHOD) - CALL FlagError("Not implemented.",err,error,*999) - CASE(EQUATIONS_SET_GFV_SOLUTION_METHOD) - CALL FlagError("Not implemented.",err,error,*999) - CASE DEFAULT - localError="The solution method of "//TRIM(NUMBER_TO_VSTRING(EQUATIONS_SET%SOLUTION_METHOD,"*",err,error))// & - & " is invalid." - CALL FlagError(localError,err,error,*999) - END SELECT - CASE DEFAULT - localError="The action type of "//TRIM(NUMBER_TO_VSTRING(EQUATIONS_SET_SETUP%ACTION_TYPE,"*",err,error))// & - & " for a setup type of "//TRIM(NUMBER_TO_VSTRING(EQUATIONS_SET_SETUP%SETUP_TYPE,"*",err,error))// & - & " is invalid for a nonlinear Burgers equation." - CALL FlagError(localError,err,error,*999) - END SELECT - CASE DEFAULT - localError="The equation set subtype of "// & - & TRIM(NUMBER_TO_VSTRING(EQUATIONS_SET%SPECIFICATION(3),"*",err,error))// & - & " is invalid for an analytical nonlinear Burgers equation." - CALL FlagError(localError,err,error,*999) - END SELECT - CASE DEFAULT - localError="The setup type of "//TRIM(NUMBER_TO_VSTRING(EQUATIONS_SET_SETUP%SETUP_TYPE,"*",err,error))// & - & " is invalid for a nonlinear Burgers equation." - CALL FlagError(localError,err,error,*999) - END SELECT - CASE DEFAULT - localError="The equations set subtype of "//TRIM(NUMBER_TO_VSTRING(EQUATIONS_SET%SPECIFICATION(3),"*",err,error))// & - & " is not a nonlinear Burgers equation subtype." - CALL FlagError(localError,err,error,*999) - END SELECT - ELSE - CALL FlagError("Equations set is not associated.",err,error,*999) - ENDIF - - EXITS("BURGERS_EQUATION_EQUATIONS_SET_SETUP") - RETURN -999 ERRORSEXITS("BURGERS_EQUATION_EQUATIONS_SET_SETUP",err,error) - RETURN 1 - - END SUBROUTINE BURGERS_EQUATION_EQUATIONS_SET_SETUP - - ! - !================================================================================================================================ - ! - - !>Sets up the BURGERS problem pre-solve. - SUBROUTINE BURGERS_EQUATION_PRE_SOLVE(SOLVER,err,error,*) - - !Argument variables - TYPE(SOLVER_TYPE), POINTER :: SOLVER !SOLVER%SOLVERS - IF(ASSOCIATED(SOLVERS)) THEN - CONTROL_LOOP=>SOLVERS%CONTROL_LOOP - IF(ASSOCIATED(CONTROL_LOOP)) THEN - IF(ASSOCIATED(CONTROL_LOOP%PROBLEM)) THEN - IF(.NOT.ALLOCATED(CONTROL_LOOP%PROBLEM%SPECIFICATION)) THEN - CALL FlagError("Problem specification array is not allocated.",err,error,*999) - ELSE IF(SIZE(CONTROL_LOOP%PROBLEM%SPECIFICATION,1)<3) THEN - CALL FlagError("Problem specification must have three entries for a Burgers equation problem.",err,error,*999) - END IF - SELECT CASE(CONTROL_LOOP%PROBLEM%SPECIFICATION(3)) - CASE(PROBLEM_STATIC_BURGERS_SUBTYPE) - ! do nothing ??? - CASE(PROBLEM_DYNAMIC_BURGERS_SUBTYPE) - DYNAMIC_SOLVER=>SOLVER%DYNAMIC_SOLVER - IF(ASSOCIATED(DYNAMIC_SOLVER)) THEN - IF(DYNAMIC_SOLVER%SOLVER_INITIALISED) & - & CALL Burgers_PreSolveUpdateAnalyticValues(CONTROL_LOOP,SOLVER,err,error,*999) - ELSE - CALL FlagError("Solver dynamic solver is not associated.",err,error,*999) - ENDIF - CASE DEFAULT - localError="Problem subtype "//TRIM(NUMBER_TO_VSTRING(CONTROL_LOOP%PROBLEM%SPECIFICATION(3),"*",err,error))// & - & " is not valid for a Burgers equation type of a fluid mechanics problem class." - CALL FlagError(localError,err,error,*999) - END SELECT - ELSE - CALL FlagError("Problem is not associated.",err,error,*999) - ENDIF - ELSE - CALL FlagError("Control loop is not associated.",err,error,*999) - ENDIF - ELSE - CALL FlagError("Solver solvers is not associated.",err,error,*999) - ENDIF - ELSE - CALL FlagError("Solver is not associated.",err,error,*999) - ENDIF - - EXITS("BURGERS_EQUATION_PRE_SOLVE") - RETURN -999 ERRORSEXITS("BURGERS_EQUATION_PRE_SOLVE",err,error) - RETURN 1 - END SUBROUTINE BURGERS_EQUATION_PRE_SOLVE - - - ! - !================================================================================================================================ - ! - !updates the boundary conditions and source term to the required analytic values - SUBROUTINE Burgers_PreSolveUpdateAnalyticValues(CONTROL_LOOP,SOLVER,err,error,*) - - !Argument variables - TYPE(CONTROL_LOOP_TYPE), POINTER :: CONTROL_LOOP !SOLVER%SOLVER_EQUATIONS - IF(ASSOCIATED(SOLVER_EQUATIONS)) THEN - !Loop over all the equation sets and set the appropriate field variable type BCs and - !the source field associated with each equation set - DO eqnset_idx=1,SOLVER_equations%SOLVER_MAPPING%NUMBER_OF_EQUATIONS_SETS - SOLVER_MAPPING=>SOLVER_equations%SOLVER_MAPPING - EQUATIONS=>SOLVER_MAPPING%EQUATIONS_SET_TO_SOLVER_MAP(eqnset_idx)%EQUATIONS - IF(ASSOCIATED(EQUATIONS)) THEN - EQUATIONS_SET=>equations%equationsSet - IF(ASSOCIATED(EQUATIONS_SET)) THEN - IF(ASSOCIATED(EQUATIONS_SET%ANALYTIC)) THEN - dependentField=>EQUATIONS_SET%DEPENDENT%DEPENDENT_FIELD - IF(ASSOCIATED(dependentField)) THEN - geometricField=>EQUATIONS_SET%GEOMETRY%GEOMETRIC_FIELD - IF(ASSOCIATED(geometricField)) THEN - ANALYTIC_FIELD=>EQUATIONS_SET%ANALYTIC%ANALYTIC_FIELD - CALL FIELD_NUMBER_OF_COMPONENTS_GET(geometricField,FIELD_U_VARIABLE_TYPE,& - & NUMBER_OF_DIMENSIONS,err,error,*999) - NULLIFY(GEOMETRIC_VARIABLE) - NULLIFY(GEOMETRIC_PARAMETERS) - CALL Field_VariableGet(geometricField,FIELD_U_VARIABLE_TYPE,GEOMETRIC_VARIABLE,err,error,*999) - CALL FIELD_PARAMETER_SET_DATA_GET(geometricField,FIELD_U_VARIABLE_TYPE,FIELD_VALUES_SET_TYPE,& - & GEOMETRIC_PARAMETERS,err,error,*999) - EQUATIONS_SET%ANALYTIC%ANALYTIC_USER_PARAMS(1)=CURRENT_TIME - NULLIFY(ANALYTIC_VARIABLE) - NULLIFY(ANALYTIC_PARAMETERS) - IF(ASSOCIATED(ANALYTIC_FIELD)) THEN - CALL Field_VariableGet(ANALYTIC_FIELD,FIELD_U_VARIABLE_TYPE,ANALYTIC_VARIABLE,err,error,*999) - CALL FIELD_PARAMETER_SET_DATA_GET(ANALYTIC_FIELD,FIELD_U_VARIABLE_TYPE,FIELD_VALUES_SET_TYPE, & - & ANALYTIC_PARAMETERS,err,error,*999) - ENDIF - NULLIFY(materialsField) - NULLIFY(MATERIALS_VARIABLE) - NULLIFY(MATERIALS_PARAMETERS) - IF(ASSOCIATED(EQUATIONS_SET%MATERIALS)) THEN - materialsField=>EQUATIONS_SET%MATERIALS%MATERIALS_FIELD - CALL Field_VariableGet(materialsField,FIELD_U_VARIABLE_TYPE,MATERIALS_VARIABLE,err,error,*999) - CALL FIELD_PARAMETER_SET_DATA_GET(materialsField,FIELD_U_VARIABLE_TYPE,FIELD_VALUES_SET_TYPE, & - & MATERIALS_PARAMETERS,err,error,*999) - ENDIF - DO variable_idx=1,dependentField%NUMBER_OF_VARIABLES - variable_type=dependentField%VARIABLES(variable_idx)%VARIABLE_TYPE - FIELD_VARIABLE=>dependentField%VARIABLE_TYPE_MAP(variable_type)%ptr - IF(ASSOCIATED(FIELD_VARIABLE)) THEN - DO component_idx=1,FIELD_VARIABLE%NUMBER_OF_COMPONENTS - IF(FIELD_VARIABLE%COMPONENTS(component_idx)%INTERPOLATION_TYPE== & - & FIELD_NODE_BASED_INTERPOLATION) THEN - DOMAIN=>FIELD_VARIABLE%COMPONENTS(component_idx)%DOMAIN - IF(ASSOCIATED(DOMAIN)) THEN - IF(ASSOCIATED(DOMAIN%TOPOLOGY)) THEN - DOMAIN_NODES=>DOMAIN%TOPOLOGY%NODES - IF(ASSOCIATED(DOMAIN_NODES)) THEN - !Loop over the local nodes excluding the ghosts. - DO node_idx=1,DOMAIN_NODES%NUMBER_OF_NODES -!!TODO \todo We should interpolate the geometric field here and the node position. - DO dim_idx=1,NUMBER_OF_DIMENSIONS - !Default to version 1 of each node derivative - local_ny=GEOMETRIC_VARIABLE%COMPONENTS(dim_idx)%PARAM_TO_DOF_MAP% & - & NODE_PARAM2DOF_MAP%NODES(node_idx)%DERIVATIVES(1)%VERSIONS(1) - X(dim_idx)=GEOMETRIC_PARAMETERS(local_ny) - ENDDO !dim_idx - !Loop over the derivatives - DO deriv_idx=1,DOMAIN_NODES%NODES(node_idx)%NUMBER_OF_DERIVATIVES - ANALYTIC_FUNCTION_TYPE=EQUATIONS_SET%ANALYTIC%ANALYTIC_FUNCTION_TYPE - GLOBAL_DERIV_INDEX=DOMAIN_NODES%NODES(node_idx)%DERIVATIVES(deriv_idx)% & - & GLOBAL_DERIVATIVE_INDEX - CALL Burgers_AnalyticFunctionsEvaluate(EQUATIONS_SET, & - & ANALYTIC_FUNCTION_TYPE,X,TANGENTS,NORMAL,CURRENT_TIME,variable_type, & - & GLOBAL_DERIV_INDEX,component_idx,ANALYTIC_PARAMETERS,MATERIALS_PARAMETERS, & - & VALUE,err,error,*999) - !Default to version 1 of each node derivative - local_ny=FIELD_VARIABLE%COMPONENTS(component_idx)%PARAM_TO_DOF_MAP% & - & NODE_PARAM2DOF_MAP%NODES(node_idx)%DERIVATIVES(deriv_idx)%VERSIONS(1) - CALL FIELD_PARAMETER_SET_UPDATE_LOCAL_DOF(dependentField,variable_type, & - & FIELD_ANALYTIC_VALUES_SET_TYPE,local_ny,VALUE,err,error,*999) - CALL BOUNDARY_CONDITIONS_VARIABLE_GET(SOLVER_equations%BOUNDARY_CONDITIONS, & - & FIELD_VARIABLE,BOUNDARY_CONDITIONS_VARIABLE,err,error,*999) - IF(ASSOCIATED(BOUNDARY_CONDITIONS_VARIABLE)) THEN - BOUNDARY_CONDITION_CHECK_VARIABLE=BOUNDARY_CONDITIONS_VARIABLE% & - & CONDITION_TYPES(local_ny) - IF(BOUNDARY_CONDITION_CHECK_VARIABLE==BOUNDARY_CONDITION_FIXED) THEN - CALL FIELD_PARAMETER_SET_UPDATE_LOCAL_DOF(dependentField, & - & variable_type,FIELD_VALUES_SET_TYPE,local_ny, & - & VALUE,err,error,*999) - ENDIF - ELSE - CALL FlagError("Boundary conditions variable is not associated",err,error,*999) - ENDIF - ENDDO !deriv_idx - ENDDO !node_idx - ELSE - CALL FlagError("Domain topology nodes is not associated.",err,error,*999) - ENDIF - ELSE - CALL FlagError("Domain topology is not associated.",err,error,*999) - ENDIF - ELSE - CALL FlagError("Domain is not associated.",err,error,*999) - ENDIF - ELSE - CALL FlagError("Only node based interpolation is implemented.",err,error,*999) - ENDIF - ENDDO !component_idx - CALL FIELD_PARAMETER_SET_UPDATE_START(dependentField,variable_type, & - & FIELD_ANALYTIC_VALUES_SET_TYPE,err,error,*999) - CALL FIELD_PARAMETER_SET_UPDATE_FINISH(dependentField,variable_type, & - & FIELD_ANALYTIC_VALUES_SET_TYPE,err,error,*999) - CALL FIELD_PARAMETER_SET_UPDATE_START(dependentField,variable_type, & - & FIELD_VALUES_SET_TYPE,err,error,*999) - CALL FIELD_PARAMETER_SET_UPDATE_FINISH(dependentField,variable_type, & - & FIELD_VALUES_SET_TYPE,err,error,*999) - ELSE - CALL FlagError("Field variable is not associated.",err,error,*999) - ENDIF - - ENDDO !variable_idx - CALL FIELD_PARAMETER_SET_DATA_RESTORE(geometricField,FIELD_U_VARIABLE_TYPE,& - & FIELD_VALUES_SET_TYPE,GEOMETRIC_PARAMETERS,err,error,*999) - ELSE - CALL FlagError("Equations set geometric field is not associated.",err,error,*999) - ENDIF - ELSE - CALL FlagError("Equations set dependent field is not associated.",err,error,*999) - ENDIF - ENDIF - ELSE - CALL FlagError("Equations set is not associated.",err,error,*999) - ENDIF - ELSE - CALL FlagError("Equations are not associated.",err,error,*999) - END IF - CALL FIELD_PARAMETER_SET_UPDATE_START(EQUATIONS_SET%DEPENDENT%DEPENDENT_FIELD,FIELD_U_VARIABLE_TYPE, & - & FIELD_VALUES_SET_TYPE,err,error,*999) - CALL FIELD_PARAMETER_SET_UPDATE_FINISH(EQUATIONS_SET%DEPENDENT%DEPENDENT_FIELD,FIELD_U_VARIABLE_TYPE, & - & FIELD_VALUES_SET_TYPE,err,error,*999) - ENDDO !eqnset_idx - ELSE - CALL FlagError("Solver equations are not associated.",err,error,*999) - END IF - CASE DEFAULT - localError="Problem subtype "//TRIM(NUMBER_TO_VSTRING(CONTROL_LOOP%PROBLEM%SPECIFICATION(3),"*",err,error))// & - & " is not valid for a BURGERS equation type of a fluid mechanics problem class." - CALL FlagError(localError,err,error,*999) - END SELECT - ELSE - CALL FlagError("Problem is not associated.",err,error,*999) - ENDIF - ELSE - CALL FlagError("Solver is not associated.",err,error,*999) - ENDIF - ELSE - CALL FlagError("Control loop is not associated.",err,error,*999) - ENDIF - - EXITS("Burgers_PreSolveUpdateAnalyticValues") - RETURN -999 ERRORS("Burgers_PreSolveUpdateAnalyticValues",err,error) - EXITS("Burgers_PreSolveUpdateAnalyticValues") - RETURN 1 - - END SUBROUTINE Burgers_PreSolveUpdateAnalyticValues - - - ! - !================================================================================================================================ - ! - SUBROUTINE Burgers_PreSolveStoreCurrentSolution(CONTROL_LOOP,SOLVER,err,error,*) - - !Argument variables - TYPE(CONTROL_LOOP_TYPE), POINTER :: CONTROL_LOOP !Sets up the Burgers problem post solve. - SUBROUTINE BURGERS_EQUATION_POST_SOLVE(CONTROL_LOOP,SOLVER,err,error,*) - - !Argument variables - TYPE(CONTROL_LOOP_TYPE), POINTER :: CONTROL_LOOP !Output data post solve - SUBROUTINE BURGERS_EQUATION_POST_SOLVE_OUTPUT_DATA(SOLVER,err,error,*) - - !Argument variables - TYPE(SOLVER_TYPE), POINTER :: SOLVER !SOLVER%SOLVERS - IF(ASSOCIATED(SOLVERS)) THEN - CONTROL_LOOP=>SOLVERS%CONTROL_LOOP - IF(ASSOCIATED(CONTROL_LOOP)) THEN - IF(ASSOCIATED(CONTROL_LOOP%PROBLEM)) THEN - IF(.NOT.ALLOCATED(CONTROL_LOOP%PROBLEM%SPECIFICATION)) THEN - CALL FlagError("Problem specification array is not allocated.",err,error,*999) - ELSE IF(SIZE(CONTROL_LOOP%PROBLEM%SPECIFICATION,1)<3) THEN - CALL FlagError("Problem specification must have three entries for a Burgers equation problem.",err,error,*999) - END IF - CALL SYSTEM('mkdir -p ./output') - SELECT CASE(CONTROL_LOOP%PROBLEM%SPECIFICATION(3)) - CASE(PROBLEM_STATIC_BURGERS_SUBTYPE,PROBLEM_DYNAMIC_BURGERS_SUBTYPE) - CALL CONTROL_LOOP_TIMES_GET(CONTROL_LOOP,START_TIME,STOP_TIME,CURRENT_TIME,TIME_INCREMENT, & - & CURRENT_LOOP_ITERATION,OUTPUT_ITERATION_NUMBER,err,error,*999) - SOLVER_EQUATIONS=>SOLVER%SOLVER_EQUATIONS - IF(ASSOCIATED(SOLVER_EQUATIONS)) THEN - SOLVER_MAPPING=>SOLVER_EQUATIONS%SOLVER_MAPPING - IF(ASSOCIATED(SOLVER_MAPPING)) THEN - !Make sure the equations sets are up to date - DO equations_set_idx=1,SOLVER_MAPPING%NUMBER_OF_EQUATIONS_SETS - EQUATIONS_SET=>SOLVER_MAPPING%EQUATIONS_SETS(equations_set_idx)%ptr - IF(OUTPUT_ITERATION_NUMBER/=0) THEN - IF(CURRENT_TIME<=STOP_TIME) THEN - IF(CURRENT_LOOP_ITERATION<10) THEN - WRITE(OUTPUT_FILE,'("TIME_STEP_000",I0)') CURRENT_LOOP_ITERATION - ELSE IF(CURRENT_LOOP_ITERATION<100) THEN - WRITE(OUTPUT_FILE,'("TIME_STEP_00",I0)') CURRENT_LOOP_ITERATION - ELSE IF(CURRENT_LOOP_ITERATION<1000) THEN - WRITE(OUTPUT_FILE,'("TIME_STEP_0",I0)') CURRENT_LOOP_ITERATION - ELSE IF(CURRENT_LOOP_ITERATION<10000) THEN - WRITE(OUTPUT_FILE,'("TIME_STEP_",I0)') CURRENT_LOOP_ITERATION - END IF - FILE=OUTPUT_FILE - FILENAME="./output/"//"MainTime_"//TRIM(NumberToVString(CURRENT_LOOP_ITERATION,"*",err,error)) - METHOD="FORTRAN" - IF(MOD(CURRENT_LOOP_ITERATION,OUTPUT_ITERATION_NUMBER)==0) THEN - IF(CONTROL_LOOP%outputtype >= CONTROL_LOOP_PROGRESS_OUTPUT) THEN - CALL WRITE_STRING(GENERAL_OUTPUT_TYPE,"...",err,error,*999) - CALL WRITE_STRING(GENERAL_OUTPUT_TYPE,"Now export fields... ",err,error,*999) - ENDIF - Fields=>EQUATIONS_SET%REGION%FIELDS - CALL FIELD_IO_NODES_EXPORT(Fields,FILENAME,METHOD,err,error,*999) - CALL FIELD_IO_ELEMENTS_EXPORT(Fields,FILENAME,METHOD,err,error,*999) - NULLIFY(Fields) - IF(CONTROL_LOOP%outputtype >= CONTROL_LOOP_PROGRESS_OUTPUT) THEN - CALL WRITE_STRING(GENERAL_OUTPUT_TYPE,FILENAME,err,error,*999) - CALL WRITE_STRING(GENERAL_OUTPUT_TYPE,"...",err,error,*999) - ENDIF - END IF - IF(ASSOCIATED(EQUATIONS_SET%ANALYTIC)) THEN - CALL AnalyticAnalysis_Output(EQUATIONS_SET%DEPENDENT%DEPENDENT_FIELD,FILE,err,error,*999) - ENDIF - ENDIF - ENDIF - ENDDO - ENDIF - ENDIF - CASE DEFAULT - localError="Problem subtype "//TRIM(NUMBER_TO_VSTRING(CONTROL_LOOP%PROBLEM%SPECIFICATION(3),"*",err,error))// & - & " is not valid for a BURGERS equation type of a fluid mechanics problem class." - CALL FlagError(localError,err,error,*999) - END SELECT - ELSE - CALL FlagError("Problem is not associated.",err,error,*999) - ENDIF - ELSE - CALL FlagError("Control loop is not associated.",err,error,*999) - ENDIF - ELSE - CALL FlagError("Solver solvers is not associated.",err,error,*999) - ENDIF - ELSE - CALL FlagError("Solver is not associated.",err,error,*999) - ENDIF - - EXITS("BURGERS_EQUATION_POST_SOLVE_OUTPUT_DATA") - RETURN -999 ERRORSEXITS("BURGERS_EQUATION_POST_SOLVE_OUTPUT_DATA",err,error) - RETURN 1 - - END SUBROUTINE BURGERS_EQUATION_POST_SOLVE_OUTPUT_DATA - - ! - !================================================================================================================================ - ! - - !>Sets the problem specification for a Burgers problem. - SUBROUTINE Burgers_ProblemSpecificationSet(problem,problemSpecification,err,error,*) - - !Argument variables - TYPE(PROBLEM_TYPE), POINTER :: problem !Sets up the Burgers problem. - SUBROUTINE BURGERS_EQUATION_PROBLEM_SETUP(PROBLEM,PROBLEM_SETUP,err,error,*) - - !Argument variables - TYPE(PROBLEM_TYPE), POINTER :: PROBLEM !PROBLEM%CONTROL_LOOP - CALL CONTROL_LOOP_GET(CONTROL_LOOP_ROOT,CONTROL_LOOP_NODE,CONTROL_LOOP,err,error,*999) - CALL CONTROL_LOOP_CREATE_FINISH(CONTROL_LOOP,err,error,*999) - CASE DEFAULT - localError="The action type of "//TRIM(NUMBER_TO_VSTRING(PROBLEM_SETUP%ACTION_TYPE,"*",err,error))// & - & " for a setup type of "//TRIM(NUMBER_TO_VSTRING(PROBLEM_SETUP%SETUP_TYPE,"*",err,error))// & - & " is invalid for a Burgers problem." - CALL FlagError(localError,err,error,*999) - END SELECT - CASE(PROBLEM_SETUP_SOLVERS_TYPE) - !Get the control loop - CONTROL_LOOP_ROOT=>PROBLEM%CONTROL_LOOP - CALL CONTROL_LOOP_GET(CONTROL_LOOP_ROOT,CONTROL_LOOP_NODE,CONTROL_LOOP,err,error,*999) - SELECT CASE(PROBLEM_SETUP%ACTION_TYPE) - CASE(PROBLEM_SETUP_START_ACTION) - !Start the solvers creation - CALL SOLVERS_CREATE_START(CONTROL_LOOP,SOLVERS,err,error,*999) - CALL SOLVERS_NUMBER_SET(SOLVERS,1,err,error,*999) - !Set the solver to be a static nonlinear solver - CALL SOLVERS_SOLVER_GET(SOLVERS,1,SOLVER,err,error,*999) - CALL SOLVER_TYPE_SET(SOLVER,SOLVER_NONLINEAR_TYPE,err,error,*999) - CALL SOLVER_LABEL_SET(SOLVER,"Nonlinear solver",err,error,*999) - CALL SOLVER_LIBRARY_TYPE_SET(SOLVER,SOLVER_PETSC_LIBRARY,err,error,*999) - CASE(PROBLEM_SETUP_FINISH_ACTION) - !Get the solvers - CALL CONTROL_LOOP_SOLVERS_GET(CONTROL_LOOP,SOLVERS,err,error,*999) - !Finish the solvers creation - CALL SOLVERS_CREATE_FINISH(SOLVERS,err,error,*999) - CASE DEFAULT - localError="The action type of "//TRIM(NUMBER_TO_VSTRING(PROBLEM_SETUP%ACTION_TYPE,"*",err,error))// & - & " for a setup type of "//TRIM(NUMBER_TO_VSTRING(PROBLEM_SETUP%SETUP_TYPE,"*",err,error))// & - & " is invalid for a Burgers problem." - CALL FlagError(localError,err,error,*999) - END SELECT - CASE(PROBLEM_SETUP_SOLVER_EQUATIONS_TYPE) - SELECT CASE(PROBLEM_SETUP%ACTION_TYPE) - CASE(PROBLEM_SETUP_START_ACTION) - !Get the control loop - CONTROL_LOOP_ROOT=>PROBLEM%CONTROL_LOOP - CALL CONTROL_LOOP_GET(CONTROL_LOOP_ROOT,CONTROL_LOOP_NODE,CONTROL_LOOP,err,error,*999) - !Get the solver - CALL CONTROL_LOOP_SOLVERS_GET(CONTROL_LOOP,SOLVERS,err,error,*999) - CALL SOLVERS_SOLVER_GET(SOLVERS,1,SOLVER,err,error,*999) - !Create the solver equations - CALL SOLVER_EQUATIONS_CREATE_START(SOLVER,SOLVER_EQUATIONS,err,error,*999) - CALL SOLVER_EQUATIONS_LINEARITY_TYPE_SET(SOLVER_EQUATIONS,SOLVER_EQUATIONS_NONLINEAR,err,error,*999) - CALL SOLVER_EQUATIONS_TIME_DEPENDENCE_TYPE_SET(SOLVER_EQUATIONS,SOLVER_EQUATIONS_STATIC,err,error,*999) - CALL SOLVER_EQUATIONS_SPARSITY_TYPE_SET(SOLVER_EQUATIONS,SOLVER_SPARSE_MATRICES,err,error,*999) - CASE(PROBLEM_SETUP_FINISH_ACTION) - !Get the control loop - CONTROL_LOOP_ROOT=>PROBLEM%CONTROL_LOOP - CALL CONTROL_LOOP_GET(CONTROL_LOOP_ROOT,CONTROL_LOOP_NODE,CONTROL_LOOP,err,error,*999) - !Get the solver equations - CALL CONTROL_LOOP_SOLVERS_GET(CONTROL_LOOP,SOLVERS,err,error,*999) - CALL SOLVERS_SOLVER_GET(SOLVERS,1,SOLVER,err,error,*999) - CALL SOLVER_SOLVER_EQUATIONS_GET(SOLVER,SOLVER_EQUATIONS,err,error,*999) - !Finish the solver equations creation - CALL SOLVER_EQUATIONS_CREATE_FINISH(SOLVER_EQUATIONS,err,error,*999) - CASE DEFAULT - localError="The action type of "//TRIM(NUMBER_TO_VSTRING(PROBLEM_SETUP%ACTION_TYPE,"*",err,error))// & - & " for a setup type of "//TRIM(NUMBER_TO_VSTRING(PROBLEM_SETUP%SETUP_TYPE,"*",err,error))// & - & " is invalid for a Burgers problem." - CALL FlagError(localError,err,error,*999) - END SELECT - CASE DEFAULT - localError="The setup type of "//TRIM(NUMBER_TO_VSTRING(PROBLEM_SETUP%SETUP_TYPE,"*",err,error))// & - & " is invalid for a Burgers problem." - CALL FlagError(localError,err,error,*999) - END SELECT - CASE(PROBLEM_DYNAMIC_BURGERS_SUBTYPE) - SELECT CASE(PROBLEM_SETUP%SETUP_TYPE) - CASE(PROBLEM_SETUP_INITIAL_TYPE) - SELECT CASE(PROBLEM_SETUP%ACTION_TYPE) - CASE(PROBLEM_SETUP_START_ACTION) - !Do nothing???? - CASE(PROBLEM_SETUP_FINISH_ACTION) - !Do nothing???? - CASE DEFAULT - localError="The action type of "//TRIM(NUMBER_TO_VSTRING(PROBLEM_SETUP%ACTION_TYPE,"*",err,error))// & - & " for a setup type of "//TRIM(NUMBER_TO_VSTRING(PROBLEM_SETUP%SETUP_TYPE,"*",err,error))// & - & " is invalid for a Burgers problem." - CALL FlagError(localError,err,error,*999) - END SELECT - CASE(PROBLEM_SETUP_CONTROL_TYPE) - SELECT CASE(PROBLEM_SETUP%ACTION_TYPE) - CASE(PROBLEM_SETUP_START_ACTION) - !Set up a time control loop - CALL CONTROL_LOOP_CREATE_START(PROBLEM,CONTROL_LOOP,err,error,*999) - CALL CONTROL_LOOP_TYPE_SET(CONTROL_LOOP,PROBLEM_CONTROL_TIME_LOOP_TYPE,err,error,*999) - CASE(PROBLEM_SETUP_FINISH_ACTION) - !Finish the control loops - CONTROL_LOOP_ROOT=>PROBLEM%CONTROL_LOOP - CALL CONTROL_LOOP_GET(CONTROL_LOOP_ROOT,CONTROL_LOOP_NODE,CONTROL_LOOP,err,error,*999) - CALL CONTROL_LOOP_CREATE_FINISH(CONTROL_LOOP,err,error,*999) - CASE DEFAULT - localError="The action type of "//TRIM(NUMBER_TO_VSTRING(PROBLEM_SETUP%ACTION_TYPE,"*",err,error))// & - & " for a setup type of "//TRIM(NUMBER_TO_VSTRING(PROBLEM_SETUP%SETUP_TYPE,"*",err,error))// & - & " is invalid for a Burgers problem." - CALL FlagError(localError,err,error,*999) - END SELECT - CASE(PROBLEM_SETUP_SOLVERS_TYPE) - !Get the control loop - CONTROL_LOOP_ROOT=>PROBLEM%CONTROL_LOOP - CALL CONTROL_LOOP_GET(CONTROL_LOOP_ROOT,CONTROL_LOOP_NODE,CONTROL_LOOP,err,error,*999) - SELECT CASE(PROBLEM_SETUP%ACTION_TYPE) - CASE(PROBLEM_SETUP_START_ACTION) - !Start the solvers creation - CALL SOLVERS_CREATE_START(CONTROL_LOOP,SOLVERS,err,error,*999) - CALL SOLVERS_NUMBER_SET(SOLVERS,1,err,error,*999) - !Set the solver to be a static nonlinear solver - CALL SOLVERS_SOLVER_GET(SOLVERS,1,SOLVER,err,error,*999) - CALL SOLVER_TYPE_SET(SOLVER,SOLVER_DYNAMIC_TYPE,err,error,*999) - CALL SOLVER_LABEL_SET(SOLVER,"Nonlinear dynamic solver",err,error,*999) - CALL SOLVER_DYNAMIC_LINEARITY_TYPE_SET(SOLVER,SOLVER_DYNAMIC_NONLINEAR,err,error,*999) - CALL SOLVER_DYNAMIC_ORDER_SET(SOLVER,SOLVER_DYNAMIC_FIRST_ORDER,err,error,*999) - !Set solver defaults - CALL SOLVER_DYNAMIC_DEGREE_SET(SOLVER,SOLVER_DYNAMIC_FIRST_DEGREE,err,error,*999) - CALL SOLVER_DYNAMIC_SCHEME_SET(SOLVER,SOLVER_DYNAMIC_CRANK_NICOLSON_SCHEME,err,error,*999) - CALL SOLVER_LIBRARY_TYPE_SET(SOLVER,SOLVER_CMISS_LIBRARY,err,error,*999) - CASE(PROBLEM_SETUP_FINISH_ACTION) - !Get the solvers - CALL CONTROL_LOOP_SOLVERS_GET(CONTROL_LOOP,SOLVERS,err,error,*999) - !Finish the solvers creation - CALL SOLVERS_CREATE_FINISH(SOLVERS,err,error,*999) - CASE DEFAULT - localError="The action type of "//TRIM(NUMBER_TO_VSTRING(PROBLEM_SETUP%ACTION_TYPE,"*",err,error))// & - & " for a setup type of "//TRIM(NUMBER_TO_VSTRING(PROBLEM_SETUP%SETUP_TYPE,"*",err,error))// & - & " is invalid for a nonlinear burgers problem." - CALL FlagError(localError,err,error,*999) - END SELECT - CASE(PROBLEM_SETUP_SOLVER_EQUATIONS_TYPE) - SELECT CASE(PROBLEM_SETUP%ACTION_TYPE) - CASE(PROBLEM_SETUP_START_ACTION) - !Get the control loop - CONTROL_LOOP_ROOT=>PROBLEM%CONTROL_LOOP - CALL CONTROL_LOOP_GET(CONTROL_LOOP_ROOT,CONTROL_LOOP_NODE,CONTROL_LOOP,err,error,*999) - !Get the solver - CALL CONTROL_LOOP_SOLVERS_GET(CONTROL_LOOP,SOLVERS,err,error,*999) - CALL SOLVERS_SOLVER_GET(SOLVERS,1,SOLVER,err,error,*999) - !Create the solver equations - CALL SOLVER_EQUATIONS_CREATE_START(SOLVER,SOLVER_EQUATIONS,err,error,*999) - CALL SOLVER_EQUATIONS_LINEARITY_TYPE_SET(SOLVER_EQUATIONS,SOLVER_EQUATIONS_NONLINEAR,err,error,*999) - CALL SOLVER_EQUATIONS_TIME_DEPENDENCE_TYPE_SET(SOLVER_EQUATIONS,SOLVER_EQUATIONS_FIRST_ORDER_DYNAMIC, & - & err,error,*999) - CALL SOLVER_EQUATIONS_SPARSITY_TYPE_SET(SOLVER_EQUATIONS,SOLVER_SPARSE_MATRICES,err,error,*999) - CASE(PROBLEM_SETUP_FINISH_ACTION) - !Get the control loop - CONTROL_LOOP_ROOT=>PROBLEM%CONTROL_LOOP - CALL CONTROL_LOOP_GET(CONTROL_LOOP_ROOT,CONTROL_LOOP_NODE,CONTROL_LOOP,err,error,*999) - !Get the solver equations - CALL CONTROL_LOOP_SOLVERS_GET(CONTROL_LOOP,SOLVERS,err,error,*999) - CALL SOLVERS_SOLVER_GET(SOLVERS,1,SOLVER,err,error,*999) - CALL SOLVER_SOLVER_EQUATIONS_GET(SOLVER,SOLVER_EQUATIONS,err,error,*999) - !Finish the solver equations creation - CALL SOLVER_EQUATIONS_CREATE_FINISH(SOLVER_EQUATIONS,err,error,*999) - CASE DEFAULT - localError="The action type of "//TRIM(NUMBER_TO_VSTRING(PROBLEM_SETUP%ACTION_TYPE,"*",err,error))// & - & " for a setup type of "//TRIM(NUMBER_TO_VSTRING(PROBLEM_SETUP%SETUP_TYPE,"*",err,error))// & - & " is invalid for a Burgers problem." - CALL FlagError(localError,err,error,*999) - END SELECT - CASE DEFAULT - localError="The setup type of "//TRIM(NUMBER_TO_VSTRING(PROBLEM_SETUP%SETUP_TYPE,"*",err,error))// & - & " is invalid for a Burgers problem." - CALL FlagError(localError,err,error,*999) - END SELECT - CASE DEFAULT - localError="The problem subtype of "//TRIM(NUMBER_TO_VSTRING(PROBLEM%SPECIFICATION(3),"*",err,error))// & - & " does not equal a Burgers problem subtype." - CALL FlagError(localError,err,error,*999) - END SELECT - ELSE - CALL FlagError("Problem is not associated.",err,error,*999) - ENDIF - - EXITS("BURGERS_EQUATION_PROBLEM_SETUP") - RETURN -999 ERRORSEXITS("BURGERS_EQUATION_PROBLEM_SETUP",err,error) - RETURN 1 - - END SUBROUTINE BURGERS_EQUATION_PROBLEM_SETUP - - ! - !================================================================================================================================ - ! - - !>Evaluates the Jacobian element stiffness matrices for a BURGERS equation finite element equations set. - SUBROUTINE Burgers_FiniteElementJacobianEvaluate(EQUATIONS_SET,ELEMENT_NUMBER,err,error,*) - - !Argument variables - TYPE(EQUATIONS_SET_TYPE), POINTER :: EQUATIONS_SET !EQUATIONS_SET%EQUATIONS - IF(ASSOCIATED(EQUATIONS)) THEN - NULLIFY(vectorEquations) - CALL Equations_VectorEquationsGet(equations,vectorEquations,err,error,*999) - vectorMatrices=>vectorEquations%vectorMatrices - nonlinearMatrices=>vectorMatrices%nonlinearMatrices - jacobianMatrix=>nonlinearMatrices%jacobians(1)%ptr - updateJacobianMatrix=jacobianMatrix%updateJacobian - evaluateJacobian=updateJacobianMatrix - IF(evaluateJacobian) THEN - dependentField=>equations%interpolation%dependentField - geometricField=>equations%interpolation%geometricField - materialsField=>equations%interpolation%materialsField - GEOMETRIC_BASIS=>geometricField%DECOMPOSITION%DOMAIN(geometricField%DECOMPOSITION%MESH_COMPONENT_NUMBER)%ptr% & - & TOPOLOGY%ELEMENTS%ELEMENTS(ELEMENT_NUMBER)%BASIS - DEPENDENT_BASIS1=>dependentField%DECOMPOSITION%DOMAIN(dependentField%DECOMPOSITION%MESH_COMPONENT_NUMBER)%ptr% & - & TOPOLOGY%ELEMENTS%ELEMENTS(ELEMENT_NUMBER)%BASIS - QUADRATURE_SCHEME1=>DEPENDENT_BASIS1%QUADRATURE%QUADRATURE_SCHEME_MAP(BASIS_DEFAULT_QUADRATURE_SCHEME)%ptr - vectorMapping=>vectorEquations%vectorMapping - nonlinearMapping=>vectorMapping%nonlinearMapping - FIELD_VARIABLE=>nonlinearMapping%residualVariables(1)%ptr - FIELD_VAR_TYPE=FIELD_VARIABLE%VARIABLE_TYPE - GEOMETRIC_VARIABLE=>geometricField%VARIABLE_TYPE_MAP(FIELD_U_VARIABLE_TYPE)%ptr - CALL FIELD_INTERPOLATION_PARAMETERS_ELEMENT_GET(FIELD_VALUES_SET_TYPE,ELEMENT_NUMBER,equations%interpolation% & - & dependentInterpParameters(FIELD_VAR_TYPE)%ptr,err,error,*999) - CALL FIELD_INTERPOLATION_PARAMETERS_ELEMENT_GET(FIELD_VALUES_SET_TYPE,ELEMENT_NUMBER,equations%interpolation% & - & geometricInterpParameters(FIELD_U_VARIABLE_TYPE)%ptr,err,error,*999) - IF(EQUATIONS_SET%SPECIFICATION(3)==EQUATIONS_SET_GENERALISED_BURGERS_SUBTYPE) & - & CALL FIELD_INTERPOLATION_PARAMETERS_ELEMENT_GET(FIELD_VALUES_SET_TYPE,ELEMENT_NUMBER,equations%interpolation% & - & materialsInterpParameters(FIELD_U_VARIABLE_TYPE)%ptr,err,error,*999) - C_PARAM=1.0_DP - !Loop over all Gauss points - DO ng=1,QUADRATURE_SCHEME1%NUMBER_OF_GAUSS - CALL FIELD_INTERPOLATE_GAUSS(SECOND_PART_DERIV,BASIS_DEFAULT_QUADRATURE_SCHEME,ng,equations%interpolation% & - & dependentInterpPoint(FIELD_VAR_TYPE)%ptr,err,error,*999) - CALL FIELD_INTERPOLATE_GAUSS(FIRST_PART_DERIV,BASIS_DEFAULT_QUADRATURE_SCHEME,ng,equations%interpolation% & - & geometricInterpPoint(FIELD_U_VARIABLE_TYPE)%ptr,err,error,*999) - CALL FIELD_INTERPOLATED_POINT_METRICS_CALCULATE(GEOMETRIC_BASIS%NUMBER_OF_XI,equations%interpolation% & - & geometricInterpPointMetrics(FIELD_U_VARIABLE_TYPE)%ptr,err,error,*999) - IF(EQUATIONS_SET%SPECIFICATION(3)==EQUATIONS_SET_GENERALISED_BURGERS_SUBTYPE) THEN - CALL FIELD_INTERPOLATE_GAUSS(NO_PART_DERIV,BASIS_DEFAULT_QUADRATURE_SCHEME,ng,equations%interpolation% & - & materialsInterpPoint(FIELD_U_VARIABLE_TYPE)%ptr,err,error,*999) - C_PARAM=equations%interpolation%materialsInterpPoint(FIELD_U_VARIABLE_TYPE)%ptr%VALUES(3,NO_PART_DERIV) - ENDIF - !Loop over rows - mhs=0 - DO mh=1,FIELD_VARIABLE%NUMBER_OF_COMPONENTS - MESH_COMPONENT1=FIELD_VARIABLE%COMPONENTS(mh)%MESH_COMPONENT_NUMBER - DEPENDENT_BASIS1=>dependentField%DECOMPOSITION%DOMAIN(MESH_COMPONENT1)%ptr% & - & TOPOLOGY%ELEMENTS%ELEMENTS(ELEMENT_NUMBER)%BASIS - QUADRATURE_SCHEME1=>DEPENDENT_BASIS1%QUADRATURE%QUADRATURE_SCHEME_MAP(BASIS_DEFAULT_QUADRATURE_SCHEME)%ptr - JGW=equations%interpolation%geometricInterpPointMetrics(FIELD_U_VARIABLE_TYPE)%ptr%JACOBIAN* & - & QUADRATURE_SCHEME1%GAUSS_WEIGHTS(ng) - DO ms=1,DEPENDENT_BASIS1%NUMBER_OF_ELEMENT_PARAMETERS - mhs=mhs+1 - nhs=0 - PHIMS=QUADRATURE_SCHEME1%GAUSS_BASIS_FNS(ms,NO_PART_DERIV,ng) - !Loop over element columns - DO nh=1,FIELD_VARIABLE%NUMBER_OF_COMPONENTS - MESH_COMPONENT2=FIELD_VARIABLE%COMPONENTS(nh)%MESH_COMPONENT_NUMBER - DEPENDENT_BASIS2=>dependentField%DECOMPOSITION%DOMAIN(MESH_COMPONENT2)%ptr% & - & TOPOLOGY%ELEMENTS%ELEMENTS(ELEMENT_NUMBER)%BASIS - QUADRATURE_SCHEME2=>DEPENDENT_BASIS2%QUADRATURE%QUADRATURE_SCHEME_MAP& - &(BASIS_DEFAULT_QUADRATURE_SCHEME)%ptr - DO ns=1,DEPENDENT_BASIS2%NUMBER_OF_ELEMENT_PARAMETERS - nhs=nhs+1 - PHINS=QUADRATURE_SCHEME2%GAUSS_BASIS_FNS(ns,NO_PART_DERIV,ng) - !Loop over xi directions - SUM1=0.0_DP - DO ni=1,DEPENDENT_BASIS1%NUMBER_OF_XI - U_DERIV=equations%interpolation%dependentInterpPoint(FIELD_VAR_TYPE)%ptr% & - & VALUES(mh,PARTIAL_DERIVATIVE_FIRST_DERIVATIVE_MAP(ni)) - DXI_DX=equations%interpolation%geometricInterpPointMetrics(FIELD_U_VARIABLE_TYPE)%ptr%DXI_DX(ni,nh) - SUM1=SUM1+U_DERIV*DXI_DX - ENDDO !ni - SUM1=SUM1*PHINS - SUM2=0.0_DP - IF(nh==mh) THEN - !Loop over spatial directions - DO nj=1,GEOMETRIC_VARIABLE%NUMBER_OF_COMPONENTS - U_VALUE=equations%interpolation%dependentInterpPoint(FIELD_VAR_TYPE)%ptr%VALUES(nj,NO_PART_DERIV) - SUM3=0.0_DP - DO ni=1,DEPENDENT_BASIS1%NUMBER_OF_XI - DPHINS_DXI=QUADRATURE_SCHEME1%GAUSS_BASIS_FNS(ns,PARTIAL_DERIVATIVE_FIRST_DERIVATIVE_MAP(ni),ng) - DXI_DX=equations%interpolation%geometricInterpPointMetrics(FIELD_U_VARIABLE_TYPE)%ptr%DXI_DX(ni,nj) - SUM3=SUM3+DPHINS_DXI*DXI_DX - ENDDO !ni - SUM2=SUM2+U_VALUE*SUM3 - ENDDO !nj - ENDIF - VALUE=C_PARAM*(SUM1+SUM2)*PHIMS - jacobianMatrix%elementJacobian%matrix(mhs,nhs)=jacobianMatrix%elementJacobian%matrix(mhs,nhs)+VALUE*JGW - ENDDO !ns - ENDDO !nh - ENDDO !ms - ENDDO !mh - ENDDO !ng - ENDIF - ELSE - CALL FlagError("Equations set equations is not associated.",err,error,*999) - ENDIF - ELSE - CALL FlagError("Equations set is not associated.",err,error,*999) - ENDIF - - EXITS("Burgers_FiniteElementJacobianEvaluate") - RETURN -999 ERRORS("Burgers_FiniteElementJacobianEvaluate",err,error) - EXITS("Burgers_FiniteElementJacobianEvaluate") - RETURN 1 - - END SUBROUTINE Burgers_FiniteElementJacobianEvaluate - - ! - !================================================================================================================================ - ! - - !>Evaluates the residual element stiffness matrices and RHS for a Burgers equation finite element equations set. - SUBROUTINE Burgers_FiniteElementResidualEvaluate(EQUATIONS_SET,ELEMENT_NUMBER,err,error,*) - - !Argument variables - TYPE(EQUATIONS_SET_TYPE), POINTER :: EQUATIONS_SET !EQUATIONS_SET%EQUATIONS - IF(ASSOCIATED(EQUATIONS)) THEN - NULLIFY(vectorEquations) - CALL Equations_VectorEquationsGet(equations,vectorEquations,err,error,*999) - vectorMatrices=>vectorEquations%vectorMatrices - rhsVector=>vectorMatrices%rhsVector - nonlinearMatrices=>vectorMatrices%nonlinearMatrices - vectorMapping=>vectorEquations%vectorMapping - nonlinearMapping=>vectorMapping%nonlinearMapping - dependentField=>equations%interpolation%dependentField - geometricField=>equations%interpolation%geometricField - GEOMETRIC_VARIABLE=>geometricField%VARIABLE_TYPE_MAP(FIELD_U_VARIABLE_TYPE)%ptr - materialsField=>equations%interpolation%materialsField - GEOMETRIC_BASIS=>geometricField%DECOMPOSITION%DOMAIN(geometricField%DECOMPOSITION%MESH_COMPONENT_NUMBER)%ptr% & - & TOPOLOGY%ELEMENTS%ELEMENTS(ELEMENT_NUMBER)%BASIS - DEPENDENT_BASIS=>dependentField%DECOMPOSITION%DOMAIN(dependentField%DECOMPOSITION%MESH_COMPONENT_NUMBER)%ptr% & - & TOPOLOGY%ELEMENTS%ELEMENTS(ELEMENT_NUMBER)%BASIS - QUADRATURE_SCHEME=>DEPENDENT_BASIS%QUADRATURE%QUADRATURE_SCHEME_MAP(BASIS_DEFAULT_QUADRATURE_SCHEME)%ptr - SELECT CASE(EQUATIONS_SET%SPECIFICATION(3)) - CASE(EQUATIONS_SET_BURGERS_SUBTYPE) - dynamicMatrices=>vectorMatrices%dynamicMatrices - stiffnessMatrix=>dynamicMatrices%matrices(1)%ptr - dampingMatrix=>dynamicMatrices%matrices(2)%ptr - dynamicMapping=>vectorMapping%dynamicMapping - FIELD_VARIABLE=>nonlinearMapping%residualVariables(1)%ptr - FIELD_VAR_TYPE=FIELD_VARIABLE%VARIABLE_TYPE - CASE(EQUATIONS_SET_GENERALISED_BURGERS_SUBTYPE) - dynamicMatrices=>vectorMatrices%dynamicMatrices - stiffnessMatrix=>dynamicMatrices%matrices(1)%ptr - dampingMatrix=>dynamicMatrices%matrices(2)%ptr - dynamicMapping=>vectorMapping%dynamicMapping - FIELD_VARIABLE=>nonlinearMapping%residualVariables(1)%ptr - FIELD_VAR_TYPE=FIELD_VARIABLE%VARIABLE_TYPE - CASE(EQUATIONS_SET_STATIC_BURGERS_SUBTYPE) - linearMatrices=>vectorMatrices%linearMatrices - stiffnessMatrix=>linearMatrices%matrices(1)%ptr - linearMapping=>vectorMapping%linearMapping - FIELD_VARIABLE=>nonlinearMapping%residualVariables(1)%ptr - FIELD_VAR_TYPE=FIELD_VARIABLE%VARIABLE_TYPE - CASE(EQUATIONS_SET_INVISCID_BURGERS_SUBTYPE) - dynamicMatrices=>vectorMatrices%dynamicMatrices - dampingMatrix=>dynamicMatrices%matrices(1)%ptr - dynamicMapping=>vectorMapping%dynamicMapping - FIELD_VARIABLE=>nonlinearMapping%residualVariables(1)%ptr - FIELD_VAR_TYPE=FIELD_VARIABLE%VARIABLE_TYPE - CASE DEFAULT - localError="Equations set subtype "//TRIM(NUMBER_TO_VSTRING(EQUATIONS_SET%SPECIFICATION(3),"*",err,error))// & - & " is not valid for a BURGERS equation type of a fluid mechanics equations set class." - CALL FlagError(localError,err,error,*999) - END SELECT - IF(ASSOCIATED(stiffnessMatrix)) THEN - updateStiffness=stiffnessMatrix%updateMatrix - firstStiffness=stiffnessMatrix%firstAssembly - ENDIF - IF(ASSOCIATED(dampingMatrix)) THEN - updateDamping=dampingMatrix%updateMatrix - firstDamping=dampingMatrix%firstAssembly - ENDIF - IF(ASSOCIATED(rhsVector)) THEN - updateRHS=rhsVector%updateVector - firstRHS=rhsVector%firstAssembly - ENDIF - IF(ASSOCIATED(nonlinearMatrices)) updateResidual=nonlinearMatrices%updateResidual - evaluateResidual=updateResidual - evaluateStiffness=firstStiffness.OR.updateStiffness - evaluateDamping=firstDamping.OR.updateDamping - evaluateRHS=firstRHS.OR.updateRHS - evaluateLinearDynamic=evaluateStiffness.OR.evaluateDamping.OR.evaluateRHS - evaluateAny=evaluateLinearDynamic.OR.updateResidual - IF(evaluateAny) THEN - CALL FIELD_INTERPOLATION_PARAMETERS_ELEMENT_GET(FIELD_VALUES_SET_TYPE,ELEMENT_NUMBER,equations%interpolation% & - & dependentInterpParameters(FIELD_VAR_TYPE)%ptr,err,error,*999) - CALL FIELD_INTERPOLATION_PARAMETERS_ELEMENT_GET(FIELD_VALUES_SET_TYPE,ELEMENT_NUMBER,equations%interpolation% & - & geometricInterpParameters(FIELD_VAR_TYPE)%ptr,err,error,*999) - IF(EQUATIONS_SET%SPECIFICATION(3)/=EQUATIONS_SET_INVISCID_BURGERS_SUBTYPE) & - & CALL FIELD_INTERPOLATION_PARAMETERS_ELEMENT_GET(FIELD_VALUES_SET_TYPE,ELEMENT_NUMBER,equations%interpolation% & - & materialsInterpParameters(FIELD_VAR_TYPE)%ptr,err,error,*999) - A_PARAM=1.0_DP - B_PARAM=1.0_DP - C_PARAM=1.0_DP - !Loop over gauss points - DO ng=1,QUADRATURE_SCHEME%NUMBER_OF_GAUSS - CALL FIELD_INTERPOLATE_GAUSS(FIRST_PART_DERIV,BASIS_DEFAULT_QUADRATURE_SCHEME,ng,equations%interpolation% & - & dependentInterpPoint(FIELD_VAR_TYPE)%ptr,err,error,*999) - CALL FIELD_INTERPOLATE_GAUSS(FIRST_PART_DERIV,BASIS_DEFAULT_QUADRATURE_SCHEME,ng,equations%interpolation% & - & geometricInterpPoint(FIELD_VAR_TYPE)%ptr,err,error,*999) - CALL FIELD_INTERPOLATED_POINT_METRICS_CALCULATE(GEOMETRIC_BASIS%NUMBER_OF_XI,equations%interpolation% & - & geometricInterpPointMetrics(FIELD_VAR_TYPE)%ptr,err,error,*999) - IF(EQUATIONS_SET%SPECIFICATION(3)/=EQUATIONS_SET_INVISCID_BURGERS_SUBTYPE) THEN - CALL FIELD_INTERPOLATE_GAUSS(NO_PART_DERIV,BASIS_DEFAULT_QUADRATURE_SCHEME,ng,equations%interpolation% & - & materialsInterpPoint(FIELD_VAR_TYPE)%ptr,err,error,*999) - IF(EQUATIONS_SET%SPECIFICATION(3)==EQUATIONS_SET_GENERALISED_BURGERS_SUBTYPE) THEN - A_PARAM=equations%interpolation%materialsInterpPoint(FIELD_U_VARIABLE_TYPE)%ptr%VALUES(1,NO_PART_DERIV) - B_PARAM=equations%interpolation%materialsInterpPoint(FIELD_U_VARIABLE_TYPE)%ptr%VALUES(2,NO_PART_DERIV) - C_PARAM=equations%interpolation%materialsInterpPoint(FIELD_U_VARIABLE_TYPE)%ptr%VALUES(3,NO_PART_DERIV) - ELSE - B_PARAM=equations%interpolation%materialsInterpPoint(FIELD_U_VARIABLE_TYPE)%ptr%VALUES(1,NO_PART_DERIV) - ENDIF - ENDIF - mhs=0 - DO mh=1,FIELD_VARIABLE%NUMBER_OF_COMPONENTS - MESH_COMPONENT1=FIELD_VARIABLE%COMPONENTS(mh)%MESH_COMPONENT_NUMBER - DEPENDENT_BASIS1=>dependentField%DECOMPOSITION%DOMAIN(MESH_COMPONENT1)%ptr% & - & TOPOLOGY%ELEMENTS%ELEMENTS(ELEMENT_NUMBER)%BASIS - QUADRATURE_SCHEME1=>DEPENDENT_BASIS1%QUADRATURE%QUADRATURE_SCHEME_MAP(BASIS_DEFAULT_QUADRATURE_SCHEME)%ptr - JGW=equations%interpolation%geometricInterpPointMetrics(FIELD_U_VARIABLE_TYPE)%ptr%JACOBIAN* & - & QUADRATURE_SCHEME1%GAUSS_WEIGHTS(ng) - !Loop over element rows - DO ms=1,DEPENDENT_BASIS%NUMBER_OF_ELEMENT_PARAMETERS - mhs=mhs+1 - IF(evaluateLinearDynamic) THEN - IF(evaluateStiffness.OR.evaluateDamping) THEN - nhs=0 - !Loop over element columns - DO nh=1,FIELD_VARIABLE%NUMBER_OF_COMPONENTS - MESH_COMPONENT2=FIELD_VARIABLE%COMPONENTS(mh)%MESH_COMPONENT_NUMBER - DEPENDENT_BASIS2=>dependentField%DECOMPOSITION%DOMAIN(MESH_COMPONENT2)%ptr% & - & TOPOLOGY%ELEMENTS%ELEMENTS(ELEMENT_NUMBER)%BASIS - QUADRATURE_SCHEME2=>DEPENDENT_BASIS2%QUADRATURE%QUADRATURE_SCHEME_MAP& - &(BASIS_DEFAULT_QUADRATURE_SCHEME)%ptr - DO ns=1,DEPENDENT_BASIS%NUMBER_OF_ELEMENT_PARAMETERS - nhs=nhs+1 - !Diffusion matrix - IF(evaluateStiffness) THEN - DO ni=1,DEPENDENT_BASIS1%NUMBER_OF_XI - DPHIMS_DXI(ni)=QUADRATURE_SCHEME1%GAUSS_BASIS_FNS(ms,PARTIAL_DERIVATIVE_FIRST_DERIVATIVE_MAP(ni),ng) - DPHINS_DXI(ni)=QUADRATURE_SCHEME2%GAUSS_BASIS_FNS(ns,PARTIAL_DERIVATIVE_FIRST_DERIVATIVE_MAP(ni),ng) - END DO !ni - SUM=0.0_DP - !Calculate SUM - DO mi=1,DEPENDENT_BASIS1%NUMBER_OF_XI - DO ni=1,DEPENDENT_BASIS2%NUMBER_OF_XI - SUM=SUM+DPHINS_DXI(ni)*DPHIMS_DXI(mi)*equations%interpolation% & - & geometricInterpPointMetrics(FIELD_U_VARIABLE_TYPE)%ptr%GU(mi,ni) - ENDDO !ni - ENDDO !mi - stiffnessMatrix%elementMatrix%matrix(mhs,nhs)=stiffnessMatrix%elementMatrix%matrix(mhs,nhs)- & - & B_PARAM*SUM*JGW - ENDIF - !Mass matrix - IF(evaluateDamping) THEN - PHIMS=QUADRATURE_SCHEME1%GAUSS_BASIS_FNS(ms,NO_PART_DERIV,ng) - PHINS=QUADRATURE_SCHEME2%GAUSS_BASIS_FNS(ns,NO_PART_DERIV,ng) - dampingMatrix%elementMatrix%matrix(mhs,nhs)=dampingMatrix%elementMatrix%matrix(mhs,nhs)+ & - & A_PARAM*PHIMS*PHINS*JGW - ENDIF - ENDDO !ns - ENDDO !nh - ENDIF !Stiffness or Damping - !Calculate RHS - IF(evaluateRHS) THEN - rhsVector%elementVector%vector(mhs)=0.0_DP - ENDIF - ENDIF !Evaluate linear dynamic - !Calculate nonlinear vector - IF(evaluateResidual) THEN - PHIMS=QUADRATURE_SCHEME1%GAUSS_BASIS_FNS(ms,NO_PART_DERIV,ng) - SUM=0.0_DP - DO nj=1,FIELD_VARIABLE%NUMBER_OF_COMPONENTS - U_VALUE=equations%interpolation%dependentInterpPoint(FIELD_U_VARIABLE_TYPE)%ptr%VALUES(nj,NO_PART_DERIV) - SUM1=0.0_DP - !Calculate SUM - DO ni=1,DEPENDENT_BASIS1%NUMBER_OF_XI - SUM1=SUM1+equations%interpolation%dependentInterpPoint(FIELD_VAR_TYPE)%ptr%VALUES(nj, & - & PARTIAL_DERIVATIVE_FIRST_DERIVATIVE_MAP(ni))*equations%interpolation% & - & geometricInterpPointMetrics(FIELD_U_VARIABLE_TYPE)%ptr%DXI_DX(ni,nj) - ENDDO !ni - SUM=SUM+U_VALUE*SUM1 - ENDDO !nj - nonlinearMatrices%elementResidual%vector(mhs)=nonlinearMatrices% & - & elementResidual%vector(mhs)+C_PARAM*SUM*PHIMS*JGW - ENDIF - ENDDO !ms - ENDDO !mh - ENDDO !ng - - !Scale factor adjustment - IF(dependentField%SCALINGS%SCALING_TYPE/=FIELD_NO_SCALING) THEN - CALL Field_InterpolationParametersScaleFactorsElementGet(ELEMENT_NUMBER,equations%interpolation% & - & dependentInterpParameters(FIELD_VAR_TYPE)%ptr,err,error,*999) - mhs=0 - DO mh=1,FIELD_VARIABLE%NUMBER_OF_COMPONENTS - !Loop over element rows - DO ms=1,DEPENDENT_BASIS%NUMBER_OF_ELEMENT_PARAMETERS - mhs=mhs+1 - nhs=0 - IF(evaluateStiffness.OR.evaluateDamping) THEN - !Loop over element columns - DO nh=1,FIELD_VARIABLE%NUMBER_OF_COMPONENTS - DO ns=1,DEPENDENT_BASIS%NUMBER_OF_ELEMENT_PARAMETERS - nhs=nhs+1 - IF(evaluateStiffness) & - stiffnessMatrix%elementMatrix%matrix(mhs,nhs)=stiffnessMatrix%elementMatrix%matrix(mhs,nhs)* & - & equations%interpolation%dependentInterpParameters(FIELD_VAR_TYPE)%ptr%SCALE_FACTORS(ms,mh)* & - & equations%interpolation%dependentInterpParameters(FIELD_VAR_TYPE)%ptr%SCALE_FACTORS(ns,nh) - IF(evaluateDamping) & - dampingMatrix%elementMatrix%matrix(mhs,nhs)=dampingMatrix%elementMatrix%matrix(mhs,nhs)* & - & equations%interpolation%dependentInterpParameters(FIELD_VAR_TYPE)%ptr%SCALE_FACTORS(ms,mh)* & - & equations%interpolation%dependentInterpParameters(FIELD_VAR_TYPE)%ptr%SCALE_FACTORS(ns,nh) - ENDDO !ns - ENDDO !nh - ENDIF - IF(evaluateRHS) & - & rhsVector%elementVector%vector(mhs)=rhsVector%elementVector%vector(mhs)* & - & equations%interpolation%dependentInterpParameters(FIELD_VAR_TYPE)%ptr%SCALE_FACTORS(ms,mh) - IF(evaluateResidual) & - & nonlinearMatrices%elementResidual%vector(mhs)=nonlinearMatrices%elementResidual%vector(mhs)* & - & equations%interpolation%dependentInterpParameters(FIELD_VAR_TYPE)%ptr%SCALE_FACTORS(ms,mh) - ENDDO !ms - ENDDO !mh - ENDIF - - ENDIF !Evaluate any - - ELSE - CALL FlagError("Equations set equations is not associated.",err,error,*999) - ENDIF - ELSE - CALL FlagError("Equations set is not associated.",err,error,*999) - ENDIF - - EXITS("Burgers_FiniteElementResidualEvaluate") - RETURN -999 ERRORS("Burgers_FiniteElementResidualEvaluate",err,error) - EXITS("Burgers_FiniteElementResidualEvaluate") - RETURN 1 - - END SUBROUTINE Burgers_FiniteElementResidualEvaluate - - ! - !================================================================================================================================ - ! - -END MODULE BURGERS_EQUATION_ROUTINES diff --git a/src/Darcy_equations_routines.f90.fsicpb b/src/Darcy_equations_routines.f90.fsicpb deleted file mode 100644 index 256ce763..00000000 --- a/src/Darcy_equations_routines.f90.fsicpb +++ /dev/null @@ -1,8009 +0,0 @@ -MODULE DARCY_EQUATIONS_ROUTINES - - USE BaseRoutines - USE BASIS_ROUTINES - USE BOUNDARY_CONDITIONS_ROUTINES - USE Constants - USE CONTROL_LOOP_ROUTINES - USE ControlLoopAccessRoutines - USE ComputationEnvironment - USE COORDINATE_ROUTINES - USE DISTRIBUTED_MATRIX_VECTOR - USE DOMAIN_MAPPINGS - USE EquationsRoutines - USE EquationsAccessRoutines - USE EquationsMappingRoutines - USE EquationsMatricesRoutines - USE EQUATIONS_SET_CONSTANTS - USE EquationsSetAccessRoutines - USE FIELD_ROUTINES - USE FIELD_IO_ROUTINES - USE FieldAccessRoutines - USE FINITE_ELASTICITY_ROUTINES - USE FLUID_MECHANICS_IO_ROUTINES - USE INPUT_OUTPUT - USE ISO_VARYING_STRING - USE Kinds - USE Maths - USE MATRIX_VECTOR - USE MESH_ROUTINES - USE NODE_ROUTINES - USE PROBLEM_CONSTANTS - USE Strings - USE SOLVER_ROUTINES - USE SolverAccessRoutines - USE Timer - USE Types - -#include "macros.h" - - IMPLICIT NONE - - PUBLIC DARCY_EQUATION_EQUATIONS_SET_SETUP - PUBLIC Darcy_EquationsSetSpecificationSet - PUBLIC Darcy_EquationsSetSolutionMethodSet - PUBLIC Darcy_BoundaryConditionsAnalyticCalculate - - PUBLIC DARCY_EQUATION_PROBLEM_SETUP - PUBLIC Darcy_ProblemSpecificationSet - - PUBLIC DARCY_EQUATION_FINITE_ELEMENT_CALCULATE - - PUBLIC DARCY_EQUATION_PRE_SOLVE - PUBLIC DARCY_EQUATION_POST_SOLVE - PUBLIC DARCY_EQUATION_POST_SOLVE_OUTPUT_DATA - - PUBLIC DARCY_CONTROL_TIME_LOOP_PRE_LOOP - - PUBLIC Darcy_PreSolveStorePreviousIterate - - PUBLIC DARCY_EQUATION_MONITOR_CONVERGENCE - - INTEGER(INTG) :: SOLVER_NUMBER_SOLID,SOLVER_NUMBER_MAT_PROPERTIES,SOLVER_NUMBER_DARCY - INTEGER(INTG) :: SOLVER_INDEX_SOLID,SOLVER_INDEX_MAT_PROPERTIES,SOLVER_INDEX_DARCY - - REAL(DP) :: RESIDUAL_NORM_0 - - LOGICAL :: idebug1, idebug2, idebug3 - -CONTAINS - - ! - !================================================================================================================================ - ! - - !>Sets/changes the solution method for a Darcy equation type of a fluid mechanics equations set class. - SUBROUTINE Darcy_EquationsSetSolutionMethodSet(EQUATIONS_SET,SOLUTION_METHOD,err,error,*) - - !Argument variables - TYPE(EQUATIONS_SET_TYPE), POINTER :: equations_SET !Sets up the Darcy equation. - SUBROUTINE DARCY_EQUATION_EQUATIONS_SET_SETUP(EQUATIONS_SET,EQUATIONS_SET_SETUP,err,error,*) - - !Argument variables - TYPE(EQUATIONS_SET_TYPE), POINTER :: equations_SET !EQUATIONS_SET%EQUATIONS_SET_FIELD - IF(EQUATIONS_EQUATIONS_SET_FIELD%EQUATIONS_SET_FIELD_AUTO_CREATED) THEN - !Create the auto created equations set field - CALL FIELD_CREATE_START(EQUATIONS_SET_SETUP%FIELD_USER_NUMBER,EQUATIONS_SET%REGION, & - & EQUATIONS_EQUATIONS_SET_FIELD%EQUATIONS_SET_FIELD_FIELD,err,error,*999) - EQUATIONS_SET_FIELD_FIELD=>EQUATIONS_EQUATIONS_SET_FIELD%EQUATIONS_SET_FIELD_FIELD - CALL FIELD_LABEL_SET(EQUATIONS_SET_FIELD_FIELD,"Equations Set Field",err,error,*999) - CALL FIELD_TYPE_SET_AND_LOCK(EQUATIONS_SET_FIELD_FIELD,FIELD_GENERAL_TYPE,& - & err,error,*999) - CALL FIELD_DEPENDENT_TYPE_SET_AND_LOCK(EQUATIONS_SET_FIELD_FIELD,& - & FIELD_INDEPENDENT_TYPE,err,error,*999) - CALL FIELD_NUMBER_OF_VARIABLES_SET(EQUATIONS_SET_FIELD_FIELD, & - & EQUATIONS_SET_FIELD_NUMBER_OF_VARIABLES,err,error,*999) - CALL FIELD_VARIABLE_TYPES_SET_AND_LOCK(EQUATIONS_SET_FIELD_FIELD,& - & [FIELD_U_VARIABLE_TYPE],err,error,*999) - CALL FIELD_DIMENSION_SET_AND_LOCK(EQUATIONS_SET_FIELD_FIELD,FIELD_U_VARIABLE_TYPE, & - & FIELD_VECTOR_DIMENSION_TYPE,err,error,*999) - CALL FIELD_DATA_TYPE_SET_AND_LOCK(EQUATIONS_SET_FIELD_FIELD,FIELD_U_VARIABLE_TYPE, & - & FIELD_INTG_TYPE,err,error,*999) - CALL FIELD_NUMBER_OF_COMPONENTS_SET_AND_LOCK(EQUATIONS_SET_FIELD_FIELD,& - & FIELD_U_VARIABLE_TYPE,EQUATIONS_SET_FIELD_NUMBER_OF_COMPONENTS,err,error,*999) - ELSE - !Check the user specified field - CALL FIELD_TYPE_CHECK(EQUATIONS_SET_SETUP%FIELD,FIELD_GENERAL_TYPE,err,error,*999) - CALL FIELD_DEPENDENT_TYPE_CHECK(EQUATIONS_SET_SETUP%FIELD,FIELD_INDEPENDENT_TYPE,err,error,*999) - CALL FIELD_NUMBER_OF_VARIABLES_CHECK(EQUATIONS_SET_SETUP%FIELD,EQUATIONS_SET_FIELD_NUMBER_OF_VARIABLES, & - & err,error,*999) - CALL FIELD_VARIABLE_TYPES_CHECK(EQUATIONS_SET_SETUP%FIELD,[FIELD_U_VARIABLE_TYPE],err,error,*999) - CALL FIELD_DIMENSION_CHECK(EQUATIONS_SET_SETUP%FIELD,FIELD_U_VARIABLE_TYPE,FIELD_VECTOR_DIMENSION_TYPE, & - & err,error,*999) - CALL FIELD_DATA_TYPE_CHECK(EQUATIONS_SET_SETUP%FIELD,FIELD_U_VARIABLE_TYPE,FIELD_INTG_TYPE,err,error,*999) - CALL FIELD_NUMBER_OF_COMPONENTS_CHECK(EQUATIONS_SET_SETUP%FIELD,FIELD_U_VARIABLE_TYPE, & - & EQUATIONS_SET_FIELD_NUMBER_OF_COMPONENTS,err,error,*999) - ENDIF - CASE(EQUATIONS_SET_SETUP_FINISH_ACTION) - IF(EQUATIONS_SET%EQUATIONS_SET_FIELD%EQUATIONS_SET_FIELD_AUTO_CREATED) THEN - CALL FIELD_CREATE_FINISH(EQUATIONS_SET%EQUATIONS_SET_FIELD%EQUATIONS_SET_FIELD_FIELD,err,error,*999) - CALL FIELD_COMPONENT_VALUES_INITIALISE(EQUATIONS_SET%EQUATIONS_SET_FIELD%EQUATIONS_SET_FIELD_FIELD,& - & FIELD_U_VARIABLE_TYPE,FIELD_VALUES_SET_TYPE, 1, 1_INTG, ERR, ERROR, *999) - CALL FIELD_COMPONENT_VALUES_INITIALISE(EQUATIONS_SET%EQUATIONS_SET_FIELD%EQUATIONS_SET_FIELD_FIELD,& - & FIELD_U_VARIABLE_TYPE,FIELD_VALUES_SET_TYPE, 2, 1_INTG, ERR, ERROR, *999) - ENDIF -!!TODO: Check valid setup - CASE DEFAULT - localError="The action type of "//TRIM(NumberToVString(EQUATIONS_SET_SETUP%ACTION_TYPE,"*",err,error))// & - & " for a setup type of "//TRIM(NumberToVString(EQUATIONS_SET_SETUP%SETUP_TYPE,"*",err,error))// & - & " is invalid for a standard or quasistatic Darcy equation." - CALL FlagError(localError,err,error,*999) - END SELECT - END SELECT - - !----------------------------------------------------------------- - ! g e o m e t r y f i e l d - !----------------------------------------------------------------- - CASE(EQUATIONS_SET_SETUP_GEOMETRY_TYPE) - SELECT CASE(EQUATIONS_SET%SPECIFICATION(3)) - CASE(EQUATIONS_SET_STANDARD_DARCY_SUBTYPE, EQUATIONS_SET_QUASISTATIC_DARCY_SUBTYPE, & - & EQUATIONS_SET_TRANSIENT_DARCY_SUBTYPE) - !Do nothing - CASE(EQUATIONS_SET_ALE_DARCY_SUBTYPE,EQUATIONS_SET_INCOMPRESSIBLE_FINITE_ELASTICITY_DARCY_SUBTYPE, & - & EQUATIONS_SET_TRANSIENT_ALE_DARCY_SUBTYPE,EQUATIONS_SET_ELASTICITY_DARCY_INRIA_MODEL_SUBTYPE, & - & EQUATIONS_SET_INCOMPRESSIBLE_ELASTICITY_DRIVEN_DARCY_SUBTYPE,EQUATIONS_SET_MULTI_COMPARTMENT_DARCY_SUBTYPE, & - & EQUATIONS_SET_INCOMPRESSIBLE_ELAST_MULTI_COMP_DARCY_SUBTYPE) - - SELECT CASE(EQUATIONS_SET_SETUP%ACTION_TYPE) - CASE(EQUATIONS_SET_SETUP_START_ACTION) - - FIELD_VARIABLE=>EQUATIONS_SET%GEOMETRY%GEOMETRIC_FIELD%VARIABLE_TYPE_MAP(FIELD_U_VARIABLE_TYPE)%ptr - - CALL Field_ParameterSetEnsureCreated(EQUATIONS_SET%GEOMETRY%GEOMETRIC_FIELD, FIELD_U_VARIABLE_TYPE, & - & FIELD_INITIAL_VALUES_SET_TYPE, ERR, ERROR, *999) - - CALL Field_ParameterSetEnsureCreated(EQUATIONS_SET%GEOMETRY%GEOMETRIC_FIELD, FIELD_U_VARIABLE_TYPE, & - & FIELD_PREVIOUS_VALUES_SET_TYPE, ERR, ERROR, *999) - - CALL Field_ParameterSetEnsureCreated(EQUATIONS_SET%GEOMETRY%GEOMETRIC_FIELD, FIELD_U_VARIABLE_TYPE, & - & FIELD_MESH_DISPLACEMENT_SET_TYPE, ERR, ERROR, *999) - - CALL Field_ParameterSetEnsureCreated(EQUATIONS_SET%GEOMETRY%GEOMETRIC_FIELD, FIELD_U_VARIABLE_TYPE, & - & FIELD_MESH_VELOCITY_SET_TYPE, ERR, ERROR, *999) - - CALL Field_ParameterSetEnsureCreated(EQUATIONS_SET%GEOMETRY%GEOMETRIC_FIELD, FIELD_U_VARIABLE_TYPE, & - & FIELD_NEGATIVE_MESH_VELOCITY_SET_TYPE, ERR, ERROR, *999) - - IF(EQUATIONS_SET%SPECIFICATION(3)==EQUATIONS_SET_MULTI_COMPARTMENT_DARCY_SUBTYPE .OR. & - EQUATIONS_SET%SPECIFICATION(3)==EQUATIONS_SET_INCOMPRESSIBLE_ELAST_MULTI_COMP_DARCY_SUBTYPE) THEN - !Create the equations set field for multi-compartment Darcy - EQUATIONS_SET_FIELD_NUMBER_OF_COMPONENTS = 2 - - EQUATIONS_EQUATIONS_SET_FIELD=>EQUATIONS_SET%EQUATIONS_SET_FIELD - EQUATIONS_SET_FIELD_FIELD=>EQUATIONS_EQUATIONS_SET_FIELD%EQUATIONS_SET_FIELD_FIELD - - IF(EQUATIONS_EQUATIONS_SET_FIELD%EQUATIONS_SET_FIELD_AUTO_CREATED) THEN - CALL FIELD_MESH_DECOMPOSITION_GET(EQUATIONS_SET%GEOMETRY%GEOMETRIC_FIELD,GEOMETRIC_DECOMPOSITION,err,error,*999) - CALL FIELD_MESH_DECOMPOSITION_SET_AND_LOCK(EQUATIONS_SET_FIELD_FIELD,& - & GEOMETRIC_DECOMPOSITION,err,error,*999) - CALL FIELD_GEOMETRIC_FIELD_SET_AND_LOCK(EQUATIONS_SET_FIELD_FIELD,& - & EQUATIONS_SET%GEOMETRY%GEOMETRIC_FIELD,err,error,*999) - CALL FIELD_COMPONENT_MESH_COMPONENT_GET(EQUATIONS_SET%GEOMETRY%GEOMETRIC_FIELD,FIELD_U_VARIABLE_TYPE, & - & 1,GEOMETRIC_COMPONENT_NUMBER,err,error,*999) - DO component_idx = 1, EQUATIONS_SET_FIELD_NUMBER_OF_COMPONENTS - CALL FIELD_COMPONENT_MESH_COMPONENT_SET_AND_LOCK(EQUATIONS_SET%EQUATIONS_SET_FIELD%EQUATIONS_SET_FIELD_FIELD, & - & FIELD_U_VARIABLE_TYPE,component_idx,GEOMETRIC_COMPONENT_NUMBER,err,error,*999) - CALL FIELD_COMPONENT_INTERPOLATION_SET_AND_LOCK(EQUATIONS_SET%EQUATIONS_SET_FIELD%EQUATIONS_SET_FIELD_FIELD, & - & FIELD_U_VARIABLE_TYPE,component_idx,FIELD_CONSTANT_INTERPOLATION,err,error,*999) - END DO - - !Default the field scaling to that of the geometric field - CALL FIELD_SCALING_TYPE_GET(EQUATIONS_SET%GEOMETRY%GEOMETRIC_FIELD,GEOMETRIC_SCALING_TYPE,err,error,*999) - CALL FIELD_SCALING_TYPE_SET(EQUATIONS_SET%EQUATIONS_SET_FIELD%EQUATIONS_SET_FIELD_FIELD,GEOMETRIC_SCALING_TYPE, & - & err,error,*999) - ELSE - !Do nothing - ENDIF - ENDIF - CASE(EQUATIONS_SET_SETUP_FINISH_ACTION) - ! do nothing - CASE DEFAULT - localError="The action type of "//TRIM(NumberToVString(EQUATIONS_SET_SETUP%ACTION_TYPE,"*",err,error))// & - & " for a setup type of "//TRIM(NumberToVString(EQUATIONS_SET_SETUP%SETUP_TYPE,"*",err,error))// & - & " is invalid for a linear diffusion equation." - CALL FlagError(localError,err,error,*999) - END SELECT - END SELECT - - !----------------------------------------------------------------- - ! d e p e n d e n t f i e l d - !----------------------------------------------------------------- - CASE(EQUATIONS_SET_SETUP_DEPENDENT_TYPE) - SELECT CASE(EQUATIONS_SET%SPECIFICATION(3)) - CASE(EQUATIONS_SET_STANDARD_DARCY_SUBTYPE, EQUATIONS_SET_QUASISTATIC_DARCY_SUBTYPE, EQUATIONS_SET_ALE_DARCY_SUBTYPE, & - & EQUATIONS_SET_TRANSIENT_DARCY_SUBTYPE,EQUATIONS_SET_INCOMPRESSIBLE_FINITE_ELASTICITY_DARCY_SUBTYPE, & - & EQUATIONS_SET_TRANSIENT_ALE_DARCY_SUBTYPE,EQUATIONS_SET_ELASTICITY_DARCY_INRIA_MODEL_SUBTYPE, & - & EQUATIONS_SET_INCOMPRESSIBLE_ELASTICITY_DRIVEN_DARCY_SUBTYPE, & - & EQUATIONS_SET_INCOMPRESSIBLE_ELAST_MULTI_COMP_DARCY_SUBTYPE) - SELECT CASE(EQUATIONS_SET_SETUP%ACTION_TYPE) - CASE(EQUATIONS_SET_SETUP_START_ACTION) - IF(EQUATIONS_SET%DEPENDENT%DEPENDENT_FIELD_AUTO_CREATED) THEN - !Create the auto created dependent field - CALL FIELD_CREATE_START(EQUATIONS_SET_SETUP%FIELD_USER_NUMBER,EQUATIONS_SET%REGION, & - & EQUATIONS_SET%DEPENDENT%DEPENDENT_FIELD,err,error,*999) - CALL FIELD_TYPE_SET_AND_LOCK(EQUATIONS_SET%DEPENDENT%DEPENDENT_FIELD,FIELD_GEOMETRIC_GENERAL_TYPE,err,error,*999) - CALL FIELD_DEPENDENT_TYPE_SET_AND_LOCK(EQUATIONS_SET%DEPENDENT%DEPENDENT_FIELD,FIELD_DEPENDENT_TYPE,err,error,*999) - - CALL FIELD_MESH_DECOMPOSITION_GET(EQUATIONS_SET%GEOMETRY%GEOMETRIC_FIELD,GEOMETRIC_DECOMPOSITION,err,error,*999) - CALL FIELD_MESH_DECOMPOSITION_SET_AND_LOCK(EQUATIONS_SET%DEPENDENT%DEPENDENT_FIELD,GEOMETRIC_DECOMPOSITION, & - & err,error,*999) - CALL FIELD_GEOMETRIC_FIELD_SET_AND_LOCK(EQUATIONS_SET%DEPENDENT%DEPENDENT_FIELD, & - & EQUATIONS_SET%GEOMETRY%GEOMETRIC_FIELD,err,error,*999) - - DEPENDENT_FIELD_NUMBER_OF_VARIABLES = 2 ! U and the normal component of its flux - CALL FIELD_NUMBER_OF_VARIABLES_SET_AND_LOCK(EQUATIONS_SET%DEPENDENT%DEPENDENT_FIELD, & - & DEPENDENT_FIELD_NUMBER_OF_VARIABLES,err,error,*999) - CALL FIELD_VARIABLE_TYPES_SET_AND_LOCK(EQUATIONS_SET%DEPENDENT%DEPENDENT_FIELD,[FIELD_U_VARIABLE_TYPE, & - & FIELD_DELUDELN_VARIABLE_TYPE],err,error,*999) - CALL FIELD_VARIABLE_LABEL_SET(EQUATIONS_SET%DEPENDENT%DEPENDENT_FIELD,FIELD_U_VARIABLE_TYPE,"U",err,error,*999) - CALL FIELD_VARIABLE_LABEL_SET(EQUATIONS_SET%DEPENDENT%DEPENDENT_FIELD,FIELD_DELUDELN_VARIABLE_TYPE,"del U/del n", & - & err,error,*999) - CALL FIELD_DIMENSION_SET_AND_LOCK(EQUATIONS_SET%DEPENDENT%DEPENDENT_FIELD,FIELD_U_VARIABLE_TYPE, & - & FIELD_VECTOR_DIMENSION_TYPE,err,error,*999) - CALL FIELD_DIMENSION_SET_AND_LOCK(EQUATIONS_SET%DEPENDENT%DEPENDENT_FIELD,FIELD_DELUDELN_VARIABLE_TYPE, & - & FIELD_VECTOR_DIMENSION_TYPE,err,error,*999) - CALL FIELD_DATA_TYPE_SET_AND_LOCK(EQUATIONS_SET%DEPENDENT%DEPENDENT_FIELD,FIELD_U_VARIABLE_TYPE, & - & FIELD_DP_TYPE,err,error,*999) - CALL FIELD_DATA_TYPE_SET_AND_LOCK(EQUATIONS_SET%DEPENDENT%DEPENDENT_FIELD,FIELD_DELUDELN_VARIABLE_TYPE, & - & FIELD_DP_TYPE,err,error,*999) - - CALL FIELD_NUMBER_OF_COMPONENTS_GET(EQUATIONS_SET%GEOMETRY%GEOMETRIC_FIELD, FIELD_U_VARIABLE_TYPE, & - & NUMBER_OF_DIMENSIONS, ERR, ERROR, *999) - DEPENDENT_FIELD_NUMBER_OF_COMPONENTS = NUMBER_OF_DIMENSIONS + 1 - CALL FIELD_NUMBER_OF_COMPONENTS_SET_AND_LOCK(EQUATIONS_SET%DEPENDENT%DEPENDENT_FIELD, FIELD_U_VARIABLE_TYPE, & - & DEPENDENT_FIELD_NUMBER_OF_COMPONENTS, ERR, ERROR, *999) - CALL FIELD_NUMBER_OF_COMPONENTS_SET_AND_LOCK(EQUATIONS_SET%DEPENDENT%DEPENDENT_FIELD, & - & FIELD_DELUDELN_VARIABLE_TYPE, DEPENDENT_FIELD_NUMBER_OF_COMPONENTS, ERR, ERROR, *999) - !Default to the geometric interpolation setup - CALL FIELD_COMPONENT_MESH_COMPONENT_GET(EQUATIONS_SET%GEOMETRY%GEOMETRIC_FIELD,FIELD_U_VARIABLE_TYPE,1, & - & GEOMETRIC_MESH_COMPONENT,err,error,*999) - DO i=1,DEPENDENT_FIELD_NUMBER_OF_COMPONENTS - IF( i < DEPENDENT_FIELD_NUMBER_OF_COMPONENTS ) THEN - !Set velocity mesh component (default to the geometric one) - MESH_COMPONENT = GEOMETRIC_MESH_COMPONENT - CALL FIELD_COMPONENT_MESH_COMPONENT_SET(EQUATIONS_SET%DEPENDENT%DEPENDENT_FIELD,FIELD_U_VARIABLE_TYPE, & - & i, MESH_COMPONENT,err,error,*999) - CALL FIELD_COMPONENT_MESH_COMPONENT_SET(EQUATIONS_SET%DEPENDENT%DEPENDENT_FIELD,FIELD_DELUDELN_VARIABLE_TYPE, & - & i, MESH_COMPONENT,err,error,*999) - ELSE - !Set pressure mesh component (default to the geometric one) - MESH_COMPONENT = GEOMETRIC_MESH_COMPONENT - CALL FIELD_COMPONENT_MESH_COMPONENT_SET(EQUATIONS_SET%DEPENDENT%DEPENDENT_FIELD,FIELD_U_VARIABLE_TYPE, & - & i, MESH_COMPONENT,err,error,*999) - CALL FIELD_COMPONENT_MESH_COMPONENT_SET(EQUATIONS_SET%DEPENDENT%DEPENDENT_FIELD,FIELD_DELUDELN_VARIABLE_TYPE, & - & i, MESH_COMPONENT,err,error,*999) - ENDIF - ENDDO - - SELECT CASE(EQUATIONS_SET%SOLUTION_METHOD) - CASE(EQUATIONS_SET_FEM_SOLUTION_METHOD) - DO i = 1, DEPENDENT_FIELD_NUMBER_OF_COMPONENTS - CALL FIELD_COMPONENT_INTERPOLATION_SET_AND_LOCK(EQUATIONS_SET%DEPENDENT%DEPENDENT_FIELD, & - & FIELD_U_VARIABLE_TYPE,i,FIELD_NODE_BASED_INTERPOLATION,err,error,*999) - CALL FIELD_COMPONENT_INTERPOLATION_SET_AND_LOCK(EQUATIONS_SET%DEPENDENT%DEPENDENT_FIELD, & - & FIELD_DELUDELN_VARIABLE_TYPE,i,FIELD_NODE_BASED_INTERPOLATION,err,error,*999) - ENDDO - !Default the scaling to the geometric field scaling - CALL FIELD_SCALING_TYPE_GET(EQUATIONS_SET%GEOMETRY%GEOMETRIC_FIELD,GEOMETRIC_SCALING_TYPE,err,error,*999) - CALL FIELD_SCALING_TYPE_SET(EQUATIONS_SET%DEPENDENT%DEPENDENT_FIELD,GEOMETRIC_SCALING_TYPE,err,error,*999) - CASE(EQUATIONS_SET_BEM_SOLUTION_METHOD) - CALL FlagError("Not implemented.",err,error,*999) - CASE(EQUATIONS_SET_FD_SOLUTION_METHOD) - CALL FlagError("Not implemented.",err,error,*999) - CASE(EQUATIONS_SET_FV_SOLUTION_METHOD) - CALL FlagError("Not implemented.",err,error,*999) - CASE(EQUATIONS_SET_GFEM_SOLUTION_METHOD) - CALL FlagError("Not implemented.",err,error,*999) - CASE(EQUATIONS_SET_GFV_SOLUTION_METHOD) - CALL FlagError("Not implemented.",err,error,*999) - CASE DEFAULT - localError="The solution method of "//TRIM(NumberToVString(EQUATIONS_SET%SOLUTION_METHOD,"*",err,error))// & - & " is invalid." - CALL FlagError(localError,err,error,*999) - END SELECT - ELSE - !----------------------------------- - ! DEPENDENT_FIELD: not AUTO_CREATED - !----------------------------------- - SELECT CASE(EQUATIONS_SET%SPECIFICATION(3)) - CASE(EQUATIONS_SET_INCOMPRESSIBLE_FINITE_ELASTICITY_DARCY_SUBTYPE, & - & EQUATIONS_SET_ELASTICITY_DARCY_INRIA_MODEL_SUBTYPE, & - & EQUATIONS_SET_INCOMPRESSIBLE_ELASTICITY_DRIVEN_DARCY_SUBTYPE) - !----------------------------------------------------------------------- - ! Check the shared dependent field set up in finite elasticity routines - !----------------------------------------------------------------------- - CALL FIELD_TYPE_CHECK(EQUATIONS_SET_SETUP%FIELD,FIELD_GEOMETRIC_GENERAL_TYPE,err,error,*999) - CALL FIELD_DEPENDENT_TYPE_CHECK(EQUATIONS_SET_SETUP%FIELD,FIELD_DEPENDENT_TYPE,err,error,*999) - CALL FIELD_NUMBER_OF_VARIABLES_CHECK(EQUATIONS_SET_SETUP%FIELD,4,err,error,*999) - CALL FIELD_VARIABLE_TYPES_CHECK(EQUATIONS_SET_SETUP%FIELD,[FIELD_U_VARIABLE_TYPE,FIELD_DELUDELN_VARIABLE_TYPE, & - & FIELD_V_VARIABLE_TYPE,FIELD_DELVDELN_VARIABLE_TYPE],err,error,*999) - CALL FIELD_DIMENSION_CHECK(EQUATIONS_SET_SETUP%FIELD,FIELD_U_VARIABLE_TYPE,FIELD_VECTOR_DIMENSION_TYPE, & - & err,error,*999) - CALL FIELD_DIMENSION_CHECK(EQUATIONS_SET_SETUP%FIELD,FIELD_DELUDELN_VARIABLE_TYPE,FIELD_VECTOR_DIMENSION_TYPE, & - & err,error,*999) - CALL FIELD_DIMENSION_CHECK(EQUATIONS_SET_SETUP%FIELD,FIELD_V_VARIABLE_TYPE,FIELD_VECTOR_DIMENSION_TYPE, & - & err,error,*999) - CALL FIELD_DIMENSION_CHECK(EQUATIONS_SET_SETUP%FIELD,FIELD_DELVDELN_VARIABLE_TYPE,FIELD_VECTOR_DIMENSION_TYPE, & - & err,error,*999) - CALL FIELD_DATA_TYPE_CHECK(EQUATIONS_SET_SETUP%FIELD,FIELD_U_VARIABLE_TYPE,FIELD_DP_TYPE,err,error,*999) - CALL FIELD_DATA_TYPE_CHECK(EQUATIONS_SET_SETUP%FIELD,FIELD_DELUDELN_VARIABLE_TYPE,FIELD_DP_TYPE,err,error,*999) - CALL FIELD_DATA_TYPE_CHECK(EQUATIONS_SET_SETUP%FIELD,FIELD_V_VARIABLE_TYPE,FIELD_DP_TYPE,err,error,*999) - CALL FIELD_DATA_TYPE_CHECK(EQUATIONS_SET_SETUP%FIELD,FIELD_DELVDELN_VARIABLE_TYPE,FIELD_DP_TYPE,err,error,*999) - CALL FIELD_NUMBER_OF_COMPONENTS_GET(EQUATIONS_SET%GEOMETRY%GEOMETRIC_FIELD, FIELD_U_VARIABLE_TYPE, & - & NUMBER_OF_DIMENSIONS, ERR, ERROR, *999) - - SELECT CASE(EQUATIONS_SET%SPECIFICATION(3)) - CASE(EQUATIONS_SET_ELASTICITY_DARCY_INRIA_MODEL_SUBTYPE) !compressible elasticity - DEPENDENT_FIELD_ELASTICITY_NUMBER_OF_COMPONENTS = NUMBER_OF_DIMENSIONS - DEPENDENT_FIELD_DARCY_NUMBER_OF_COMPONENTS = NUMBER_OF_DIMENSIONS + 2 !(u,v,w,p,m) - CASE(EQUATIONS_SET_INCOMPRESSIBLE_FINITE_ELASTICITY_DARCY_SUBTYPE) - DEPENDENT_FIELD_ELASTICITY_NUMBER_OF_COMPONENTS = NUMBER_OF_DIMENSIONS + 1 - DEPENDENT_FIELD_DARCY_NUMBER_OF_COMPONENTS = NUMBER_OF_DIMENSIONS + 1 - CASE(EQUATIONS_SET_INCOMPRESSIBLE_ELASTICITY_DRIVEN_DARCY_SUBTYPE) - DEPENDENT_FIELD_ELASTICITY_NUMBER_OF_COMPONENTS = NUMBER_OF_DIMENSIONS + 1 !(u1,u2,u3,p) - DEPENDENT_FIELD_DARCY_NUMBER_OF_COMPONENTS = NUMBER_OF_DIMENSIONS + 1 !(u,v,w,m) - END SELECT - - CALL FIELD_NUMBER_OF_COMPONENTS_CHECK(EQUATIONS_SET_SETUP%FIELD,FIELD_U_VARIABLE_TYPE, & - & DEPENDENT_FIELD_ELASTICITY_NUMBER_OF_COMPONENTS,err,error,*999) - CALL FIELD_NUMBER_OF_COMPONENTS_CHECK(EQUATIONS_SET_SETUP%FIELD,FIELD_DELUDELN_VARIABLE_TYPE, & - & DEPENDENT_FIELD_ELASTICITY_NUMBER_OF_COMPONENTS,err,error,*999) - CALL FIELD_NUMBER_OF_COMPONENTS_CHECK(EQUATIONS_SET_SETUP%FIELD,FIELD_V_VARIABLE_TYPE, & - & DEPENDENT_FIELD_DARCY_NUMBER_OF_COMPONENTS,err,error,*999) - CALL FIELD_NUMBER_OF_COMPONENTS_CHECK(EQUATIONS_SET_SETUP%FIELD,FIELD_DELVDELN_VARIABLE_TYPE, & - & DEPENDENT_FIELD_DARCY_NUMBER_OF_COMPONENTS,err,error,*999) - - SELECT CASE(EQUATIONS_SET%SOLUTION_METHOD) - CASE(EQUATIONS_SET_FEM_SOLUTION_METHOD) - CALL FIELD_COMPONENT_INTERPOLATION_CHECK(EQUATIONS_SET_SETUP%FIELD,FIELD_U_VARIABLE_TYPE,1, & - & FIELD_NODE_BASED_INTERPOLATION,err,error,*999) - !Mind that elastic hydrostatic pressure might be interpolated element-wise - CALL FIELD_COMPONENT_INTERPOLATION_CHECK(EQUATIONS_SET_SETUP%FIELD,FIELD_DELUDELN_VARIABLE_TYPE,1, & - & FIELD_NODE_BASED_INTERPOLATION,err,error,*999) - CALL FIELD_COMPONENT_INTERPOLATION_CHECK(EQUATIONS_SET_SETUP%FIELD,FIELD_V_VARIABLE_TYPE,1, & - & FIELD_NODE_BASED_INTERPOLATION,err,error,*999) - CALL FIELD_COMPONENT_INTERPOLATION_CHECK(EQUATIONS_SET_SETUP%FIELD,FIELD_DELVDELN_VARIABLE_TYPE,1, & - & FIELD_NODE_BASED_INTERPOLATION,err,error,*999) - CASE(EQUATIONS_SET_BEM_SOLUTION_METHOD) - CALL FlagError("Not implemented.",err,error,*999) - CASE(EQUATIONS_SET_FD_SOLUTION_METHOD) - CALL FlagError("Not implemented.",err,error,*999) - CASE(EQUATIONS_SET_FV_SOLUTION_METHOD) - CALL FlagError("Not implemented.",err,error,*999) - CASE(EQUATIONS_SET_GFEM_SOLUTION_METHOD) - CALL FlagError("Not implemented.",err,error,*999) - CASE(EQUATIONS_SET_GFV_SOLUTION_METHOD) - CALL FlagError("Not implemented.",err,error,*999) - CASE DEFAULT - localError="The solution method of "//TRIM(NumberToVString(EQUATIONS_SET%SOLUTION_METHOD,"*",err,error))// & - & " is invalid." - CALL FlagError(localError,err,error,*999) - END SELECT - CASE(EQUATIONS_SET_INCOMPRESSIBLE_ELAST_MULTI_COMP_DARCY_SUBTYPE) - !----------------------------------------------------------------------- - ! Check the shared dependent field set up in finite elasticity routines - ! Must have 2+2*Ncompartments number of variable types - !----------------------------------------------------------------------- - CALL FIELD_TYPE_CHECK(EQUATIONS_SET_SETUP%FIELD,FIELD_GEOMETRIC_GENERAL_TYPE,err,error,*999) - CALL FIELD_DEPENDENT_TYPE_CHECK(EQUATIONS_SET_SETUP%FIELD,FIELD_DEPENDENT_TYPE,err,error,*999) - !Get the number of Darcy compartments from the equations set field - EQUATIONS_SET_FIELD_FIELD=>EQUATIONS_SET%EQUATIONS_SET_FIELD%EQUATIONS_SET_FIELD_FIELD - CALL FIELD_PARAMETER_SET_DATA_GET(EQUATIONS_SET_FIELD_FIELD,FIELD_U_VARIABLE_TYPE, & - & FIELD_VALUES_SET_TYPE,EQUATIONS_SET_FIELD_DATA,err,error,*999) - Ncompartments=EQUATIONS_SET_FIELD_DATA(2) - CALL FIELD_NUMBER_OF_VARIABLES_CHECK(EQUATIONS_SET_SETUP%FIELD,(2+2*Ncompartments),err,error,*999) - ALLOCATE(VARIABLE_TYPES(2*Ncompartments+2)) - DO num_var=1,Ncompartments+1 - VARIABLE_TYPES(2*num_var-1)=FIELD_U_VARIABLE_TYPE+(FIELD_NUMBER_OF_VARIABLE_SUBTYPES*(num_var-1)) - VARIABLE_TYPES(2*num_var)=FIELD_DELUDELN_VARIABLE_TYPE+(FIELD_NUMBER_OF_VARIABLE_SUBTYPES*(num_var-1)) - ENDDO - CALL FIELD_VARIABLE_TYPES_CHECK(EQUATIONS_SET_SETUP%FIELD,VARIABLE_TYPES,err,error,*999) - - CALL FIELD_NUMBER_OF_COMPONENTS_GET(EQUATIONS_SET%GEOMETRY%GEOMETRIC_FIELD,FIELD_U_VARIABLE_TYPE, & - & NUMBER_OF_DIMENSIONS,err,error,*999) - NUMBER_OF_COMPONENTS=NUMBER_OF_DIMENSIONS+1 - NUMBER_OF_DARCY_COMPONENTS=NUMBER_OF_DIMENSIONS+1 - - DO num_var=1,2*Ncompartments+2 - CALL FIELD_DIMENSION_CHECK(EQUATIONS_SET_SETUP%FIELD,VARIABLE_TYPES(num_var),FIELD_VECTOR_DIMENSION_TYPE, & - & err,error,*999) - CALL FIELD_DATA_TYPE_CHECK(EQUATIONS_SET_SETUP%FIELD,VARIABLE_TYPES(num_var),FIELD_DP_TYPE,err,error,*999) - CALL FIELD_NUMBER_OF_COMPONENTS_CHECK(EQUATIONS_SET_SETUP%FIELD,VARIABLE_TYPES(num_var),NUMBER_OF_COMPONENTS, & - & err,error,*999) - ENDDO - - SELECT CASE(EQUATIONS_SET%SOLUTION_METHOD) - CASE(EQUATIONS_SET_FEM_SOLUTION_METHOD) - !Elasticity: - DO component_idx=1,NUMBER_OF_DIMENSIONS - CALL FIELD_COMPONENT_INTERPOLATION_CHECK(EQUATIONS_SET_SETUP%FIELD,FIELD_U_VARIABLE_TYPE,component_idx, & - & FIELD_NODE_BASED_INTERPOLATION,err,error,*999) - CALL FIELD_COMPONENT_INTERPOLATION_CHECK(EQUATIONS_SET_SETUP%FIELD,FIELD_DELUDELN_VARIABLE_TYPE,component_idx,& - & FIELD_NODE_BASED_INTERPOLATION,err,error,*999) - ENDDO !component_idx - !If solid hydrostatic pressure is driving Darcy flow, check that pressure uses node based interpolation - CALL FIELD_COMPONENT_INTERPOLATION_CHECK(EQUATIONS_SET_SETUP%FIELD,FIELD_U_VARIABLE_TYPE,NUMBER_OF_COMPONENTS,& - & FIELD_NODE_BASED_INTERPOLATION,err,error,*999) - CALL FIELD_COMPONENT_INTERPOLATION_CHECK(EQUATIONS_SET_SETUP%FIELD,FIELD_DELUDELN_VARIABLE_TYPE, & - & NUMBER_OF_COMPONENTS,FIELD_NODE_BASED_INTERPOLATION,err,error,*999) - DO num_var=3,2*Ncompartments+2 - !Darcy: - DO component_idx=1,NUMBER_OF_DARCY_COMPONENTS - CALL FIELD_COMPONENT_INTERPOLATION_CHECK(EQUATIONS_SET_SETUP%FIELD,VARIABLE_TYPES(num_var),component_idx, & - & FIELD_NODE_BASED_INTERPOLATION,err,error,*999) - ENDDO !component_idx - ENDDO - CASE(EQUATIONS_SET_BEM_SOLUTION_METHOD) - CALL FlagError("Not implemented.",err,error,*999) - CASE(EQUATIONS_SET_FD_SOLUTION_METHOD) - CALL FlagError("Not implemented.",err,error,*999) - CASE(EQUATIONS_SET_FV_SOLUTION_METHOD) - CALL FlagError("Not implemented.",err,error,*999) - CASE(EQUATIONS_SET_GFEM_SOLUTION_METHOD) - CALL FlagError("Not implemented.",err,error,*999) - CASE(EQUATIONS_SET_GFV_SOLUTION_METHOD) - CALL FlagError("Not implemented.",err,error,*999) - CASE DEFAULT - localError="The solution method of "//TRIM(NumberToVString(EQUATIONS_SET%SOLUTION_METHOD,"*",err,error))// & - & " is invalid." - CALL FlagError(localError,err,error,*999) - END SELECT - CASE(EQUATIONS_SET_MULTI_COMPARTMENT_DARCY_SUBTYPE) - !Check the field created by Darcy routines for the multi-compartment model - CALL FIELD_TYPE_CHECK(EQUATIONS_SET_SETUP%FIELD,FIELD_GENERAL_TYPE,err,error,*999) - CALL FIELD_DEPENDENT_TYPE_CHECK(EQUATIONS_SET_SETUP%FIELD,FIELD_DEPENDENT_TYPE,err,error,*999) - EQUATIONS_SET_FIELD_FIELD=>EQUATIONS_SET%EQUATIONS_SET_FIELD%EQUATIONS_SET_FIELD_FIELD - CALL FIELD_PARAMETER_SET_DATA_GET(EQUATIONS_SET_FIELD_FIELD,FIELD_U_VARIABLE_TYPE, & - & FIELD_VALUES_SET_TYPE,EQUATIONS_SET_FIELD_DATA,err,error,*999) - Ncompartments=EQUATIONS_SET_FIELD_DATA(2) - CALL FIELD_NUMBER_OF_VARIABLES_CHECK(EQUATIONS_SET_SETUP%FIELD,2*Ncompartments,err,error,*999) - !Create & populate array storing all of the relevant variable types against which to check the field variables - ALLOCATE(VARIABLE_TYPES(2*Ncompartments)) - DO num_var=1,Ncompartments - VARIABLE_TYPES(2*num_var-1)=FIELD_U_VARIABLE_TYPE+(FIELD_NUMBER_OF_VARIABLE_SUBTYPES*(num_var-1)) - VARIABLE_TYPES(2*num_var)=FIELD_DELUDELN_VARIABLE_TYPE+(FIELD_NUMBER_OF_VARIABLE_SUBTYPES*(num_var-1)) - ENDDO - CALL FIELD_VARIABLE_TYPES_CHECK(EQUATIONS_SET_SETUP%FIELD,VARIABLE_TYPES,err,error,*999) - - CALL FIELD_NUMBER_OF_COMPONENTS_GET(EQUATIONS_SET%GEOMETRY%GEOMETRIC_FIELD,FIELD_U_VARIABLE_TYPE, & - & NUMBER_OF_DIMENSIONS,err,error,*999) - DO num_var=1,2*Ncompartments - CALL FIELD_DIMENSION_CHECK(EQUATIONS_SET_SETUP%FIELD,VARIABLE_TYPES(num_var), & - & FIELD_VECTOR_DIMENSION_TYPE,err,error,*999) - CALL FIELD_DATA_TYPE_CHECK(EQUATIONS_SET_SETUP%FIELD,VARIABLE_TYPES(num_var),FIELD_DP_TYPE,err,error,*999) - CALL FIELD_NUMBER_OF_COMPONENTS_CHECK(EQUATIONS_SET_SETUP%FIELD,VARIABLE_TYPES(num_var), & - & NUMBER_OF_DIMENSIONS+1,err,error,*999) - ENDDO - - SELECT CASE(EQUATIONS_SET%SOLUTION_METHOD) - CASE(EQUATIONS_SET_FEM_SOLUTION_METHOD) - component_idx=1 - DO num_var=1,2*Ncompartments - DO component_idx=1,NUMBER_OF_DIMENSIONS+1 - CALL FIELD_COMPONENT_INTERPOLATION_CHECK(EQUATIONS_SET_SETUP%FIELD,VARIABLE_TYPES(num_var),component_idx, & - & FIELD_NODE_BASED_INTERPOLATION,err,error,*999) - !NOTE-pressure might use element based interpolation - need to account for this - ENDDO - ENDDO - CASE(EQUATIONS_SET_BEM_SOLUTION_METHOD) - CALL FlagError("Not implemented.",err,error,*999) - CASE(EQUATIONS_SET_FD_SOLUTION_METHOD) - CALL FlagError("Not implemented.",err,error,*999) - CASE(EQUATIONS_SET_FV_SOLUTION_METHOD) - CALL FlagError("Not implemented.",err,error,*999) - CASE(EQUATIONS_SET_GFEM_SOLUTION_METHOD) - CALL FlagError("Not implemented.",err,error,*999) - CASE(EQUATIONS_SET_GFV_SOLUTION_METHOD) - CALL FlagError("Not implemented.",err,error,*999) - CASE DEFAULT - localError="The solution method of "//TRIM(NumberToVString(EQUATIONS_SET%SOLUTION_METHOD,"*",err,error))// & - & " is invalid." - CALL FlagError(localError,err,error,*999) - END SELECT - - CASE DEFAULT - !-------------------------------- - ! Check the user specified field - !-------------------------------- - CALL FIELD_TYPE_CHECK(EQUATIONS_SET_SETUP%FIELD,FIELD_GENERAL_TYPE,err,error,*999) - CALL FIELD_DEPENDENT_TYPE_CHECK(EQUATIONS_SET_SETUP%FIELD,FIELD_DEPENDENT_TYPE,err,error,*999) - CALL FIELD_NUMBER_OF_VARIABLES_CHECK(EQUATIONS_SET_SETUP%FIELD,2,err,error,*999) - CALL FIELD_VARIABLE_TYPES_CHECK(EQUATIONS_SET_SETUP%FIELD,[FIELD_U_VARIABLE_TYPE,FIELD_DELUDELN_VARIABLE_TYPE],& - & err,error,*999) - CALL FIELD_DIMENSION_CHECK(EQUATIONS_SET_SETUP%FIELD,FIELD_U_VARIABLE_TYPE,FIELD_VECTOR_DIMENSION_TYPE, & - & err,error,*999) - CALL FIELD_DIMENSION_CHECK(EQUATIONS_SET_SETUP%FIELD,FIELD_DELUDELN_VARIABLE_TYPE,FIELD_VECTOR_DIMENSION_TYPE, & - & err,error,*999) - CALL FIELD_DATA_TYPE_CHECK(EQUATIONS_SET_SETUP%FIELD,FIELD_U_VARIABLE_TYPE,FIELD_DP_TYPE,err,error,*999) - CALL FIELD_DATA_TYPE_CHECK(EQUATIONS_SET_SETUP%FIELD,FIELD_DELUDELN_VARIABLE_TYPE,FIELD_DP_TYPE,err,error,*999) - CALL FIELD_NUMBER_OF_COMPONENTS_GET(EQUATIONS_SET%GEOMETRY%GEOMETRIC_FIELD, FIELD_U_VARIABLE_TYPE, & - & NUMBER_OF_DIMENSIONS, ERR, ERROR, *999) - DEPENDENT_FIELD_NUMBER_OF_COMPONENTS = NUMBER_OF_DIMENSIONS + 1 - CALL FIELD_NUMBER_OF_COMPONENTS_CHECK(EQUATIONS_SET_SETUP%FIELD,FIELD_U_VARIABLE_TYPE, & - & DEPENDENT_FIELD_NUMBER_OF_COMPONENTS,err,error,*999) - CALL FIELD_NUMBER_OF_COMPONENTS_CHECK(EQUATIONS_SET_SETUP%FIELD,FIELD_DELUDELN_VARIABLE_TYPE, & - & DEPENDENT_FIELD_NUMBER_OF_COMPONENTS,err,error,*999) - - SELECT CASE(EQUATIONS_SET%SOLUTION_METHOD) - CASE(EQUATIONS_SET_FEM_SOLUTION_METHOD) - CALL FIELD_COMPONENT_INTERPOLATION_CHECK(EQUATIONS_SET_SETUP%FIELD,FIELD_U_VARIABLE_TYPE,1, & - & FIELD_NODE_BASED_INTERPOLATION,err,error,*999) - CALL FIELD_COMPONENT_INTERPOLATION_CHECK(EQUATIONS_SET_SETUP%FIELD,FIELD_DELUDELN_VARIABLE_TYPE,1, & - & FIELD_NODE_BASED_INTERPOLATION,err,error,*999) - CASE(EQUATIONS_SET_BEM_SOLUTION_METHOD) - CALL FlagError("Not implemented.",err,error,*999) - CASE(EQUATIONS_SET_FD_SOLUTION_METHOD) - CALL FlagError("Not implemented.",err,error,*999) - CASE(EQUATIONS_SET_FV_SOLUTION_METHOD) - CALL FlagError("Not implemented.",err,error,*999) - CASE(EQUATIONS_SET_GFEM_SOLUTION_METHOD) - CALL FlagError("Not implemented.",err,error,*999) - CASE(EQUATIONS_SET_GFV_SOLUTION_METHOD) - CALL FlagError("Not implemented.",err,error,*999) - CASE DEFAULT - localError="The solution method of "//TRIM(NumberToVString(EQUATIONS_SET%SOLUTION_METHOD,"*",err,error))// & - & " is invalid." - CALL FlagError(localError,err,error,*999) - END SELECT - END SELECT ! on (EQUATIONS_SET%SPECIFICATION(3)) - ENDIF ! on (EQUATIONS_SET%DEPENDENT%DEPENDENT_FIELD_AUTO_CREATED) - CASE(EQUATIONS_SET_SETUP_FINISH_ACTION) - IF(EQUATIONS_SET%DEPENDENT%DEPENDENT_FIELD_AUTO_CREATED) THEN - CALL FIELD_CREATE_FINISH(EQUATIONS_SET%DEPENDENT%DEPENDENT_FIELD,err,error,*999) - CALL FIELD_PARAMETER_SET_CREATE(EQUATIONS_SET%DEPENDENT%DEPENDENT_FIELD,FIELD_U_VARIABLE_TYPE, & - & FIELD_INITIAL_VALUES_SET_TYPE,err,error,*999) - ENDIF - IF(EQUATIONS_SET%SPECIFICATION(3)/=EQUATIONS_SET_INCOMPRESSIBLE_ELAST_MULTI_COMP_DARCY_SUBTYPE)THEN - !Actually, only needed for PGM (for elasticity_Darcy defined in elasticity V var): - CALL FIELD_PARAMETER_SET_CREATE(EQUATIONS_SET%DEPENDENT%DEPENDENT_FIELD,FIELD_U_VARIABLE_TYPE, & - & FIELD_RELATIVE_VELOCITY_SET_TYPE,err,error,*999) - ENDIF - CASE DEFAULT - localError="The action type of "//TRIM(NumberToVString(EQUATIONS_SET_SETUP%ACTION_TYPE,"*",err,error))// & - & " for a setup type of "//TRIM(NumberToVString(EQUATIONS_SET_SETUP%SETUP_TYPE,"*",err,error))// & - & " is invalid for a standard, quasistatic or ALE Darcy equation" - CALL FlagError(localError,err,error,*999) - END SELECT - END SELECT - - !----------------------------------------------------------------- - ! I N d e p e n d e n t f i e l d - !----------------------------------------------------------------- - CASE(EQUATIONS_SET_SETUP_INDEPENDENT_TYPE) - SELECT CASE(EQUATIONS_SET%SPECIFICATION(3)) - CASE(EQUATIONS_SET_STANDARD_DARCY_SUBTYPE, EQUATIONS_SET_QUASISTATIC_DARCY_SUBTYPE, EQUATIONS_SET_ALE_DARCY_SUBTYPE, & - & EQUATIONS_SET_TRANSIENT_DARCY_SUBTYPE,EQUATIONS_SET_INCOMPRESSIBLE_FINITE_ELASTICITY_DARCY_SUBTYPE, & - & EQUATIONS_SET_TRANSIENT_ALE_DARCY_SUBTYPE,EQUATIONS_SET_ELASTICITY_DARCY_INRIA_MODEL_SUBTYPE, & - & EQUATIONS_SET_INCOMPRESSIBLE_ELASTICITY_DRIVEN_DARCY_SUBTYPE, & - & EQUATIONS_SET_INCOMPRESSIBLE_ELAST_MULTI_COMP_DARCY_SUBTYPE) - !\todo: revise: do they all need an independent field ? - SELECT CASE(EQUATIONS_SET_SETUP%ACTION_TYPE) - CASE(EQUATIONS_SET_SETUP_START_ACTION) - IF(EQUATIONS_SET%INDEPENDENT%INDEPENDENT_FIELD_AUTO_CREATED) THEN - !Create the auto created INdependent field - CALL FIELD_CREATE_START(EQUATIONS_SET_SETUP%FIELD_USER_NUMBER,EQUATIONS_SET%REGION, & - & EQUATIONS_SET%INDEPENDENT%INDEPENDENT_FIELD,err,error,*999) - CALL FIELD_TYPE_SET_AND_LOCK(EQUATIONS_SET%INDEPENDENT%INDEPENDENT_FIELD,FIELD_GENERAL_TYPE,err,error,*999) - - CALL FIELD_DEPENDENT_TYPE_SET_AND_LOCK(EQUATIONS_SET%INDEPENDENT%INDEPENDENT_FIELD,FIELD_INDEPENDENT_TYPE,& - & err,error,*999) - - CALL FIELD_MESH_DECOMPOSITION_GET(EQUATIONS_SET%GEOMETRY%GEOMETRIC_FIELD,GEOMETRIC_DECOMPOSITION,err,error,*999) - CALL FIELD_MESH_DECOMPOSITION_SET_AND_LOCK(EQUATIONS_SET%INDEPENDENT%INDEPENDENT_FIELD,GEOMETRIC_DECOMPOSITION, & - & err,error,*999) - CALL FIELD_GEOMETRIC_FIELD_SET_AND_LOCK(EQUATIONS_SET%INDEPENDENT%INDEPENDENT_FIELD, & - & EQUATIONS_SET%GEOMETRY%GEOMETRIC_FIELD,err,error,*999) - - INDEPENDENT_FIELD_NUMBER_OF_VARIABLES = 2 ! U and the normal component of its flux - CALL FIELD_NUMBER_OF_VARIABLES_SET_AND_LOCK(EQUATIONS_SET%INDEPENDENT%INDEPENDENT_FIELD, & - & INDEPENDENT_FIELD_NUMBER_OF_VARIABLES,err,error,*999) - CALL FIELD_VARIABLE_TYPES_SET_AND_LOCK(EQUATIONS_SET%INDEPENDENT%INDEPENDENT_FIELD,[FIELD_U_VARIABLE_TYPE, & - & FIELD_DELUDELN_VARIABLE_TYPE],err,error,*999) - CALL FIELD_VARIABLE_LABEL_SET(EQUATIONS_SET%INDEPENDENT%INDEPENDENT_FIELD,FIELD_U_VARIABLE_TYPE,"Independent U", & - & err,error,*999) - CALL FIELD_VARIABLE_LABEL_SET(EQUATIONS_SET%INDEPENDENT%INDEPENDENT_FIELD,FIELD_DELUDELN_VARIABLE_TYPE, & - & "Independent del U/del n",err,error,*999) - CALL FIELD_DIMENSION_SET_AND_LOCK(EQUATIONS_SET%INDEPENDENT%INDEPENDENT_FIELD,FIELD_U_VARIABLE_TYPE, & - & FIELD_VECTOR_DIMENSION_TYPE,err,error,*999) - CALL FIELD_DIMENSION_SET_AND_LOCK(EQUATIONS_SET%INDEPENDENT%INDEPENDENT_FIELD,FIELD_DELUDELN_VARIABLE_TYPE, & - & FIELD_VECTOR_DIMENSION_TYPE,err,error,*999) - CALL FIELD_DATA_TYPE_SET_AND_LOCK(EQUATIONS_SET%INDEPENDENT%INDEPENDENT_FIELD,FIELD_U_VARIABLE_TYPE, & - & FIELD_DP_TYPE,err,error,*999) - CALL FIELD_DATA_TYPE_SET_AND_LOCK(EQUATIONS_SET%INDEPENDENT%INDEPENDENT_FIELD,FIELD_DELUDELN_VARIABLE_TYPE, & - & FIELD_DP_TYPE,err,error,*999) - - CALL FIELD_NUMBER_OF_COMPONENTS_GET(EQUATIONS_SET%GEOMETRY%GEOMETRIC_FIELD, FIELD_U_VARIABLE_TYPE, & - & NUMBER_OF_DIMENSIONS, ERR, ERROR, *999) - INDEPENDENT_FIELD_NUMBER_OF_COMPONENTS = NUMBER_OF_DIMENSIONS !+ 1 - CALL FIELD_NUMBER_OF_COMPONENTS_SET_AND_LOCK(EQUATIONS_SET%INDEPENDENT%INDEPENDENT_FIELD, FIELD_U_VARIABLE_TYPE, & - & INDEPENDENT_FIELD_NUMBER_OF_COMPONENTS, ERR, ERROR, *999) - CALL FIELD_NUMBER_OF_COMPONENTS_SET_AND_LOCK(EQUATIONS_SET%INDEPENDENT%INDEPENDENT_FIELD, & - & FIELD_DELUDELN_VARIABLE_TYPE, INDEPENDENT_FIELD_NUMBER_OF_COMPONENTS, ERR, ERROR, *999) - !Default to the geometric interpolation setup - CALL FIELD_COMPONENT_MESH_COMPONENT_GET(EQUATIONS_SET%GEOMETRY%GEOMETRIC_FIELD,FIELD_U_VARIABLE_TYPE,1, & - & GEOMETRIC_MESH_COMPONENT,err,error,*999) - DO i=1,INDEPENDENT_FIELD_NUMBER_OF_COMPONENTS - IF( i < INDEPENDENT_FIELD_NUMBER_OF_COMPONENTS ) THEN - !Set velocity mesh component (default to the geometric one) - MESH_COMPONENT = GEOMETRIC_MESH_COMPONENT - CALL FIELD_COMPONENT_MESH_COMPONENT_SET(EQUATIONS_SET%INDEPENDENT%INDEPENDENT_FIELD,FIELD_U_VARIABLE_TYPE, & - & i, MESH_COMPONENT,err,error,*999) - CALL FIELD_COMPONENT_MESH_COMPONENT_SET(EQUATIONS_SET%INDEPENDENT%INDEPENDENT_FIELD,& - & FIELD_DELUDELN_VARIABLE_TYPE, i, MESH_COMPONENT,err,error,*999) - ELSE - !Set pressure mesh component (default to the geometric one) - MESH_COMPONENT = GEOMETRIC_MESH_COMPONENT - CALL FIELD_COMPONENT_MESH_COMPONENT_SET(EQUATIONS_SET%INDEPENDENT%INDEPENDENT_FIELD,FIELD_U_VARIABLE_TYPE, & - & i, MESH_COMPONENT,err,error,*999) - CALL FIELD_COMPONENT_MESH_COMPONENT_SET(EQUATIONS_SET%INDEPENDENT%INDEPENDENT_FIELD,& - & FIELD_DELUDELN_VARIABLE_TYPE, i, MESH_COMPONENT,err,error,*999) - ENDIF - ENDDO - - SELECT CASE(EQUATIONS_SET%SOLUTION_METHOD) - CASE(EQUATIONS_SET_FEM_SOLUTION_METHOD) - DO i = 1, INDEPENDENT_FIELD_NUMBER_OF_COMPONENTS - CALL FIELD_COMPONENT_INTERPOLATION_SET_AND_LOCK(EQUATIONS_SET%INDEPENDENT%INDEPENDENT_FIELD, & - & FIELD_U_VARIABLE_TYPE,i,FIELD_NODE_BASED_INTERPOLATION,err,error,*999) - CALL FIELD_COMPONENT_INTERPOLATION_SET_AND_LOCK(EQUATIONS_SET%INDEPENDENT%INDEPENDENT_FIELD, & - & FIELD_DELUDELN_VARIABLE_TYPE,i,FIELD_NODE_BASED_INTERPOLATION,err,error,*999) - ENDDO - !Default the scaling to the geometric field scaling - CALL FIELD_SCALING_TYPE_GET(EQUATIONS_SET%GEOMETRY%GEOMETRIC_FIELD,GEOMETRIC_SCALING_TYPE,err,error,*999) - CALL FIELD_SCALING_TYPE_SET(EQUATIONS_SET%INDEPENDENT%INDEPENDENT_FIELD,GEOMETRIC_SCALING_TYPE,err,error,*999) - CASE(EQUATIONS_SET_BEM_SOLUTION_METHOD) - CALL FlagError("Not implemented.",err,error,*999) - CASE(EQUATIONS_SET_FD_SOLUTION_METHOD) - CALL FlagError("Not implemented.",err,error,*999) - CASE(EQUATIONS_SET_FV_SOLUTION_METHOD) - CALL FlagError("Not implemented.",err,error,*999) - CASE(EQUATIONS_SET_GFEM_SOLUTION_METHOD) - CALL FlagError("Not implemented.",err,error,*999) - CASE(EQUATIONS_SET_GFV_SOLUTION_METHOD) - CALL FlagError("Not implemented.",err,error,*999) - CASE DEFAULT - localError="The solution method of "//TRIM(NumberToVString(EQUATIONS_SET%SOLUTION_METHOD,"*",err,error))// & - & " is invalid." - CALL FlagError(localError,err,error,*999) - END SELECT - ELSE - !Check the user specified field - CALL FIELD_TYPE_CHECK(EQUATIONS_SET_SETUP%FIELD,FIELD_GENERAL_TYPE,err,error,*999) - - CALL FIELD_DEPENDENT_TYPE_CHECK(EQUATIONS_SET_SETUP%FIELD,FIELD_INDEPENDENT_TYPE,err,error,*999) - - CALL FIELD_NUMBER_OF_VARIABLES_CHECK(EQUATIONS_SET_SETUP%FIELD,2,err,error,*999) - CALL FIELD_VARIABLE_TYPES_CHECK(EQUATIONS_SET_SETUP%FIELD,[FIELD_U_VARIABLE_TYPE,FIELD_DELUDELN_VARIABLE_TYPE], & - & err,error,*999) - CALL FIELD_DIMENSION_CHECK(EQUATIONS_SET_SETUP%FIELD,FIELD_U_VARIABLE_TYPE,FIELD_VECTOR_DIMENSION_TYPE, & - & err,error,*999) - CALL FIELD_DIMENSION_CHECK(EQUATIONS_SET_SETUP%FIELD,FIELD_DELUDELN_VARIABLE_TYPE,FIELD_VECTOR_DIMENSION_TYPE, & - & err,error,*999) - CALL FIELD_DATA_TYPE_CHECK(EQUATIONS_SET_SETUP%FIELD,FIELD_U_VARIABLE_TYPE,FIELD_DP_TYPE,err,error,*999) - CALL FIELD_DATA_TYPE_CHECK(EQUATIONS_SET_SETUP%FIELD,FIELD_DELUDELN_VARIABLE_TYPE,FIELD_DP_TYPE,err,error,*999) - CALL FIELD_NUMBER_OF_COMPONENTS_GET(EQUATIONS_SET%GEOMETRY%GEOMETRIC_FIELD, FIELD_U_VARIABLE_TYPE, & - & NUMBER_OF_DIMENSIONS, ERR, ERROR, *999) - INDEPENDENT_FIELD_NUMBER_OF_COMPONENTS = NUMBER_OF_DIMENSIONS !+ 1 - CALL FIELD_NUMBER_OF_COMPONENTS_CHECK(EQUATIONS_SET_SETUP%FIELD,FIELD_U_VARIABLE_TYPE, & - & INDEPENDENT_FIELD_NUMBER_OF_COMPONENTS,err,error,*999) - CALL FIELD_NUMBER_OF_COMPONENTS_CHECK(EQUATIONS_SET_SETUP%FIELD,FIELD_DELUDELN_VARIABLE_TYPE, & - & INDEPENDENT_FIELD_NUMBER_OF_COMPONENTS,err,error,*999) - - SELECT CASE(EQUATIONS_SET%SOLUTION_METHOD) - CASE(EQUATIONS_SET_FEM_SOLUTION_METHOD) - CALL FIELD_COMPONENT_INTERPOLATION_CHECK(EQUATIONS_SET_SETUP%FIELD,FIELD_U_VARIABLE_TYPE,1, & - & FIELD_NODE_BASED_INTERPOLATION,err,error,*999) - CALL FIELD_COMPONENT_INTERPOLATION_CHECK(EQUATIONS_SET_SETUP%FIELD,FIELD_DELUDELN_VARIABLE_TYPE,1, & - & FIELD_NODE_BASED_INTERPOLATION,err,error,*999) - CASE(EQUATIONS_SET_BEM_SOLUTION_METHOD) - CALL FlagError("Not implemented.",err,error,*999) - CASE(EQUATIONS_SET_FD_SOLUTION_METHOD) - CALL FlagError("Not implemented.",err,error,*999) - CASE(EQUATIONS_SET_FV_SOLUTION_METHOD) - CALL FlagError("Not implemented.",err,error,*999) - CASE(EQUATIONS_SET_GFEM_SOLUTION_METHOD) - CALL FlagError("Not implemented.",err,error,*999) - CASE(EQUATIONS_SET_GFV_SOLUTION_METHOD) - CALL FlagError("Not implemented.",err,error,*999) - CASE DEFAULT - localError="The solution method of "//TRIM(NumberToVString(EQUATIONS_SET%SOLUTION_METHOD,"*",err,error))// & - & " is invalid." - CALL FlagError(localError,err,error,*999) - END SELECT - ENDIF - CASE(EQUATIONS_SET_SETUP_FINISH_ACTION) - IF(EQUATIONS_SET%INDEPENDENT%INDEPENDENT_FIELD_AUTO_CREATED) THEN - CALL FIELD_CREATE_FINISH(EQUATIONS_SET%INDEPENDENT%INDEPENDENT_FIELD,err,error,*999) - ENDIF - CASE DEFAULT - localError="The action type of "//TRIM(NumberToVString(EQUATIONS_SET_SETUP%ACTION_TYPE,"*",err,error))// & - & " for a setup type of "//TRIM(NumberToVString(EQUATIONS_SET_SETUP%SETUP_TYPE,"*",err,error))// & - & " is invalid for a standard, quasistatic or ALE Darcy equation" - CALL FlagError(localError,err,error,*999) - END SELECT - END SELECT - - !----------------------------------------------------------------- - ! m a t e r i a l f i e l d - !----------------------------------------------------------------- - CASE(EQUATIONS_SET_SETUP_MATERIALS_TYPE) - SELECT CASE(EQUATIONS_SET%SPECIFICATION(3)) - CASE(EQUATIONS_SET_STANDARD_DARCY_SUBTYPE, EQUATIONS_SET_QUASISTATIC_DARCY_SUBTYPE, EQUATIONS_SET_ALE_DARCY_SUBTYPE, & - & EQUATIONS_SET_TRANSIENT_DARCY_SUBTYPE,EQUATIONS_SET_INCOMPRESSIBLE_FINITE_ELASTICITY_DARCY_SUBTYPE, & - & EQUATIONS_SET_TRANSIENT_ALE_DARCY_SUBTYPE,EQUATIONS_SET_ELASTICITY_DARCY_INRIA_MODEL_SUBTYPE, & - & EQUATIONS_SET_INCOMPRESSIBLE_ELASTICITY_DRIVEN_DARCY_SUBTYPE, EQUATIONS_SET_MULTI_COMPARTMENT_DARCY_SUBTYPE) - MATERIAL_FIELD_NUMBER_OF_VARIABLES = 1 - SELECT CASE(EQUATIONS_SET%SPECIFICATION(3)) - CASE(EQUATIONS_SET_STANDARD_DARCY_SUBTYPE,EQUATIONS_SET_QUASISTATIC_DARCY_SUBTYPE,EQUATIONS_SET_ALE_DARCY_SUBTYPE) - !Porosity + scalar permeability/viscosity - MATERIAL_FIELD_NUMBER_OF_COMPONENTS = 2 - CASE DEFAULT - !Porosity + symmetric permeability/viscosity tensor - MATERIAL_FIELD_NUMBER_OF_COMPONENTS = 7 - END SELECT - SELECT CASE(EQUATIONS_SET_SETUP%ACTION_TYPE) - CASE(EQUATIONS_SET_SETUP_START_ACTION) - EQUATIONS_MATERIALS=>EQUATIONS_SET%MATERIALS - IF(ASSOCIATED(EQUATIONS_MATERIALS)) THEN - IF(EQUATIONS_MATERIALS%MATERIALS_FIELD_AUTO_CREATED) THEN - !Create the auto created materials field - CALL FIELD_CREATE_START(EQUATIONS_SET_SETUP%FIELD_USER_NUMBER,EQUATIONS_SET%REGION,EQUATIONS_MATERIALS% & - & MATERIALS_FIELD,err,error,*999) - CALL FIELD_TYPE_SET_AND_LOCK(EQUATIONS_MATERIALS%MATERIALS_FIELD,FIELD_MATERIAL_TYPE,err,error,*999) - CALL FIELD_DEPENDENT_TYPE_SET_AND_LOCK(EQUATIONS_MATERIALS%MATERIALS_FIELD,FIELD_INDEPENDENT_TYPE,err,error,*999) - CALL FIELD_MESH_DECOMPOSITION_GET(EQUATIONS_SET%GEOMETRY%GEOMETRIC_FIELD,GEOMETRIC_DECOMPOSITION,err,error,*999) - CALL FIELD_MESH_DECOMPOSITION_SET_AND_LOCK(EQUATIONS_MATERIALS%MATERIALS_FIELD,GEOMETRIC_DECOMPOSITION, & - & err,error,*999) - CALL FIELD_GEOMETRIC_FIELD_SET_AND_LOCK(EQUATIONS_MATERIALS%MATERIALS_FIELD,EQUATIONS_SET%GEOMETRY% & - & GEOMETRIC_FIELD,err,error,*999) - CALL FIELD_NUMBER_OF_VARIABLES_SET(EQUATIONS_MATERIALS%MATERIALS_FIELD, & - & MATERIAL_FIELD_NUMBER_OF_VARIABLES,err,error,*999) - CALL FIELD_VARIABLE_TYPES_SET_AND_LOCK(EQUATIONS_MATERIALS%MATERIALS_FIELD,[FIELD_U_VARIABLE_TYPE], & - & err,error,*999) - CALL FIELD_VARIABLE_LABEL_SET(EQUATIONS_MATERIALS%MATERIALS_FIELD,FIELD_U_VARIABLE_TYPE,"Material", & - & err,error,*999) - CALL FIELD_DIMENSION_SET_AND_LOCK(EQUATIONS_MATERIALS%MATERIALS_FIELD,FIELD_U_VARIABLE_TYPE, & - & FIELD_VECTOR_DIMENSION_TYPE,err,error,*999) - CALL FIELD_DATA_TYPE_SET_AND_LOCK(EQUATIONS_MATERIALS%MATERIALS_FIELD,FIELD_U_VARIABLE_TYPE, & - & FIELD_DP_TYPE,err,error,*999) - CALL FIELD_NUMBER_OF_COMPONENTS_SET_AND_LOCK(EQUATIONS_MATERIALS%MATERIALS_FIELD,FIELD_U_VARIABLE_TYPE, & - & MATERIAL_FIELD_NUMBER_OF_COMPONENTS,err,error,*999) - CALL FIELD_COMPONENT_MESH_COMPONENT_GET(EQUATIONS_SET%GEOMETRY%GEOMETRIC_FIELD,FIELD_U_VARIABLE_TYPE, & - & 1,GEOMETRIC_COMPONENT_NUMBER,err,error,*999) - - !Auto-created / default is node_based_interpolation: that's an expensive default ... - !Maybe default should be constant; node_based should be requested by the user \todo - DO i = 1, MATERIAL_FIELD_NUMBER_OF_COMPONENTS - CALL FIELD_COMPONENT_INTERPOLATION_SET(EQUATIONS_MATERIALS%MATERIALS_FIELD,FIELD_U_VARIABLE_TYPE, & - & i,FIELD_NODE_BASED_INTERPOLATION,err,error,*999) - CALL FIELD_COMPONENT_MESH_COMPONENT_SET(EQUATIONS_MATERIALS%MATERIALS_FIELD,FIELD_U_VARIABLE_TYPE, & - & i,GEOMETRIC_COMPONENT_NUMBER,err,error,*999) - END DO - - !Default the field scaling to that of the geometric field - CALL FIELD_SCALING_TYPE_GET(EQUATIONS_SET%GEOMETRY%GEOMETRIC_FIELD,GEOMETRIC_SCALING_TYPE,err,error,*999) - CALL FIELD_SCALING_TYPE_SET(EQUATIONS_MATERIALS%MATERIALS_FIELD,GEOMETRIC_SCALING_TYPE,err,error,*999) - ELSE - !Check the user specified field - CALL FIELD_TYPE_CHECK(EQUATIONS_SET_SETUP%FIELD,FIELD_MATERIAL_TYPE,err,error,*999) - CALL FIELD_DEPENDENT_TYPE_CHECK(EQUATIONS_SET_SETUP%FIELD,FIELD_INDEPENDENT_TYPE,err,error,*999) - CALL FIELD_NUMBER_OF_VARIABLES_CHECK(EQUATIONS_SET_SETUP%FIELD,MATERIAL_FIELD_NUMBER_OF_VARIABLES,err,error,*999) - CALL FIELD_VARIABLE_TYPES_CHECK(EQUATIONS_SET_SETUP%FIELD,[FIELD_U_VARIABLE_TYPE],err,error,*999) - CALL FIELD_DIMENSION_CHECK(EQUATIONS_SET_SETUP%FIELD,FIELD_U_VARIABLE_TYPE,FIELD_VECTOR_DIMENSION_TYPE, & - & err,error,*999) - CALL FIELD_DATA_TYPE_CHECK(EQUATIONS_SET_SETUP%FIELD,FIELD_U_VARIABLE_TYPE,FIELD_DP_TYPE,err,error,*999) - CALL FIELD_NUMBER_OF_COMPONENTS_CHECK(EQUATIONS_SET_SETUP%FIELD,FIELD_U_VARIABLE_TYPE, & - & MATERIAL_FIELD_NUMBER_OF_COMPONENTS,err,error,*999) - ENDIF - ELSE - CALL FlagError("Equations set materials is not associated.",err,error,*999) - ENDIF - CASE(EQUATIONS_SET_SETUP_FINISH_ACTION) - EQUATIONS_MATERIALS=>EQUATIONS_SET%MATERIALS - IF( ASSOCIATED(EQUATIONS_MATERIALS) ) THEN - IF( EQUATIONS_MATERIALS%MATERIALS_FIELD_AUTO_CREATED ) THEN - CALL FIELD_CREATE_FINISH(EQUATIONS_MATERIALS%MATERIALS_FIELD,err,error,*999) - !Set the default values for the materials field - DO i=1,MATERIAL_FIELD_NUMBER_OF_COMPONENTS - CALL FIELD_COMPONENT_VALUES_INITIALISE(EQUATIONS_MATERIALS%MATERIALS_FIELD,FIELD_U_VARIABLE_TYPE, & - & FIELD_VALUES_SET_TYPE, i, 1.0_DP, ERR, ERROR, *999) - ENDDO - ENDIF - ELSE - CALL FlagError("Equations set materials is not associated.",err,error,*999) - ENDIF - CASE DEFAULT - localError="The action type of "//TRIM(NumberToVString(EQUATIONS_SET_SETUP%ACTION_TYPE,"*",err,error))// & - & " for a setup type of "//TRIM(NumberToVString(EQUATIONS_SET_SETUP%SETUP_TYPE,"*",err,error))// & - & " is invalid for a standard, quasistatic or ALE Darcy equation." - CALL FlagError(localError,err,error,*999) - END SELECT - CASE(EQUATIONS_SET_INCOMPRESSIBLE_ELAST_MULTI_COMP_DARCY_SUBTYPE) - !Materials field needs two extra variable types - !The V variable type stores the Darcy coupling coefficients that govern flux between compartments - !The U1 variable type stores the parameters for the constitutive laws that determine the partial pressure in each compartment - !For a first attempt at this, it will be assumed that the functional form of this law is the same for each compartment, with only the paramenters varying (default will be three components) - EQUATIONS_SET_FIELD_FIELD=>EQUATIONS_SET%EQUATIONS_SET_FIELD%EQUATIONS_SET_FIELD_FIELD - CALL FIELD_PARAMETER_SET_DATA_GET(EQUATIONS_SET_FIELD_FIELD,FIELD_U_VARIABLE_TYPE, & - & FIELD_VALUES_SET_TYPE,EQUATIONS_SET_FIELD_DATA,err,error,*999) - Ncompartments=EQUATIONS_SET_FIELD_DATA(2) - MATERIAL_FIELD_NUMBER_OF_VARIABLES = 3 - MATERIAL_FIELD_NUMBER_OF_U_VAR_COMPONENTS = 2 - MATERIAL_FIELD_NUMBER_OF_V_VAR_COMPONENTS = Ncompartments - MATERIAL_FIELD_NUMBER_OF_U1_VAR_COMPONENTS = 3 - SELECT CASE(EQUATIONS_SET_SETUP%ACTION_TYPE) - CASE(EQUATIONS_SET_SETUP_START_ACTION) - EQUATIONS_MATERIALS=>EQUATIONS_SET%MATERIALS - IF(ASSOCIATED(EQUATIONS_MATERIALS)) THEN - IF(EQUATIONS_MATERIALS%MATERIALS_FIELD_AUTO_CREATED) THEN - !Create the auto created materials field - CALL FIELD_CREATE_START(EQUATIONS_SET_SETUP%FIELD_USER_NUMBER,EQUATIONS_SET%REGION,EQUATIONS_MATERIALS% & - & MATERIALS_FIELD,err,error,*999) - CALL FIELD_TYPE_SET_AND_LOCK(EQUATIONS_MATERIALS%MATERIALS_FIELD,FIELD_MATERIAL_TYPE,err,error,*999) - CALL FIELD_DEPENDENT_TYPE_SET_AND_LOCK(EQUATIONS_MATERIALS%MATERIALS_FIELD,FIELD_INDEPENDENT_TYPE,err,error,*999) - CALL FIELD_MESH_DECOMPOSITION_GET(EQUATIONS_SET%GEOMETRY%GEOMETRIC_FIELD,GEOMETRIC_DECOMPOSITION,err,error,*999) - CALL FIELD_MESH_DECOMPOSITION_SET_AND_LOCK(EQUATIONS_MATERIALS%MATERIALS_FIELD,GEOMETRIC_DECOMPOSITION, & - & err,error,*999) - CALL FIELD_GEOMETRIC_FIELD_SET_AND_LOCK(EQUATIONS_MATERIALS%MATERIALS_FIELD,EQUATIONS_SET%GEOMETRY% & - & GEOMETRIC_FIELD,err,error,*999) - CALL FIELD_NUMBER_OF_VARIABLES_SET(EQUATIONS_MATERIALS%MATERIALS_FIELD, & - & MATERIAL_FIELD_NUMBER_OF_VARIABLES,err,error,*999) - CALL FIELD_VARIABLE_TYPES_SET_AND_LOCK(EQUATIONS_MATERIALS%MATERIALS_FIELD,[FIELD_U_VARIABLE_TYPE, & - & FIELD_V_VARIABLE_TYPE,FIELD_U1_VARIABLE_TYPE],err,error,*999) - CALL FIELD_DIMENSION_SET_AND_LOCK(EQUATIONS_MATERIALS%MATERIALS_FIELD,FIELD_U_VARIABLE_TYPE, & - & FIELD_VECTOR_DIMENSION_TYPE,err,error,*999) - CALL FIELD_DATA_TYPE_SET_AND_LOCK(EQUATIONS_MATERIALS%MATERIALS_FIELD,FIELD_U_VARIABLE_TYPE, & - & FIELD_DP_TYPE,err,error,*999) - CALL FIELD_DIMENSION_SET_AND_LOCK(EQUATIONS_MATERIALS%MATERIALS_FIELD,FIELD_V_VARIABLE_TYPE, & - & FIELD_VECTOR_DIMENSION_TYPE,err,error,*999) - CALL FIELD_DATA_TYPE_SET_AND_LOCK(EQUATIONS_MATERIALS%MATERIALS_FIELD,FIELD_V_VARIABLE_TYPE, & - & FIELD_DP_TYPE,err,error,*999) - CALL FIELD_DIMENSION_SET_AND_LOCK(EQUATIONS_MATERIALS%MATERIALS_FIELD,FIELD_U1_VARIABLE_TYPE, & - & FIELD_VECTOR_DIMENSION_TYPE,err,error,*999) - CALL FIELD_DATA_TYPE_SET_AND_LOCK(EQUATIONS_MATERIALS%MATERIALS_FIELD,FIELD_U1_VARIABLE_TYPE, & - & FIELD_DP_TYPE,err,error,*999) - CALL FIELD_NUMBER_OF_COMPONENTS_SET_AND_LOCK(EQUATIONS_MATERIALS%MATERIALS_FIELD,FIELD_U_VARIABLE_TYPE, & - & MATERIAL_FIELD_NUMBER_OF_U_VAR_COMPONENTS,err,error,*999) - CALL FIELD_NUMBER_OF_COMPONENTS_SET_AND_LOCK(EQUATIONS_MATERIALS%MATERIALS_FIELD,FIELD_V_VARIABLE_TYPE, & - & MATERIAL_FIELD_NUMBER_OF_V_VAR_COMPONENTS,err,error,*999) - CALL FIELD_NUMBER_OF_COMPONENTS_SET_AND_LOCK(EQUATIONS_MATERIALS%MATERIALS_FIELD,FIELD_U1_VARIABLE_TYPE, & - & MATERIAL_FIELD_NUMBER_OF_U1_VAR_COMPONENTS,err,error,*999) - CALL FIELD_COMPONENT_MESH_COMPONENT_GET(EQUATIONS_SET%GEOMETRY%GEOMETRIC_FIELD,FIELD_U_VARIABLE_TYPE, & - & 1,GEOMETRIC_COMPONENT_NUMBER,err,error,*999) - - !Auto-created / default is node_based_interpolation: that's an expensive default ... - !Maybe default should be constant; node_based should be requested by the user \todo - DO i = 1, MATERIAL_FIELD_NUMBER_OF_U_VAR_COMPONENTS - CALL FIELD_COMPONENT_INTERPOLATION_SET(EQUATIONS_MATERIALS%MATERIALS_FIELD,FIELD_U_VARIABLE_TYPE, & - & i,FIELD_NODE_BASED_INTERPOLATION,err,error,*999) - CALL FIELD_COMPONENT_MESH_COMPONENT_SET(EQUATIONS_MATERIALS%MATERIALS_FIELD,FIELD_U_VARIABLE_TYPE, & - & i,GEOMETRIC_COMPONENT_NUMBER,err,error,*999) - END DO - DO i = 1, MATERIAL_FIELD_NUMBER_OF_V_VAR_COMPONENTS - CALL FIELD_COMPONENT_INTERPOLATION_SET(EQUATIONS_MATERIALS%MATERIALS_FIELD,FIELD_V_VARIABLE_TYPE, & - & i,FIELD_NODE_BASED_INTERPOLATION,err,error,*999) - CALL FIELD_COMPONENT_MESH_COMPONENT_SET(EQUATIONS_MATERIALS%MATERIALS_FIELD,FIELD_V_VARIABLE_TYPE, & - & i,GEOMETRIC_COMPONENT_NUMBER,err,error,*999) - END DO - DO i = 1, MATERIAL_FIELD_NUMBER_OF_U1_VAR_COMPONENTS - CALL FIELD_COMPONENT_INTERPOLATION_SET(EQUATIONS_MATERIALS%MATERIALS_FIELD,FIELD_U1_VARIABLE_TYPE, & - & i,FIELD_NODE_BASED_INTERPOLATION,err,error,*999) - CALL FIELD_COMPONENT_MESH_COMPONENT_SET(EQUATIONS_MATERIALS%MATERIALS_FIELD,FIELD_U1_VARIABLE_TYPE, & - & i,GEOMETRIC_COMPONENT_NUMBER,err,error,*999) - END DO - - !Default the field scaling to that of the geometric field - CALL FIELD_SCALING_TYPE_GET(EQUATIONS_SET%GEOMETRY%GEOMETRIC_FIELD,GEOMETRIC_SCALING_TYPE,err,error,*999) - CALL FIELD_SCALING_TYPE_SET(EQUATIONS_MATERIALS%MATERIALS_FIELD,GEOMETRIC_SCALING_TYPE,err,error,*999) - ELSE - !Check the user specified field - CALL FIELD_TYPE_CHECK(EQUATIONS_SET_SETUP%FIELD,FIELD_MATERIAL_TYPE,err,error,*999) - CALL FIELD_DEPENDENT_TYPE_CHECK(EQUATIONS_SET_SETUP%FIELD,FIELD_INDEPENDENT_TYPE,err,error,*999) - CALL FIELD_NUMBER_OF_VARIABLES_CHECK(EQUATIONS_SET_SETUP%FIELD,MATERIAL_FIELD_NUMBER_OF_VARIABLES,err,error,*999) - CALL FIELD_VARIABLE_TYPES_CHECK(EQUATIONS_SET_SETUP%FIELD,[FIELD_U_VARIABLE_TYPE, & - & FIELD_V_VARIABLE_TYPE,FIELD_U1_VARIABLE_TYPE],err,error,*999) - CALL FIELD_DIMENSION_CHECK(EQUATIONS_SET_SETUP%FIELD,FIELD_U_VARIABLE_TYPE,FIELD_VECTOR_DIMENSION_TYPE, & - & err,error,*999) - CALL FIELD_DIMENSION_CHECK(EQUATIONS_SET_SETUP%FIELD,FIELD_V_VARIABLE_TYPE,FIELD_VECTOR_DIMENSION_TYPE, & - & err,error,*999) - CALL FIELD_DIMENSION_CHECK(EQUATIONS_SET_SETUP%FIELD,FIELD_U1_VARIABLE_TYPE,FIELD_VECTOR_DIMENSION_TYPE, & - & err,error,*999) - CALL FIELD_DATA_TYPE_CHECK(EQUATIONS_SET_SETUP%FIELD,FIELD_U_VARIABLE_TYPE,FIELD_DP_TYPE,err,error,*999) - CALL FIELD_DATA_TYPE_CHECK(EQUATIONS_SET_SETUP%FIELD,FIELD_V_VARIABLE_TYPE,FIELD_DP_TYPE,err,error,*999) - CALL FIELD_DATA_TYPE_CHECK(EQUATIONS_SET_SETUP%FIELD,FIELD_U1_VARIABLE_TYPE,FIELD_DP_TYPE,err,error,*999) - CALL FIELD_NUMBER_OF_COMPONENTS_CHECK(EQUATIONS_SET_SETUP%FIELD,FIELD_U_VARIABLE_TYPE, & - & MATERIAL_FIELD_NUMBER_OF_U_VAR_COMPONENTS,err,error,*999) - CALL FIELD_NUMBER_OF_COMPONENTS_CHECK(EQUATIONS_SET_SETUP%FIELD,FIELD_V_VARIABLE_TYPE, & - & MATERIAL_FIELD_NUMBER_OF_V_VAR_COMPONENTS,err,error,*999) - CALL FIELD_NUMBER_OF_COMPONENTS_CHECK(EQUATIONS_SET_SETUP%FIELD,FIELD_U1_VARIABLE_TYPE, & - & MATERIAL_FIELD_NUMBER_OF_U1_VAR_COMPONENTS,err,error,*999) - ENDIF - ELSE - CALL FlagError("Equations set materials is not associated.",err,error,*999) - ENDIF - CASE(EQUATIONS_SET_SETUP_FINISH_ACTION) - EQUATIONS_MATERIALS=>EQUATIONS_SET%MATERIALS - IF( ASSOCIATED(EQUATIONS_MATERIALS) ) THEN - IF( EQUATIONS_MATERIALS%MATERIALS_FIELD_AUTO_CREATED ) THEN - CALL FIELD_CREATE_FINISH(EQUATIONS_MATERIALS%MATERIALS_FIELD,err,error,*999) - !Set the default values for the materials field - DO i=1,MATERIAL_FIELD_NUMBER_OF_U_VAR_COMPONENTS - CALL FIELD_COMPONENT_VALUES_INITIALISE(EQUATIONS_MATERIALS%MATERIALS_FIELD,FIELD_U_VARIABLE_TYPE, & - & FIELD_VALUES_SET_TYPE, i, 1.0_DP, ERR, ERROR, *999) - ENDDO - DO i=1,MATERIAL_FIELD_NUMBER_OF_V_VAR_COMPONENTS - CALL FIELD_COMPONENT_VALUES_INITIALISE(EQUATIONS_MATERIALS%MATERIALS_FIELD,FIELD_V_VARIABLE_TYPE, & - & FIELD_VALUES_SET_TYPE, i, 0.0_DP, ERR, ERROR, *999) - ENDDO - DO i=1,MATERIAL_FIELD_NUMBER_OF_U1_VAR_COMPONENTS - CALL FIELD_COMPONENT_VALUES_INITIALISE(EQUATIONS_MATERIALS%MATERIALS_FIELD,FIELD_U1_VARIABLE_TYPE, & - & FIELD_VALUES_SET_TYPE, i, 0.0_DP, ERR, ERROR, *999) - ENDDO - ENDIF - ELSE - CALL FlagError("Equations set materials is not associated.",err,error,*999) - ENDIF - CASE DEFAULT - localError="The action type of "//TRIM(NumberToVString(EQUATIONS_SET_SETUP%ACTION_TYPE,"*",err,error))// & - & " for a setup type of "//TRIM(NumberToVString(EQUATIONS_SET_SETUP%SETUP_TYPE,"*",err,error))// & - & " is invalid for a standard, quasistatic or ALE Darcy equation." - CALL FlagError(localError,err,error,*999) - END SELECT - END SELECT - - !----------------------------------------------------------------- - ! a n a l y t i c f i e l d - !----------------------------------------------------------------- - - CASE(EQUATIONS_SET_SETUP_ANALYTIC_TYPE) - - SELECT CASE(EQUATIONS_SET%SPECIFICATION(3)) - CASE(EQUATIONS_SET_STANDARD_DARCY_SUBTYPE) - SELECT CASE(EQUATIONS_SET_SETUP%ACTION_TYPE) - !Set start action - CASE(EQUATIONS_SET_SETUP_START_ACTION) - IF(EQUATIONS_SET%DEPENDENT%DEPENDENT_FINISHED) THEN - IF(ASSOCIATED(EQUATIONS_SET%DEPENDENT%DEPENDENT_FIELD)) THEN - IF(ASSOCIATED(EQUATIONS_SET%GEOMETRY%GEOMETRIC_FIELD)) THEN - CALL FIELD_NUMBER_OF_COMPONENTS_GET(EQUATIONS_SET%GEOMETRY%GEOMETRIC_FIELD,FIELD_U_VARIABLE_TYPE, & - & NUMBER_OF_DIMENSIONS,err,error,*999) - SELECT CASE(EQUATIONS_SET_SETUP%ANALYTIC_FUNCTION_TYPE) - CASE(EQUATIONS_SET_DARCY_EQUATION_TWO_DIM_1) - !Set analytic function type - EQUATIONS_SET%ANALYTIC%ANALYTIC_FUNCTION_TYPE=EQUATIONS_SET_DARCY_EQUATION_TWO_DIM_1 - CASE(EQUATIONS_SET_DARCY_EQUATION_TWO_DIM_2) - !Set analytic function type - EQUATIONS_SET%ANALYTIC%ANALYTIC_FUNCTION_TYPE=EQUATIONS_SET_DARCY_EQUATION_TWO_DIM_2 - CASE(EQUATIONS_SET_DARCY_EQUATION_TWO_DIM_3) - !Set analytic function type - EQUATIONS_SET%ANALYTIC%ANALYTIC_FUNCTION_TYPE=EQUATIONS_SET_DARCY_EQUATION_TWO_DIM_3 - CASE(EQUATIONS_SET_DARCY_EQUATION_THREE_DIM_1) - !Set analytic function type - EQUATIONS_SET%ANALYTIC%ANALYTIC_FUNCTION_TYPE=EQUATIONS_SET_DARCY_EQUATION_THREE_DIM_1 - CASE(EQUATIONS_SET_DARCY_EQUATION_THREE_DIM_2) - !Set analytic function type - EQUATIONS_SET%ANALYTIC%ANALYTIC_FUNCTION_TYPE=EQUATIONS_SET_DARCY_EQUATION_THREE_DIM_2 - CASE(EQUATIONS_SET_DARCY_EQUATION_THREE_DIM_3) - !Set analytic function type - EQUATIONS_SET%ANALYTIC%ANALYTIC_FUNCTION_TYPE=EQUATIONS_SET_DARCY_EQUATION_THREE_DIM_3 - CASE(EQUATIONS_SET_INCOMP_ELAST_DARCY_ANALYTIC_DARCY) - !Set analytic function type - EQUATIONS_SET%ANALYTIC%ANALYTIC_FUNCTION_TYPE=EQUATIONS_SET_INCOMP_ELAST_DARCY_ANALYTIC_DARCY - CASE DEFAULT - localError="The specified analytic function type of "// & - & TRIM(NumberToVString(EQUATIONS_SET_SETUP%ANALYTIC_FUNCTION_TYPE,"*",err,error))// & - & " is invalid for an analytic Darcy problem." - CALL FlagError(localError,err,error,*999) - END SELECT - ELSE - CALL FlagError("Equations set geometric field is not associated.",err,error,*999) - ENDIF - ELSE - CALL FlagError("Equations set dependent field is not associated.",err,error,*999) - ENDIF - ELSE - CALL FlagError("Equations set dependent field has not been finished.",err,error,*999) - ENDIF - CASE(EQUATIONS_SET_SETUP_FINISH_ACTION) - IF(ASSOCIATED(EQUATIONS_SET%ANALYTIC)) THEN - IF(ASSOCIATED(EQUATIONS_SET%ANALYTIC%ANALYTIC_FIELD)) THEN - IF(EQUATIONS_SET%ANALYTIC%ANALYTIC_FIELD_AUTO_CREATED) THEN - !--- Why finish the dependent field and not the analytic one ??? - CALL FIELD_CREATE_FINISH(EQUATIONS_SET%DEPENDENT%DEPENDENT_FIELD,err,error,*999) - ENDIF - ENDIF - ELSE - CALL FlagError("Equations set analytic is not associated.",err,error,*999) - ENDIF - CASE DEFAULT - localError="The action type of "//TRIM(NumberToVString(EQUATIONS_SET_SETUP%ACTION_TYPE,"*",err,error))// & - & " for a setup type of "//TRIM(NumberToVString(EQUATIONS_SET_SETUP%SETUP_TYPE,"*",err,error))// & - & " is invalid for an analytic Darcy problem." - CALL FlagError(localError,err,error,*999) - END SELECT - CASE(EQUATIONS_SET_INCOMPRESSIBLE_ELASTICITY_DRIVEN_DARCY_SUBTYPE) - SELECT CASE(EQUATIONS_SET_SETUP%ACTION_TYPE) - !Set start action - CASE(EQUATIONS_SET_SETUP_START_ACTION) - IF(EQUATIONS_SET%DEPENDENT%DEPENDENT_FINISHED) THEN - IF(ASSOCIATED(EQUATIONS_SET%DEPENDENT%DEPENDENT_FIELD)) THEN - IF(ASSOCIATED(EQUATIONS_SET%GEOMETRY%GEOMETRIC_FIELD)) THEN - CALL FIELD_NUMBER_OF_COMPONENTS_GET(EQUATIONS_SET%GEOMETRY%GEOMETRIC_FIELD,FIELD_U_VARIABLE_TYPE, & - & NUMBER_OF_DIMENSIONS,err,error,*999) - !Initialise analytic parameter which stores value of time to zero - need to update this somewhere in a pre_solve routine - EQUATIONS_SET%ANALYTIC%ANALYTIC_USER_PARAMS(1)=0.0_DP - SELECT CASE(EQUATIONS_SET_SETUP%ANALYTIC_FUNCTION_TYPE) - CASE(EQUATIONS_SET_INCOMP_ELAST_DARCY_ANALYTIC_DARCY) - !Set analytic function type - EQUATIONS_SET%ANALYTIC%ANALYTIC_FUNCTION_TYPE=EQUATIONS_SET_INCOMP_ELAST_DARCY_ANALYTIC_DARCY - CASE DEFAULT - localError="The specified analytic function type of "// & - & TRIM(NumberToVString(EQUATIONS_SET_SETUP%ANALYTIC_FUNCTION_TYPE,"*",err,error))// & - & " is invalid for an analytic Darcy problem." - CALL FlagError(localError,err,error,*999) - END SELECT - ELSE - CALL FlagError("Equations set geometric field is not associated.",err,error,*999) - ENDIF - ELSE - CALL FlagError("Equations set dependent field is not associated.",err,error,*999) - ENDIF - ELSE - CALL FlagError("Equations set dependent field has not been finished.",err,error,*999) - ENDIF - CASE(EQUATIONS_SET_SETUP_FINISH_ACTION) - IF(ASSOCIATED(EQUATIONS_SET%ANALYTIC)) THEN - IF(ASSOCIATED(EQUATIONS_SET%ANALYTIC%ANALYTIC_FIELD)) THEN - IF(EQUATIONS_SET%ANALYTIC%ANALYTIC_FIELD_AUTO_CREATED) THEN - !--- Why finish the dependent field and not the analytic one ??? - CALL FIELD_CREATE_FINISH(EQUATIONS_SET%DEPENDENT%DEPENDENT_FIELD,err,error,*999) - ENDIF - ENDIF - ELSE - CALL FlagError("Equations set analytic is not associated.",err,error,*999) - ENDIF - CASE DEFAULT - localError="The action type of "//TRIM(NumberToVString(EQUATIONS_SET_SETUP%ACTION_TYPE,"*",err,error))// & - & " for a setup type of "//TRIM(NumberToVString(EQUATIONS_SET_SETUP%SETUP_TYPE,"*",err,error))// & - & " is invalid for an analytic Darcy problem." - CALL FlagError(localError,err,error,*999) - END SELECT - CASE DEFAULT - localError="The equation set subtype of "//TRIM(NumberToVString(EQUATIONS_SET%SPECIFICATION(3),"*",err,error))// & - & " for a setup type of "//TRIM(NumberToVString(EQUATIONS_SET_SETUP%SETUP_TYPE,"*",err,error))// & - & " is invalid for a Darcy equation." - CALL FlagError(localError,err,error,*999) - END SELECT - - !----------------------------------------------------------------- - ! s o u r c e t y p e - include gravity at some point - !----------------------------------------------------------------- - CASE(EQUATIONS_SET_SETUP_SOURCE_TYPE) - SELECT CASE(EQUATIONS_SET%SPECIFICATION(3)) - CASE(EQUATIONS_SET_STANDARD_DARCY_SUBTYPE, EQUATIONS_SET_QUASISTATIC_DARCY_SUBTYPE, EQUATIONS_SET_ALE_DARCY_SUBTYPE, & - & EQUATIONS_SET_TRANSIENT_DARCY_SUBTYPE,EQUATIONS_SET_INCOMPRESSIBLE_FINITE_ELASTICITY_DARCY_SUBTYPE, & - & EQUATIONS_SET_TRANSIENT_ALE_DARCY_SUBTYPE,EQUATIONS_SET_ELASTICITY_DARCY_INRIA_MODEL_SUBTYPE, & - & EQUATIONS_SET_INCOMPRESSIBLE_ELASTICITY_DRIVEN_DARCY_SUBTYPE, & - & EQUATIONS_SET_INCOMPRESSIBLE_ELAST_MULTI_COMP_DARCY_SUBTYPE) - SELECT CASE(EQUATIONS_SET_SETUP%ACTION_TYPE) - CASE(EQUATIONS_SET_SETUP_START_ACTION) - EQUATIONS_SOURCE=>EQUATIONS_SET%SOURCE - IF(ASSOCIATED(EQUATIONS_SOURCE)) THEN - IF(EQUATIONS_SOURCE%SOURCE_FIELD_AUTO_CREATED) THEN - CALL FIELD_CREATE_START(EQUATIONS_SET_SETUP%FIELD_USER_NUMBER,EQUATIONS_SET%REGION,EQUATIONS_SOURCE% & - & SOURCE_FIELD,err,error,*999) - CALL FIELD_LABEL_SET(EQUATIONS_SOURCE%SOURCE_FIELD,"Source Field",err,error,*999) - CALL FIELD_TYPE_SET_AND_LOCK(EQUATIONS_SOURCE%SOURCE_FIELD,FIELD_GENERAL_TYPE,err,error,*999) - CALL FIELD_DEPENDENT_TYPE_SET_AND_LOCK(EQUATIONS_SOURCE%SOURCE_FIELD,FIELD_INDEPENDENT_TYPE,err,error,*999) - CALL FIELD_MESH_DECOMPOSITION_GET(EQUATIONS_SET%GEOMETRY%GEOMETRIC_FIELD,GEOMETRIC_DECOMPOSITION,err,error,*999) - CALL FIELD_MESH_DECOMPOSITION_SET_AND_LOCK(EQUATIONS_SOURCE%SOURCE_FIELD,GEOMETRIC_DECOMPOSITION, & - & err,error,*999) - CALL FIELD_GEOMETRIC_FIELD_SET_AND_LOCK(EQUATIONS_SOURCE%SOURCE_FIELD,EQUATIONS_SET%GEOMETRY% & - & GEOMETRIC_FIELD,err,error,*999) - CALL FIELD_NUMBER_OF_VARIABLES_SET_AND_LOCK(EQUATIONS_SOURCE%SOURCE_FIELD,1,err,error,*999) - CALL FIELD_VARIABLE_TYPES_SET_AND_LOCK(EQUATIONS_SOURCE%SOURCE_FIELD,[FIELD_U_VARIABLE_TYPE], & - & err,error,*999) - CALL FIELD_VARIABLE_LABEL_SET(EQUATIONS_SOURCE%SOURCE_FIELD,FIELD_U_VARIABLE_TYPE,"Source", & - & err,error,*999) - CALL FIELD_DIMENSION_SET_AND_LOCK(EQUATIONS_SOURCE%SOURCE_FIELD,FIELD_U_VARIABLE_TYPE, & - & FIELD_VECTOR_DIMENSION_TYPE,err,error,*999) - CALL FIELD_DATA_TYPE_SET_AND_LOCK(EQUATIONS_SOURCE%SOURCE_FIELD,FIELD_U_VARIABLE_TYPE, & - & FIELD_DP_TYPE,err,error,*999) - CALL FIELD_NUMBER_OF_COMPONENTS_GET(EQUATIONS_SET%GEOMETRY%GEOMETRIC_FIELD, FIELD_U_VARIABLE_TYPE, & - & NUMBER_OF_DIMENSIONS, ERR, ERROR, *999) - NUMBER_OF_SOURCE_COMPONENTS = NUMBER_OF_DIMENSIONS + 1 - CALL FIELD_NUMBER_OF_COMPONENTS_SET_AND_LOCK(EQUATIONS_SOURCE%SOURCE_FIELD,FIELD_U_VARIABLE_TYPE, & - & NUMBER_OF_SOURCE_COMPONENTS,err,error,*999) - - !Default the source components to the geometric interpolation setup with nodal interpolation - IF(EQUATIONS_SET%SPECIFICATION(3)==EQUATIONS_SET_INCOMPRESSIBLE_ELASTICITY_DRIVEN_DARCY_SUBTYPE .OR. & - & EQUATIONS_SET%SPECIFICATION(3)==EQUATIONS_SET_INCOMPRESSIBLE_ELAST_MULTI_COMP_DARCY_SUBTYPE) THEN - !nodal / mesh based - DO component_idx=1,NUMBER_OF_DIMENSIONS !NUMBER_OF_SOURCE_COMPONENTS - CALL FIELD_COMPONENT_MESH_COMPONENT_GET(EQUATIONS_SET%GEOMETRY%GEOMETRIC_FIELD,FIELD_U_VARIABLE_TYPE, & - & component_idx,GEOMETRIC_MESH_COMPONENT,err,error,*999) - CALL FIELD_COMPONENT_INTERPOLATION_SET(EQUATIONS_SOURCE%SOURCE_FIELD,FIELD_U_VARIABLE_TYPE, & - & component_idx,FIELD_NODE_BASED_INTERPOLATION,err,error,*999) - CALL FIELD_COMPONENT_MESH_COMPONENT_SET(EQUATIONS_SOURCE%SOURCE_FIELD,FIELD_U_VARIABLE_TYPE, & - & component_idx,GEOMETRIC_MESH_COMPONENT,err,error,*999) - ENDDO !component_idx - !Set source component 'NUMBER_OF_DIMENSIONS + 1' according to GEOMETRIC_MESH_COMPONENT 'NUMBER_OF_DIMENSIONS' - CALL FIELD_COMPONENT_INTERPOLATION_SET(EQUATIONS_SOURCE%SOURCE_FIELD,FIELD_U_VARIABLE_TYPE, & - & NUMBER_OF_DIMENSIONS + 1,FIELD_NODE_BASED_INTERPOLATION,err,error,*999) - CALL FIELD_COMPONENT_MESH_COMPONENT_SET(EQUATIONS_SOURCE%SOURCE_FIELD,FIELD_U_VARIABLE_TYPE, & - & NUMBER_OF_DIMENSIONS + 1,GEOMETRIC_MESH_COMPONENT,err,error,*999) - ENDIF - !Default the field scaling to that of the geometric field - CALL FIELD_SCALING_TYPE_GET(EQUATIONS_SET%GEOMETRY%GEOMETRIC_FIELD,GEOMETRIC_SCALING_TYPE,err,error,*999) - CALL FIELD_SCALING_TYPE_SET(EQUATIONS_SOURCE%SOURCE_FIELD,GEOMETRIC_SCALING_TYPE,err,error,*999) - ELSE - !Check the user specified field - CALL FIELD_TYPE_CHECK(EQUATIONS_SET_SETUP%FIELD,FIELD_GENERAL_TYPE,err,error,*999) - CALL FIELD_DEPENDENT_TYPE_CHECK(EQUATIONS_SET_SETUP%FIELD,FIELD_INDEPENDENT_TYPE,err,error,*999) - CALL FIELD_NUMBER_OF_VARIABLES_CHECK(EQUATIONS_SET_SETUP%FIELD,1,err,error,*999) - CALL FIELD_VARIABLE_TYPES_CHECK(EQUATIONS_SET_SETUP%FIELD,[FIELD_U_VARIABLE_TYPE],err,error,*999) - CALL FIELD_DIMENSION_CHECK(EQUATIONS_SET_SETUP%FIELD,FIELD_U_VARIABLE_TYPE,FIELD_VECTOR_DIMENSION_TYPE, & - & err,error,*999) - CALL FIELD_DATA_TYPE_CHECK(EQUATIONS_SET_SETUP%FIELD,FIELD_U_VARIABLE_TYPE,FIELD_DP_TYPE,err,error,*999) - CALL FIELD_NUMBER_OF_COMPONENTS_GET(EQUATIONS_SET%GEOMETRY%GEOMETRIC_FIELD, FIELD_U_VARIABLE_TYPE, & - & NUMBER_OF_DIMENSIONS, ERR, ERROR, *999) - NUMBER_OF_SOURCE_COMPONENTS = NUMBER_OF_DIMENSIONS + 1 - CALL FIELD_NUMBER_OF_COMPONENTS_CHECK(EQUATIONS_SET_SETUP%FIELD,FIELD_U_VARIABLE_TYPE, & - & NUMBER_OF_SOURCE_COMPONENTS,err,error,*999) - ENDIF - ELSE - CALL FlagError("Equations set source is not associated.",err,error,*999) - ENDIF - CASE(EQUATIONS_SET_SETUP_FINISH_ACTION) - EQUATIONS_SOURCE=>EQUATIONS_SET%SOURCE - IF(ASSOCIATED(EQUATIONS_SOURCE)) THEN - IF(EQUATIONS_SOURCE%SOURCE_FIELD_AUTO_CREATED) THEN - !Finish creating the source field - CALL FIELD_CREATE_FINISH(EQUATIONS_SOURCE%SOURCE_FIELD,err,error,*999) - !Set the default values for the source field - CALL FIELD_NUMBER_OF_COMPONENTS_GET(EQUATIONS_SET%GEOMETRY%GEOMETRIC_FIELD,FIELD_U_VARIABLE_TYPE, & - & NUMBER_OF_DIMENSIONS,err,error,*999) - IF(EQUATIONS_SET%SPECIFICATION(3)==EQUATIONS_SET_INCOMPRESSIBLE_ELASTICITY_DRIVEN_DARCY_SUBTYPE .OR. & - & EQUATIONS_SET%SPECIFICATION(3)==EQUATIONS_SET_INCOMPRESSIBLE_ELAST_MULTI_COMP_DARCY_SUBTYPE) THEN - NUMBER_OF_SOURCE_COMPONENTS = NUMBER_OF_DIMENSIONS + 1 - ELSE - NUMBER_OF_SOURCE_COMPONENTS=0 - ENDIF - !Now set the source values to 0.0 - DO component_idx=1,NUMBER_OF_SOURCE_COMPONENTS - CALL FIELD_COMPONENT_VALUES_INITIALISE(EQUATIONS_SOURCE%SOURCE_FIELD,FIELD_U_VARIABLE_TYPE, & - & FIELD_VALUES_SET_TYPE,component_idx,0.0_DP,err,error,*999) - ENDDO !component_idx - ENDIF - ELSE - CALL FlagError("Equations set source is not associated.",err,error,*999) - ENDIF - CASE DEFAULT - localError="The action type of "//TRIM(NumberToVString(EQUATIONS_SET_SETUP%ACTION_TYPE,"*",err,error))// & - & " for a setup type of "//TRIM(NumberToVString(EQUATIONS_SET_SETUP%SETUP_TYPE,"*",err,error))// & - & " is invalid for a standard, quasistatic or ALE Darcy equation." - CALL FlagError(localError,err,error,*999) - END SELECT - END SELECT - - !----------------------------------------------------------------- - ! e q u a t i o n s t y p e - !----------------------------------------------------------------- - CASE(EQUATIONS_SET_SETUP_EQUATIONS_TYPE) - SELECT CASE(EQUATIONS_SET%SPECIFICATION(3)) - !----------------------------------------------------------------- - ! s t a t i c - !----------------------------------------------------------------- - CASE(EQUATIONS_SET_STANDARD_DARCY_SUBTYPE,EQUATIONS_SET_MULTI_COMPARTMENT_DARCY_SUBTYPE) - SELECT CASE(EQUATIONS_SET_SETUP%ACTION_TYPE) - CASE(EQUATIONS_SET_SETUP_START_ACTION) - EQUATIONS_MATERIALS=>EQUATIONS_SET%MATERIALS - IF(ASSOCIATED(EQUATIONS_MATERIALS)) THEN - IF(EQUATIONS_MATERIALS%MATERIALS_FINISHED) THEN - CALL Equations_CreateStart(EQUATIONS_SET,equations,err,error,*999) - CALL Equations_LinearityTypeSet(equations,EQUATIONS_LINEAR,err,error,*999) - CALL Equations_TimeDependenceTypeSet(equations,EQUATIONS_STATIC,err,error,*999) - ELSE - CALL FlagError("Equations set materials has not been finished.",err,error,*999) - ENDIF - ELSE - CALL FlagError("Equations set materials is not associated.",err,error,*999) - ENDIF - CASE(EQUATIONS_SET_SETUP_FINISH_ACTION) - SELECT CASE(EQUATIONS_SET%SOLUTION_METHOD) - CASE(EQUATIONS_SET_FEM_SOLUTION_METHOD) - SELECT CASE(EQUATIONS_SET%SPECIFICATION(3)) - CASE(EQUATIONS_SET_MULTI_COMPARTMENT_DARCY_SUBTYPE) - !!!!!THE FOLLOWING IF STATEMENT IS ILLUSTRATIVE ONLY - need to implement the equation set field thing, and make a generalised case statement - CALL EquationsSet_EquationsGet(EQUATIONS_SET,equations,err,error,*999) - CALL Equations_CreateFinish(equations,err,error,*999) - NULLIFY(vectorEquations) - CALL Equations_VectorEquationsGet(equations,vectorEquations,err,error,*999) - !Create the equations mapping. - CALL EquationsMapping_VectorCreateStart(vectorEquations,FIELD_DELUDELN_VARIABLE_TYPE,vectorMapping,err,error,*999) - CALL EquationsMapping_LinearMatricesNumberSet(vectorMapping,1,err,error,*999) - EQUATIONS_SET_FIELD_FIELD=>EQUATIONS_SET%EQUATIONS_SET_FIELD%EQUATIONS_SET_FIELD_FIELD - CALL FIELD_PARAMETER_SET_DATA_GET(EQUATIONS_SET_FIELD_FIELD,FIELD_U_VARIABLE_TYPE, & - & FIELD_VALUES_SET_TYPE,EQUATIONS_SET_FIELD_DATA,err,error,*999) - imy_matrix = EQUATIONS_SET_FIELD_DATA(1) - Ncompartments = EQUATIONS_SET_FIELD_DATA(2) - ALLOCATE(VARIABLE_TYPES(2*Ncompartments)) - DO num_var=1,Ncompartments - VARIABLE_TYPES(2*num_var-1)=FIELD_U_VARIABLE_TYPE+(FIELD_NUMBER_OF_VARIABLE_SUBTYPES*(num_var-1)) - VARIABLE_TYPES(2*num_var)=FIELD_DELUDELN_VARIABLE_TYPE+(FIELD_NUMBER_OF_VARIABLE_SUBTYPES*(num_var-1)) - ENDDO - CALL EquationsMapping_LinearMatricesVariableTypesSet(vectorMapping,[VARIABLE_TYPES(2*imy_matrix-1)], & - & err,error,*999) - CALL EquationsMapping_RHSVariableTypeSet(vectorMapping,VARIABLE_TYPES(2*imy_matrix),err,error,*999) - CALL EquationsMapping_VectorCreateFinish(vectorMapping,err,error,*999) - !Create the equations matrices - CALL EquationsMatrices_VectorCreateStart(vectorEquations,vectorMatrices,err,error,*999) - SELECT CASE(equations%sparsityType) - CASE(EQUATIONS_MATRICES_FULL_MATRICES) - CALL EquationsMatrices_LinearStorageTypeSet(vectorMatrices,[MATRIX_BLOCK_STORAGE_TYPE], & - & err,error,*999) - CASE(EQUATIONS_MATRICES_SPARSE_MATRICES) - CALL EquationsMatrices_LinearStorageTypeSet(vectorMatrices,[MATRIX_COMPRESSED_ROW_STORAGE_TYPE], & - & err,error,*999) - CALL EquationsMatrices_LinearStructureTypeSet(vectorMatrices,[EQUATIONS_MATRIX_FEM_STRUCTURE], & - & err,error,*999) - CASE DEFAULT - localError="The equations matrices sparsity type of "// & - & TRIM(NumberToVString(equations%sparsityType,"*",err,error))//" is invalid." - CALL FlagError(localError,err,error,*999) - END SELECT - CALL EquationsMatrices_VectorCreateFinish(vectorMatrices,err,error,*999) - CASE DEFAULT - !Finish the equations creation - CALL EquationsSet_EquationsGet(EQUATIONS_SET,equations,err,error,*999) - CALL Equations_CreateFinish(equations,err,error,*999) - NULLIFY(vectorEquations) - CALL Equations_VectorEquationsGet(equations,vectorEquations,err,error,*999) - !Create the equations mapping. - CALL EquationsMapping_VectorCreateStart(vectorEquations,FIELD_DELUDELN_VARIABLE_TYPE,vectorMapping,err,error,*999) - CALL EquationsMapping_LinearMatricesNumberSet(vectorMapping,1,err,error,*999) - CALL EquationsMapping_LinearMatricesVariableTypesSet(vectorMapping,[FIELD_U_VARIABLE_TYPE], & - & err,error,*999) - CALL EquationsMapping_RHSVariableTypeSet(vectorMapping,FIELD_DELUDELN_VARIABLE_TYPE,err,error,*999) - CALL EquationsMapping_VectorCreateFinish(vectorMapping,err,error,*999) - !Create the equations matrices - CALL EquationsMatrices_VectorCreateStart(vectorEquations,vectorMatrices,err,error,*999) - SELECT CASE(equations%sparsityType) - CASE(EQUATIONS_MATRICES_FULL_MATRICES) - CALL EquationsMatrices_LinearStorageTypeSet(vectorMatrices,[MATRIX_BLOCK_STORAGE_TYPE], & - & err,error,*999) - CASE(EQUATIONS_MATRICES_SPARSE_MATRICES) - CALL EquationsMatrices_LinearStorageTypeSet(vectorMatrices,[MATRIX_COMPRESSED_ROW_STORAGE_TYPE], & - & err,error,*999) - CALL EquationsMatrices_LinearStructureTypeSet(vectorMatrices,[EQUATIONS_MATRIX_FEM_STRUCTURE], & - & err,error,*999) - CASE DEFAULT - localError="The equations matrices sparsity type of "// & - & TRIM(NumberToVString(equations%sparsityType,"*",err,error))//" is invalid." - CALL FlagError(localError,err,error,*999) - END SELECT - CALL EquationsMatrices_VectorCreateFinish(vectorMatrices,err,error,*999) - END SELECT - CASE(EQUATIONS_SET_BEM_SOLUTION_METHOD) - CALL FlagError("Not implemented.",err,error,*999) - CASE(EQUATIONS_SET_FD_SOLUTION_METHOD) - CALL FlagError("Not implemented.",err,error,*999) - CASE(EQUATIONS_SET_FV_SOLUTION_METHOD) - CALL FlagError("Not implemented.",err,error,*999) - CASE(EQUATIONS_SET_GFEM_SOLUTION_METHOD) - CALL FlagError("Not implemented.",err,error,*999) - CASE(EQUATIONS_SET_GFV_SOLUTION_METHOD) - CALL FlagError("Not implemented.",err,error,*999) - CASE DEFAULT - localError="The solution method of "//TRIM(NumberToVString(EQUATIONS_SET%SOLUTION_METHOD,"*",err,error))// & - & " is invalid." - CALL FlagError(localError,err,error,*999) - END SELECT - - CASE DEFAULT - localError="The action type of "//TRIM(NumberToVString(EQUATIONS_SET_SETUP%ACTION_TYPE,"*",err,error))// & - & " for a setup type of "//TRIM(NumberToVString(EQUATIONS_SET_SETUP%SETUP_TYPE,"*",err,error))// & - & " is invalid for a standard Darcy equation." - CALL FlagError(localError,err,error,*999) - END SELECT - !----------------------------------------------------------------- - ! q u a s i s t a t i c and A L E - !----------------------------------------------------------------- - CASE(EQUATIONS_SET_QUASISTATIC_DARCY_SUBTYPE, EQUATIONS_SET_ALE_DARCY_SUBTYPE, & - & EQUATIONS_SET_INCOMPRESSIBLE_FINITE_ELASTICITY_DARCY_SUBTYPE) - SELECT CASE(EQUATIONS_SET_SETUP%ACTION_TYPE) - CASE(EQUATIONS_SET_SETUP_START_ACTION) - EQUATIONS_MATERIALS=>EQUATIONS_SET%MATERIALS - IF( ASSOCIATED(EQUATIONS_MATERIALS) ) THEN - IF( EQUATIONS_MATERIALS%MATERIALS_FINISHED ) THEN - CALL Equations_CreateStart(EQUATIONS_SET,equations,err,error,*999) - CALL Equations_LinearityTypeSet(equations,EQUATIONS_LINEAR,err,error,*999) - CALL Equations_TimeDependenceTypeSet(equations,EQUATIONS_QUASISTATIC,err,error,*999) - ELSE - CALL FlagError("Equations set materials has not been finished.",err,error,*999) - ENDIF - ELSE - CALL FlagError("Equations set materials is not associated.",err,error,*999) - ENDIF - CASE(EQUATIONS_SET_SETUP_FINISH_ACTION) - SELECT CASE(EQUATIONS_SET%SOLUTION_METHOD) - CASE(EQUATIONS_SET_FEM_SOLUTION_METHOD) - !Finish the equations creation - CALL EquationsSet_EquationsGet(EQUATIONS_SET,equations,err,error,*999) - CALL Equations_CreateFinish(equations,err,error,*999) - NULLIFY(vectorEquations) - CALL Equations_VectorEquationsGet(equations,vectorEquations,err,error,*999) - !Create the equations mapping. - CALL EquationsMapping_VectorCreateStart(vectorEquations,FIELD_DELUDELN_VARIABLE_TYPE,vectorMapping,err,error,*999) - CALL EquationsMapping_LinearMatricesNumberSet(vectorMapping,1,err,error,*999) - SELECT CASE(EQUATIONS_SET%SPECIFICATION(3)) - CASE(EQUATIONS_SET_INCOMPRESSIBLE_FINITE_ELASTICITY_DARCY_SUBTYPE) - CALL EquationsMapping_LinearMatricesVariableTypesSet(vectorMapping,[FIELD_V_VARIABLE_TYPE], & - & err,error,*999) - CALL EquationsMapping_RHSVariableTypeSet(vectorMapping,FIELD_DELVDELN_VARIABLE_TYPE,err,error,*999) - CASE DEFAULT - CALL EquationsMapping_LinearMatricesVariableTypesSet(vectorMapping,[FIELD_U_VARIABLE_TYPE], & - & err,error,*999) - CALL EquationsMapping_RHSVariableTypeSet(vectorMapping,FIELD_DELUDELN_VARIABLE_TYPE,err,error,*999) - END SELECT - CALL EquationsMapping_VectorCreateFinish(vectorMapping,err,error,*999) - !Create the equations matrices - CALL EquationsMatrices_VectorCreateStart(vectorEquations,vectorMatrices,err,error,*999) - SELECT CASE(equations%sparsityType) - CASE(EQUATIONS_MATRICES_FULL_MATRICES) - CALL EquationsMatrices_LinearStorageTypeSet(vectorMatrices,[MATRIX_BLOCK_STORAGE_TYPE], & - & err,error,*999) - CASE(EQUATIONS_MATRICES_SPARSE_MATRICES) - CALL EquationsMatrices_LinearStorageTypeSet(vectorMatrices,[MATRIX_COMPRESSED_ROW_STORAGE_TYPE], & - & err,error,*999) - CALL EquationsMatrices_LinearStructureTypeSet(vectorMatrices,[EQUATIONS_MATRIX_FEM_STRUCTURE], & - & err,error,*999) - CASE DEFAULT - localError="The equations matrices sparsity type of "// & - & TRIM(NumberToVString(equations%sparsityType,"*",err,error))//" is invalid." - CALL FlagError(localError,err,error,*999) - END SELECT - CALL EquationsMatrices_VectorCreateFinish(vectorMatrices,err,error,*999) - CASE(EQUATIONS_SET_BEM_SOLUTION_METHOD) - CALL FlagError("Not implemented.",err,error,*999) - CASE(EQUATIONS_SET_FD_SOLUTION_METHOD) - CALL FlagError("Not implemented.",err,error,*999) - CASE(EQUATIONS_SET_FV_SOLUTION_METHOD) - CALL FlagError("Not implemented.",err,error,*999) - CASE(EQUATIONS_SET_GFEM_SOLUTION_METHOD) - CALL FlagError("Not implemented.",err,error,*999) - CASE(EQUATIONS_SET_GFV_SOLUTION_METHOD) - CALL FlagError("Not implemented.",err,error,*999) - CASE DEFAULT - localError="The solution method of "//TRIM(NumberToVString(EQUATIONS_SET%SOLUTION_METHOD,"*",err,error))// & - & " is invalid." - CALL FlagError(localError,err,error,*999) - END SELECT - CASE DEFAULT - localError="The action type of "//TRIM(NumberToVString(EQUATIONS_SET_SETUP%ACTION_TYPE,"*",err,error))// & - & " for a setup type of "//TRIM(NumberToVString(EQUATIONS_SET_SETUP%SETUP_TYPE,"*",err,error))// & - & " is invalid for a quasistatic Darcy equation." - CALL FlagError(localError,err,error,*999) - END SELECT - !----------------------------------------------------------------- - ! d y n a m i c - !----------------------------------------------------------------- - CASE(EQUATIONS_SET_TRANSIENT_DARCY_SUBTYPE,EQUATIONS_SET_TRANSIENT_ALE_DARCY_SUBTYPE, & - & EQUATIONS_SET_ELASTICITY_DARCY_INRIA_MODEL_SUBTYPE,EQUATIONS_SET_INCOMPRESSIBLE_ELASTICITY_DRIVEN_DARCY_SUBTYPE, & - & EQUATIONS_SET_INCOMPRESSIBLE_ELAST_MULTI_COMP_DARCY_SUBTYPE) - SELECT CASE(EQUATIONS_SET_SETUP%ACTION_TYPE) - CASE(EQUATIONS_SET_SETUP_START_ACTION) - EQUATIONS_MATERIALS=>EQUATIONS_SET%MATERIALS - IF(ASSOCIATED(EQUATIONS_MATERIALS)) THEN - IF(EQUATIONS_MATERIALS%MATERIALS_FINISHED) THEN - CALL Equations_CreateStart(EQUATIONS_SET,equations,err,error,*999) - CALL Equations_LinearityTypeSet(equations,EQUATIONS_LINEAR,err,error,*999) - CALL Equations_TimeDependenceTypeSet(equations,EQUATIONS_FIRST_ORDER_DYNAMIC,err,error,*999) - ELSE - CALL FlagError("Equations set materials has not been finished.",err,error,*999) - ENDIF - ELSE - CALL FlagError("Equations materials is not associated.",err,error,*999) - ENDIF - CASE(EQUATIONS_SET_SETUP_FINISH_ACTION) - SELECT CASE(EQUATIONS_SET%SOLUTION_METHOD) - CASE(EQUATIONS_SET_FEM_SOLUTION_METHOD) - !Finish the equations creation - CALL EquationsSet_EquationsGet(EQUATIONS_SET,equations,err,error,*999) - CALL Equations_CreateFinish(equations,err,error,*999) - NULLIFY(vectorEquations) - CALL Equations_VectorEquationsGet(equations,vectorEquations,err,error,*999) - !Create the equations mapping. - CALL EquationsMapping_VectorCreateStart(vectorEquations,FIELD_DELUDELN_VARIABLE_TYPE,vectorMapping, & - & err,error,*999) - IF(EQUATIONS_SET%SPECIFICATION(3)==EQUATIONS_SET_ELASTICITY_DARCY_INRIA_MODEL_SUBTYPE .OR. & - & EQUATIONS_SET%SPECIFICATION(3)==EQUATIONS_SET_INCOMPRESSIBLE_ELASTICITY_DRIVEN_DARCY_SUBTYPE) THEN - CALL EquationsMapping_LinearMatricesNumberSet(vectorMapping,0,err,error,*999) - ENDIF - CALL EquationsMapping_DynamicMatricesSet(vectorMapping,.TRUE.,.TRUE.,err,error,*999) - SELECT CASE(EQUATIONS_SET%SPECIFICATION(3)) - CASE(EQUATIONS_SET_ELASTICITY_DARCY_INRIA_MODEL_SUBTYPE, & - & EQUATIONS_SET_INCOMPRESSIBLE_ELASTICITY_DRIVEN_DARCY_SUBTYPE) - CALL EquationsMapping_DynamicVariableTypeSet(vectorMapping,FIELD_V_VARIABLE_TYPE,err,error,*999) - CALL EquationsMapping_RHSVariableTypeSet(vectorMapping,FIELD_DELVDELN_VARIABLE_TYPE, & - & err,error,*999) - IF(EQUATIONS_SET%SPECIFICATION(3)==EQUATIONS_SET_INCOMPRESSIBLE_ELASTICITY_DRIVEN_DARCY_SUBTYPE) THEN - CALL EquationsMapping_SourceVariableTypeSet(vectorMapping,FIELD_U_VARIABLE_TYPE,err,error,*999) - ENDIF - CASE(EQUATIONS_SET_INCOMPRESSIBLE_ELAST_MULTI_COMP_DARCY_SUBTYPE) - EQUATIONS_SET_FIELD_FIELD=>EQUATIONS_SET%EQUATIONS_SET_FIELD%EQUATIONS_SET_FIELD_FIELD - CALL FIELD_PARAMETER_SET_DATA_GET(EQUATIONS_SET_FIELD_FIELD,FIELD_U_VARIABLE_TYPE, & - & FIELD_VALUES_SET_TYPE,EQUATIONS_SET_FIELD_DATA,err,error,*999) - imy_matrix = EQUATIONS_SET_FIELD_DATA(1) - Ncompartments = EQUATIONS_SET_FIELD_DATA(2) - CALL EquationsMapping_LinearMatricesNumberSet(vectorMapping,Ncompartments-1,err,error,*999) - ALLOCATE(VARIABLE_TYPES(2*Ncompartments+2)) - ALLOCATE(VARIABLE_U_TYPES(Ncompartments-1)) - DO num_var=1,Ncompartments+1 - VARIABLE_TYPES(2*num_var-1)=FIELD_U_VARIABLE_TYPE+(FIELD_NUMBER_OF_VARIABLE_SUBTYPES*(num_var-1)) - VARIABLE_TYPES(2*num_var)=FIELD_DELUDELN_VARIABLE_TYPE+(FIELD_NUMBER_OF_VARIABLE_SUBTYPES*(num_var-1)) - ENDDO - num_var_count=0 - DO num_var=2,Ncompartments+1 - IF((num_var-1)/=imy_matrix)THEN - num_var_count=num_var_count+1 - VARIABLE_U_TYPES(num_var_count)=VARIABLE_TYPES(2*num_var-1) - ENDIF - ENDDO - CALL EquationsMapping_DynamicVariableTypeSet(vectorMapping,VARIABLE_TYPES(2*imy_matrix+1), & - & err,error,*999) - CALL EquationsMapping_LinearMatricesVariableTypesSet(vectorMapping,VARIABLE_U_TYPES,err,error,*999) - CALL EquationsMapping_RHSVariableTypeSet(vectorMapping,VARIABLE_TYPES(2*imy_matrix+2),err,error,*999) - CALL EquationsMapping_SourceVariableTypeSet(vectorMapping,FIELD_U_VARIABLE_TYPE,err,error,*999) - CASE DEFAULT - CALL EquationsMapping_DynamicVariableTypeSet(vectorMapping,FIELD_U_VARIABLE_TYPE,err,error,*999) - CALL EquationsMapping_RHSVariableTypeSet(vectorMapping,FIELD_DELUDELN_VARIABLE_TYPE, & - & err,error,*999) - END SELECT - CALL EquationsMapping_VectorCreateFinish(vectorMapping,err,error,*999) - !Create the equations matrices - CALL EquationsMatrices_VectorCreateStart(vectorEquations,vectorMatrices,err,error,*999) - !Set up matrix storage and structure - IF(equations%lumpingType==EQUATIONS_LUMPED_MATRICES) THEN - !Set up lumping - CALL EquationsMatrices_DynamicLumpingTypeSet(vectorMatrices, & - & [EQUATIONS_MATRIX_UNLUMPED,EQUATIONS_MATRIX_LUMPED],err,error,*999) - CALL EquationsMatrices_DynamicStorageTypeSet(vectorMatrices, & - & [DISTRIBUTED_MATRIX_COMPRESSED_ROW_STORAGE_TYPE,DISTRIBUTED_MATRIX_DIAGONAL_STORAGE_TYPE] & - & ,err,error,*999) - CALL EquationsMatrices_DynamicStructureTypeSet(vectorMatrices, & - & [EQUATIONS_MATRIX_FEM_STRUCTURE,EQUATIONS_MATRIX_DIAGONAL_STRUCTURE],err,error,*999) - ELSE - SELECT CASE(equations%sparsityType) - CASE(EQUATIONS_MATRICES_FULL_MATRICES) - CALL EquationsMatrices_LinearStorageTypeSet(vectorMatrices, & - & [DISTRIBUTED_MATRIX_BLOCK_STORAGE_TYPE,DISTRIBUTED_MATRIX_BLOCK_STORAGE_TYPE],err,error,*999) - CASE(EQUATIONS_MATRICES_SPARSE_MATRICES) - CALL EquationsMatrices_DynamicStorageTypeSet(vectorMatrices, & - & [DISTRIBUTED_MATRIX_COMPRESSED_ROW_STORAGE_TYPE, & - & DISTRIBUTED_MATRIX_COMPRESSED_ROW_STORAGE_TYPE],err,error,*999) - CALL EquationsMatrices_DynamicStructureTypeSet(vectorMatrices, & - & [EQUATIONS_MATRIX_FEM_STRUCTURE,EQUATIONS_MATRIX_FEM_STRUCTURE],err,error,*999) - IF(EQUATIONS_SET%SPECIFICATION(3)==EQUATIONS_SET_INCOMPRESSIBLE_ELAST_MULTI_COMP_DARCY_SUBTYPE)THEN - ALLOCATE(COUPLING_MATRIX_STORAGE_TYPE(Ncompartments-1)) - ALLOCATE(COUPLING_MATRIX_STRUCTURE_TYPE(Ncompartments-1)) - DO num_var=1,Ncompartments-1 - COUPLING_MATRIX_STORAGE_TYPE(num_var)=DISTRIBUTED_MATRIX_COMPRESSED_ROW_STORAGE_TYPE - COUPLING_MATRIX_STRUCTURE_TYPE(num_var)=EQUATIONS_MATRIX_FEM_STRUCTURE - ENDDO - CALL EquationsMatrices_LinearStorageTypeSet(vectorMatrices,COUPLING_MATRIX_STORAGE_TYPE, & - & err,error,*999) - CALL EquationsMatrices_LinearStructureTypeSet(vectorMatrices,COUPLING_MATRIX_STRUCTURE_TYPE, & - & err,error,*999) - ENDIF - CASE DEFAULT - localError="The equations matrices sparsity type of "// & - & TRIM(NumberToVString(equations%sparsityType,"*",err,error))//" is invalid." - CALL FlagError(localError,err,error,*999) - END SELECT - ENDIF - CALL EquationsMatrices_VectorCreateFinish(vectorMatrices,err,error,*999) - CASE DEFAULT - localError="The solution method of "//TRIM(NumberToVString(EQUATIONS_SET%SOLUTION_METHOD,"*", & - & err,error))//" is invalid." - CALL FlagError(localError,err,error,*999) - END SELECT - CASE DEFAULT - localError="The action type of "//TRIM(NumberToVString(EQUATIONS_SET_SETUP%ACTION_TYPE,"*",err,error))// & - & " for a setup type of "//TRIM(NumberToVString(EQUATIONS_SET_SETUP%SETUP_TYPE,"*",err,error))// & - & " is invalid for a Darcy equation." - CALL FlagError(localError,err,error,*999) - END SELECT - !----------------------------------------------------------------- - ! D e f a u l t - !----------------------------------------------------------------- - CASE DEFAULT - localError="The equation set subtype of "//TRIM(NumberToVString(EQUATIONS_SET%SPECIFICATION(3),"*",err,error))// & - & " for a setup of "//TRIM(NumberToVString(EQUATIONS_SET_SETUP%SETUP_TYPE,"*",err,error))// & - & " is invalid for a Darcy equation." - CALL FlagError(localError,err,error,*999) - END SELECT - - !----------------------------------------------------------------- - ! c a s e d e f a u l t - !----------------------------------------------------------------- - CASE DEFAULT - localError="The setup type of "//TRIM(NumberToVString(EQUATIONS_SET_SETUP%SETUP_TYPE,"*",err,error))// & - & " is invalid for a standard, quasistatic, ALE or dynamic Darcy equation." - CALL FlagError(localError,err,error,*999) - - END SELECT - CASE DEFAULT - localError="The equations set subtype of "//TRIM(NumberToVString(EQUATIONS_SET%SPECIFICATION(3),"*",err,error))// & - & " does not equal a standard, quasistatic, ALE or dynamic Darcy equation subtype." - CALL FlagError(localError,err,error,*999) - END SELECT - ELSE - CALL FlagError("Equations set is not associated.",err,error,*999) - ENDIF - - EXITS("DARCY_EQUATION_EQUATIONS_SET_SETUP") - RETURN -999 ERRORSEXITS("DARCY_EQUATION_EQUATIONS_SET_SETUP",err,error) - RETURN 1 - END SUBROUTINE DARCY_EQUATION_EQUATIONS_SET_SETUP - - ! - !================================================================================================================================ - ! - - !>Calculates the element stiffness matrices and RHS for a Darcy equation finite element equations set. - SUBROUTINE DARCY_EQUATION_FINITE_ELEMENT_CALCULATE(EQUATIONS_SET,ELEMENT_NUMBER,err,error,*) - - !Argument variables - TYPE(EQUATIONS_SET_TYPE), POINTER :: equations_SET !EQUATIONS_SET%EQUATIONS - IF(ASSOCIATED(EQUATIONS)) THEN - NULLIFY(vectorEquations) - CALL Equations_VectorEquationsGet(equations,vectorEquations,err,error,*999) - IF(.NOT.ALLOCATED(EQUATIONS_SET%SPECIFICATION)) THEN - CALL FlagError("Equations set specification is not allocated.",err,error,*999) - ELSE IF(SIZE(EQUATIONS_SET%SPECIFICATION,1)/=3) THEN - CALL FlagError("Equations set specification must have three entries for a Darcy type equations set.", & - & err,error,*999) - END IF - EQUATIONS_SET_SUBTYPE=EQUATIONS_SET%SPECIFICATION(3) - SELECT CASE(EQUATIONS_SET_SUBTYPE) - CASE(EQUATIONS_SET_STANDARD_DARCY_SUBTYPE, EQUATIONS_SET_QUASISTATIC_DARCY_SUBTYPE, EQUATIONS_SET_ALE_DARCY_SUBTYPE, & - & EQUATIONS_SET_TRANSIENT_DARCY_SUBTYPE,EQUATIONS_SET_INCOMPRESSIBLE_FINITE_ELASTICITY_DARCY_SUBTYPE, & - & EQUATIONS_SET_TRANSIENT_ALE_DARCY_SUBTYPE,EQUATIONS_SET_ELASTICITY_DARCY_INRIA_MODEL_SUBTYPE, & - & EQUATIONS_SET_INCOMPRESSIBLE_ELASTICITY_DRIVEN_DARCY_SUBTYPE,EQUATIONS_SET_MULTI_COMPARTMENT_DARCY_SUBTYPE, & - & EQUATIONS_SET_INCOMPRESSIBLE_ELAST_MULTI_COMP_DARCY_SUBTYPE) -!!TODO: move these and scale factor adjustment out once generalised Darcy is put in. - !Store all these in equations matrices/somewhere else????? - dependentField=>equations%interpolation%dependentField - geometricField=>equations%interpolation%geometricField - materialsField=>equations%interpolation%materialsField - IF(EQUATIONS_SET_SUBTYPE==EQUATIONS_SET_INCOMPRESSIBLE_ELASTICITY_DRIVEN_DARCY_SUBTYPE .OR. & - & EQUATIONS_SET_SUBTYPE==EQUATIONS_SET_INCOMPRESSIBLE_ELAST_MULTI_COMP_DARCY_SUBTYPE) THEN - sourceField=>equations%interpolation%sourceField - END IF - - vectorMatrices=>vectorEquations%vectorMatrices - rhsVector=>vectorMatrices%rhsVector - vectorMapping=>vectorEquations%vectorMapping - - IF(EQUATIONS_SET_SUBTYPE==EQUATIONS_SET_INCOMPRESSIBLE_ELASTICITY_DRIVEN_DARCY_SUBTYPE .OR. & - & EQUATIONS_SET_SUBTYPE==EQUATIONS_SET_INCOMPRESSIBLE_ELAST_MULTI_COMP_DARCY_SUBTYPE) THEN - sourceVector=>vectorMatrices%sourceVector - sourceVector%elementVector%vector = 0.0_DP - END IF - - SELECT CASE(EQUATIONS_SET_SUBTYPE) - CASE(EQUATIONS_SET_STANDARD_DARCY_SUBTYPE, EQUATIONS_SET_QUASISTATIC_DARCY_SUBTYPE, EQUATIONS_SET_ALE_DARCY_SUBTYPE, & - EQUATIONS_SET_INCOMPRESSIBLE_FINITE_ELASTICITY_DARCY_SUBTYPE) - linearMatrices=>vectorMatrices%linearMatrices - stiffnessMatrix=>linearMatrices%matrices(1)%ptr - - linearMapping=>vectorMapping%linearMapping - FIELD_VARIABLE=>linearMapping%equationsMatrixToVarMaps(1)%VARIABLE - FIELD_VAR_TYPE=FIELD_VARIABLE%VARIABLE_TYPE - - stiffnessMatrix%elementMatrix%matrix=0.0_DP - - CASE(EQUATIONS_SET_TRANSIENT_DARCY_SUBTYPE,EQUATIONS_SET_TRANSIENT_ALE_DARCY_SUBTYPE, & - & EQUATIONS_SET_ELASTICITY_DARCY_INRIA_MODEL_SUBTYPE, & - & EQUATIONS_SET_INCOMPRESSIBLE_ELASTICITY_DRIVEN_DARCY_SUBTYPE) - dynamicMatrices=>vectorMatrices%dynamicMatrices - stiffnessMatrix=>dynamicMatrices%matrices(1)%ptr - dampingMatrix=>dynamicMatrices%matrices(2)%ptr - - dynamicMapping=>vectorMapping%dynamicMapping - FIELD_VARIABLE=>dynamicMapping%equationsMatrixToVarMaps(1)%VARIABLE - FIELD_VAR_TYPE=FIELD_VARIABLE%VARIABLE_TYPE - - stiffnessMatrix%elementMatrix%matrix=0.0_DP - dampingMatrix%elementMatrix%matrix=0.0_DP - - !Stuff used to check if this element is on the mesh boundary - DECOMPOSITION => dependentField%DECOMPOSITION - MESH_COMPONENT_NUMBER = DECOMPOSITION%MESH_COMPONENT_NUMBER - global_element_idx = DECOMPOSITION%DOMAIN(MESH_COMPONENT_NUMBER)%ptr%MAPPINGS%ELEMENTS% & - & LOCAL_TO_GLOBAL_MAP(ELEMENT_NUMBER) - MESH_ELEMENT => DECOMPOSITION%MESH%TOPOLOGY(MESH_COMPONENT_NUMBER)%ptr%ELEMENTS%ELEMENTS(global_element_idx) - - CASE(EQUATIONS_SET_MULTI_COMPARTMENT_DARCY_SUBTYPE) - EQUATIONS_SET_FIELD=>EQUATIONS_SET%EQUATIONS_SET_FIELD%EQUATIONS_SET_FIELD_FIELD - CALL FIELD_PARAMETER_SET_DATA_GET(EQUATIONS_SET_FIELD,FIELD_U_VARIABLE_TYPE, & - & FIELD_VALUES_SET_TYPE,EQUATIONS_SET_FIELD_DATA,err,error,*999) - - my_compartment = EQUATIONS_SET_FIELD_DATA(1) - Ncompartments = EQUATIONS_SET_FIELD_DATA(2) - linearMatrices=>vectorMatrices%linearMatrices - stiffnessMatrix=>linearMatrices%matrices(1)%ptr - - linearMapping=>vectorMapping%linearMapping - FIELD_VARIABLE=>linearMapping%equationsMatrixToVarMaps(1)%VARIABLE - FIELD_VAR_TYPE=FIELD_VARIABLE%VARIABLE_TYPE - - stiffnessMatrix%elementMatrix%matrix=0.0_DP - - CASE(EQUATIONS_SET_ELASTICITY_MULTI_COMPARTMENT_DARCY_INRIA_SUBTYPE) - - EQUATIONS_SET_FIELD=>EQUATIONS_SET%EQUATIONS_SET_FIELD%EQUATIONS_SET_FIELD_FIELD - CALL FIELD_PARAMETER_SET_DATA_GET(EQUATIONS_SET_FIELD,FIELD_U_VARIABLE_TYPE, & - & FIELD_VALUES_SET_TYPE,EQUATIONS_SET_FIELD_DATA,err,error,*999) - - my_compartment = EQUATIONS_SET_FIELD_DATA(1) - Ncompartments = EQUATIONS_SET_FIELD_DATA(2) - - !if Ncompartments>99 then flag error - - linearMatrices=>vectorMatrices%linearMatrices - linearMapping=>vectorMapping%linearMapping - -! DO imatrix = 1,Ncompartments -! COUPLING_MATRICES(imatrix)%ptr=>linearMatrices%matrices(imatrix)%ptr -! FIELD_VARIABLES(imatrix)%ptr=>linearMapping%equationsMatrixToVarMaps(imatrix)%VARIABLE -! FIELD_VAR_TYPES(imatrix)=FIELD_VARIABLES(imatrix)%ptr%VARIABLE_TYPE -! COUPLING_MATRICES(imatrix)%ptr%elementMatrix%matrix=0.0_DP -! END DO - - dynamicMatrices=>vectorMatrices%dynamicMatrices - stiffnessMatrix=>dynamicMatrices%matrices(1)%ptr - dampingMatrix=>dynamicMatrices%matrices(2)%ptr - - - - dynamicMapping=>vectorMapping%dynamicMapping - FIELD_VARIABLE=>dynamicMapping%equationsMatrixToVarMaps(1)%VARIABLE - FIELD_VAR_TYPE=FIELD_VARIABLE%VARIABLE_TYPE - - stiffnessMatrix%elementMatrix%matrix=0.0_DP - dampingMatrix%elementMatrix%matrix=0.0_DP - CASE(EQUATIONS_SET_INCOMPRESSIBLE_ELAST_MULTI_COMP_DARCY_SUBTYPE) - EQUATIONS_SET_FIELD=>EQUATIONS_SET%EQUATIONS_SET_FIELD%EQUATIONS_SET_FIELD_FIELD - CALL FIELD_PARAMETER_SET_DATA_GET(EQUATIONS_SET_FIELD,FIELD_U_VARIABLE_TYPE, & - & FIELD_VALUES_SET_TYPE,EQUATIONS_SET_FIELD_DATA,err,error,*999) - - my_compartment = EQUATIONS_SET_FIELD_DATA(1) - Ncompartments = EQUATIONS_SET_FIELD_DATA(2) - !These linear matrices are actually only required if we are coupling the momentum terms too - !If it is just a mass coupling, then all of the additional terms are placed in the RHS of the mass-increase equation - linearMatrices=>vectorMatrices%linearMatrices - linearMapping=>vectorMapping%linearMapping - - num_var_count=0 - DO imatrix = 1,Ncompartments - IF(imatrix/=my_compartment)THEN - num_var_count=num_var_count+1 - COUPLING_MATRICES(num_var_count)%ptr=>linearMatrices%matrices(num_var_count)%ptr - FIELD_VARIABLES(num_var_count)%ptr=>linearMapping%equationsMatrixToVarMaps(num_var_count)%VARIABLE - FIELD_VAR_TYPES(num_var_count)=FIELD_VARIABLES(num_var_count)%ptr%VARIABLE_TYPE - COUPLING_MATRICES(num_var_count)%ptr%elementMatrix%matrix=0.0_DP - ENDIF - END DO - - dynamicMatrices=>vectorMatrices%dynamicMatrices - stiffnessMatrix=>dynamicMatrices%matrices(1)%ptr - dampingMatrix=>dynamicMatrices%matrices(2)%ptr - - dynamicMapping=>vectorMapping%dynamicMapping - FIELD_VARIABLE=>dynamicMapping%equationsMatrixToVarMaps(1)%VARIABLE - FIELD_VAR_TYPE=FIELD_VARIABLE%VARIABLE_TYPE - - stiffnessMatrix%elementMatrix%matrix=0.0_DP - dampingMatrix%elementMatrix%matrix=0.0_DP - - ALLOCATE(PRESSURE_COEFF(Ncompartments)) - - ALLOCATE(PRESSURE(Ncompartments)) - ALLOCATE(GRAD_PRESSURE(3,Ncompartments)) - PRESSURE = 0.0_DP - GRAD_PRESSURE = 0.0_DP - PRESSURE_COEFF(1)=0.25_DP - PRESSURE_COEFF(2)=0.25_DP - PRESSURE_COEFF(3)=0.25_DP - PRESSURE_COEFF(4)=0.25_DP - END SELECT - - !\ToDo: DEPENDENT_BASIS, DEPENDENT_BASIS_1, DEPENDENT_BASIS_2 - consistency !!! - - GEOMETRIC_BASIS=>geometricField%DECOMPOSITION%DOMAIN(geometricField%DECOMPOSITION%MESH_COMPONENT_NUMBER)%ptr% & - & TOPOLOGY%ELEMENTS%ELEMENTS(ELEMENT_NUMBER)%BASIS - DEPENDENT_BASIS=>dependentField%DECOMPOSITION%DOMAIN(dependentField%DECOMPOSITION%MESH_COMPONENT_NUMBER)%ptr% & - & TOPOLOGY%ELEMENTS%ELEMENTS(ELEMENT_NUMBER)%BASIS - - QUADRATURE_SCHEME=>DEPENDENT_BASIS%QUADRATURE%QUADRATURE_SCHEME_MAP(BASIS_DEFAULT_QUADRATURE_SCHEME)%ptr - - CALL FIELD_INTERPOLATION_PARAMETERS_ELEMENT_GET(FIELD_VALUES_SET_TYPE,ELEMENT_NUMBER,equations%interpolation% & - & geometricInterpParameters(FIELD_U_VARIABLE_TYPE)%ptr,err,error,*999) - CALL FIELD_INTERPOLATION_PARAMETERS_ELEMENT_GET(FIELD_VALUES_SET_TYPE,ELEMENT_NUMBER,equations%interpolation% & - & materialsInterpParameters(FIELD_U_VARIABLE_TYPE)%ptr,err,error,*999) - IF(EQUATIONS_SET_SUBTYPE==EQUATIONS_SET_INCOMPRESSIBLE_ELAST_MULTI_COMP_DARCY_SUBTYPE) THEN - CALL FIELD_INTERPOLATION_PARAMETERS_ELEMENT_GET(FIELD_VALUES_SET_TYPE,ELEMENT_NUMBER,equations%interpolation% & - & materialsInterpParameters(FIELD_V_VARIABLE_TYPE)%ptr,err,error,*999) - CALL FIELD_INTERPOLATION_PARAMETERS_ELEMENT_GET(FIELD_VALUES_SET_TYPE,ELEMENT_NUMBER,equations%interpolation% & - & materialsInterpParameters(FIELD_U1_VARIABLE_TYPE)%ptr,err,error,*999) - ENDIF - - IF(EQUATIONS_SET_SUBTYPE==EQUATIONS_SET_INCOMPRESSIBLE_ELASTICITY_DRIVEN_DARCY_SUBTYPE .OR. & - & EQUATIONS_SET_SUBTYPE==EQUATIONS_SET_INCOMPRESSIBLE_ELAST_MULTI_COMP_DARCY_SUBTYPE) THEN - CALL FIELD_INTERPOLATION_PARAMETERS_ELEMENT_GET(FIELD_VALUES_SET_TYPE,ELEMENT_NUMBER,equations%interpolation% & - & sourceInterpParameters(FIELD_U_VARIABLE_TYPE)%ptr,err,error,*999) - END IF - - IF(EQUATIONS_SET_SUBTYPE==EQUATIONS_SET_INCOMPRESSIBLE_ELASTICITY_DRIVEN_DARCY_SUBTYPE .OR. & - & EQUATIONS_SET_SUBTYPE==EQUATIONS_SET_INCOMPRESSIBLE_ELAST_MULTI_COMP_DARCY_SUBTYPE) THEN - ELASTICITY_DEPENDENT_INTERPOLATION_PARAMETERS=>equations%interpolation% & - & dependentInterpParameters(FIELD_U_VARIABLE_TYPE)%ptr - CALL FIELD_INTERPOLATION_PARAMETERS_ELEMENT_GET(FIELD_VALUES_SET_TYPE,ELEMENT_NUMBER, & - & ELASTICITY_DEPENDENT_INTERPOLATION_PARAMETERS,err,error,*999) - ELASTICITY_DEPENDENT_INTERPOLATED_POINT=>equations%interpolation% & - & dependentInterpPoint(FIELD_U_VARIABLE_TYPE)%ptr - ENDIF - - - SELECT CASE(EQUATIONS_SET_SUBTYPE) - CASE(EQUATIONS_SET_ELASTICITY_DARCY_INRIA_MODEL_SUBTYPE,EQUATIONS_SET_INCOMPRESSIBLE_ELASTICITY_DRIVEN_DARCY_SUBTYPE, & - & EQUATIONS_SET_INCOMPRESSIBLE_ELAST_MULTI_COMP_DARCY_SUBTYPE) - NUMBER_OF_VEL_PRESS_COMPONENTS = FIELD_VARIABLE%NUMBER_OF_COMPONENTS - 1 !last component: mass increase - CASE DEFAULT - NUMBER_OF_VEL_PRESS_COMPONENTS = FIELD_VARIABLE%NUMBER_OF_COMPONENTS - END SELECT - - !--------------------------------------------------------------------------------------------------------- - !Invoke penalty term to enforce impermeable BC - ! should only be executed if THIS element lies on the surface - ! (within the routine we check whether the element nodes have actually been set impermeable) - SELECT CASE(EQUATIONS_SET_SUBTYPE) - CASE(EQUATIONS_SET_TRANSIENT_DARCY_SUBTYPE,EQUATIONS_SET_TRANSIENT_ALE_DARCY_SUBTYPE, & - & EQUATIONS_SET_ELASTICITY_DARCY_INRIA_MODEL_SUBTYPE, & - & EQUATIONS_SET_INCOMPRESSIBLE_ELASTICITY_DRIVEN_DARCY_SUBTYPE) - IF( MESH_ELEMENT%BOUNDARY_ELEMENT ) THEN - CALL DARCY_EQUATION_IMPERMEABLE_BC_VIA_PENALTY(EQUATIONS_SET,ELEMENT_NUMBER,err,error,*999) - ENDIF - END SELECT - !--------------------------------------------------------------------------------------------------------- - - !--- Loop over gauss points - ! Given that also materials field is interpolated, ensure sufficient number of Gauss points !!! - DO ng=1,QUADRATURE_SCHEME%NUMBER_OF_GAUSS - - - IF(EQUATIONS_SET_SUBTYPE==EQUATIONS_SET_ELASTICITY_DARCY_INRIA_MODEL_SUBTYPE.OR. & - & EQUATIONS_SET_SUBTYPE==EQUATIONS_SET_INCOMPRESSIBLE_ELASTICITY_DRIVEN_DARCY_SUBTYPE .OR. & - & EQUATIONS_SET_SUBTYPE==EQUATIONS_SET_INCOMPRESSIBLE_ELAST_MULTI_COMP_DARCY_SUBTYPE) THEN - !------------------------------------------------------------------------------ - !--- begin: Compute the Jacobian of the mapping - - !--- Interpolation of Reference Geometry - CALL FIELD_INTERPOLATION_PARAMETERS_ELEMENT_GET(FIELD_INITIAL_VALUES_SET_TYPE,ELEMENT_NUMBER, & - & equations%interpolation%geometricInterpParameters(FIELD_U_VARIABLE_TYPE)%ptr,err,error,*999) - REFERENCE_GEOMETRIC_INTERPOLATED_POINT => equations%interpolation%geometricInterpPoint(FIELD_U_VARIABLE_TYPE)%ptr - CALL FIELD_INTERPOLATE_GAUSS(FIRST_PART_DERIV,BASIS_DEFAULT_QUADRATURE_SCHEME,ng, & - & REFERENCE_GEOMETRIC_INTERPOLATED_POINT,err,error,*999) - !--- Retrieve local map DYDXI - DO component_idx=1,DEPENDENT_BASIS%NUMBER_OF_XI - DO xi_idx=1,DEPENDENT_BASIS%NUMBER_OF_XI - derivative_idx=PARTIAL_DERIVATIVE_FIRST_DERIVATIVE_MAP(xi_idx) !2,4,7 - DYDXI(component_idx,xi_idx)=REFERENCE_GEOMETRIC_INTERPOLATED_POINT%VALUES(component_idx,derivative_idx) !dy/dxi (y = referential) - ENDDO - ENDDO - - !--- Interpolation of (actual) Geometry and Metrics - CALL FIELD_INTERPOLATION_PARAMETERS_ELEMENT_GET(FIELD_VALUES_SET_TYPE,ELEMENT_NUMBER, & - & equations%interpolation%geometricInterpParameters(FIELD_U_VARIABLE_TYPE)%ptr,err,error,*999) - GEOMETRIC_INTERPOLATED_POINT => equations%interpolation%geometricInterpPoint(FIELD_U_VARIABLE_TYPE)%ptr - CALL FIELD_INTERPOLATE_GAUSS(FIRST_PART_DERIV,BASIS_DEFAULT_QUADRATURE_SCHEME,ng, & - & GEOMETRIC_INTERPOLATED_POINT,err,error,*999) - CALL FIELD_INTERPOLATED_POINT_METRICS_CALCULATE(GEOMETRIC_BASIS%NUMBER_OF_XI, & - & equations%interpolation%geometricInterpPointMetrics(FIELD_U_VARIABLE_TYPE)%ptr,err,error,*999) - !--- Retrieve local map DXDXI - DO component_idx=1,DEPENDENT_BASIS%NUMBER_OF_XI - DO xi_idx=1,DEPENDENT_BASIS%NUMBER_OF_XI - derivative_idx=PARTIAL_DERIVATIVE_FIRST_DERIVATIVE_MAP(xi_idx) !2,4,7 - DXDXI(component_idx,xi_idx)=GEOMETRIC_INTERPOLATED_POINT%VALUES(component_idx,derivative_idx) !dx/dxi - ENDDO - ENDDO - - !--- Compute deformation gradient tensor DXDY and its Jacobian Jxy - CALL Invert(DYDXI,DXIDY,Jyxi,err,error,*999) !dy/dxi -> dxi/dy - CALL MatrixProduct(DXDXI,DXIDY,DXDY,err,error,*999) !dx/dxi * dxi/dy = dx/dy (deformation gradient tensor, F) - CALL Determinant(DXDY,Jxy,err,error,*999) - - IF( ABS(Jxy) < 1.0E-10_DP ) THEN - localError="DARCY_EQUATION_FINITE_ELEMENT_CALCULATE: Jacobian Jxy is smaller than 1.0E-10_DP." - CALL FlagError(localError,err,error,*999) - END IF - - !ffact = f(Jxy) of the INRIA model, dfdJfact is not relevant here - CALL EVALUATE_CHAPELLE_FUNCTION(Jxy,ffact,dfdJfact,err,error,*999) - - !--- end: Compute the Jacobian of the mapping - !------------------------------------------------------------------------------ - END IF - - !--- Interpolate geometric and mesh velocity field (if applicable) - GEOMETRIC_INTERPOLATED_POINT => equations%interpolation%geometricInterpPoint(FIELD_U_VARIABLE_TYPE)%ptr - CALL FIELD_INTERPOLATE_GAUSS(FIRST_PART_DERIV,BASIS_DEFAULT_QUADRATURE_SCHEME,ng, & - & GEOMETRIC_INTERPOLATED_POINT,err,error,*999) - CALL FIELD_INTERPOLATED_POINT_METRICS_CALCULATE(GEOMETRIC_BASIS%NUMBER_OF_XI, & - & equations%interpolation%geometricInterpPointMetrics(FIELD_U_VARIABLE_TYPE)%ptr,err,error,*999) - - !--- Calculate 'geometricInterpParameters' from 'FIELD_VALUES_SET_TYPE' - CALL FIELD_INTERPOLATION_PARAMETERS_ELEMENT_GET(FIELD_VALUES_SET_TYPE,ELEMENT_NUMBER, & - & equations%interpolation%geometricInterpParameters(FIELD_U_VARIABLE_TYPE)%ptr,err,error,*999) - CALL FIELD_INTERPOLATE_GAUSS(FIRST_PART_DERIV,BASIS_DEFAULT_QUADRATURE_SCHEME,ng, & - & GEOMETRIC_INTERPOLATED_POINT,err,error,*999) - - -! !--- Material Settings ---! -! !*** If material is variable, need to account for this in deriving the variational statement ***! - - - !--- Interpolate materials field - !Get the Darcy permeability - MATERIALS_INTERPOLATED_POINT => equations%interpolation%materialsInterpPoint(FIELD_U_VARIABLE_TYPE)%ptr - CALL FIELD_INTERPOLATE_GAUSS(FIRST_PART_DERIV,BASIS_DEFAULT_QUADRATURE_SCHEME,ng, & - & MATERIALS_INTERPOLATED_POINT,err,error,*999) - IF(EQUATIONS_SET_SUBTYPE==EQUATIONS_SET_INCOMPRESSIBLE_ELAST_MULTI_COMP_DARCY_SUBTYPE) THEN - !Get the intercompartmental permeabilities - CALL FIELD_INTERPOLATE_GAUSS(NO_PART_DERIV,BASIS_DEFAULT_QUADRATURE_SCHEME,ng,equations%interpolation% & - & materialsInterpPoint(FIELD_V_VARIABLE_TYPE)%ptr,err,error,*999) - !Get the material parameters for the constitutive law for each Darcy compartment (for determining the partial pressures) - CALL FIELD_INTERPOLATE_GAUSS(NO_PART_DERIV,BASIS_DEFAULT_QUADRATURE_SCHEME,ng,equations%interpolation% & - & materialsInterpPoint(FIELD_U1_VARIABLE_TYPE)%ptr,err,error,*999) - ENDIF - - IF(EQUATIONS_SET_SUBTYPE==EQUATIONS_SET_INCOMPRESSIBLE_ELASTICITY_DRIVEN_DARCY_SUBTYPE .OR. & - & EQUATIONS_SET_SUBTYPE==EQUATIONS_SET_INCOMPRESSIBLE_ELAST_MULTI_COMP_DARCY_SUBTYPE) THEN - CALL FIELD_INTERPOLATE_GAUSS(NO_PART_DERIV,BASIS_DEFAULT_QUADRATURE_SCHEME,ng,equations%interpolation% & - & sourceInterpPoint(FIELD_U_VARIABLE_TYPE)%ptr,err,error,*999) - END IF - - SELECT CASE(EQUATIONS_SET_SUBTYPE) - CASE(EQUATIONS_SET_STANDARD_DARCY_SUBTYPE,EQUATIONS_SET_QUASISTATIC_DARCY_SUBTYPE,EQUATIONS_SET_ALE_DARCY_SUBTYPE) - !scalar permeability/viscosity - PERM_TENSOR_OVER_VIS=0.0_DP - PERM_TENSOR_OVER_VIS(1,1) = MATERIALS_INTERPOLATED_POINT%VALUES(2,NO_PART_DERIV) - PERM_TENSOR_OVER_VIS(2,2) = MATERIALS_INTERPOLATED_POINT%VALUES(2,NO_PART_DERIV) - PERM_TENSOR_OVER_VIS(3,3) = MATERIALS_INTERPOLATED_POINT%VALUES(2,NO_PART_DERIV) - !Multiply by porosity - PERM_TENSOR_OVER_VIS=PERM_TENSOR_OVER_VIS*MATERIALS_INTERPOLATED_POINT%VALUES(1,NO_PART_DERIV) - CASE DEFAULT - !symmetric permeability/viscosity tensor - PERM_TENSOR_OVER_VIS(1,1) = MATERIALS_INTERPOLATED_POINT%VALUES(2,NO_PART_DERIV) - PERM_TENSOR_OVER_VIS(1,2) = MATERIALS_INTERPOLATED_POINT%VALUES(3,NO_PART_DERIV) - PERM_TENSOR_OVER_VIS(1,3) = MATERIALS_INTERPOLATED_POINT%VALUES(4,NO_PART_DERIV) - PERM_TENSOR_OVER_VIS(2,2) = MATERIALS_INTERPOLATED_POINT%VALUES(5,NO_PART_DERIV) - PERM_TENSOR_OVER_VIS(2,3) = MATERIALS_INTERPOLATED_POINT%VALUES(6,NO_PART_DERIV) - PERM_TENSOR_OVER_VIS(3,3) = MATERIALS_INTERPOLATED_POINT%VALUES(7,NO_PART_DERIV) - - PERM_TENSOR_OVER_VIS(2,1) = PERM_TENSOR_OVER_VIS(1,2) - PERM_TENSOR_OVER_VIS(3,1) = PERM_TENSOR_OVER_VIS(1,3) - PERM_TENSOR_OVER_VIS(3,2) = PERM_TENSOR_OVER_VIS(2,3) - END SELECT - - IF(DIAGNOSTICS3) THEN - IF(idebug2) THEN - CALL WRITE_STRING_VALUE(DIAGNOSTIC_OUTPUT_TYPE,"MATERIALS_INTERPOLATED_POINT%VALUES(1,NO_PART_DERIV) = ", & - & MATERIALS_INTERPOLATED_POINT%VALUES(1,NO_PART_DERIV),err,error,*999) - CALL WRITE_STRING_VALUE(DIAGNOSTIC_OUTPUT_TYPE,"MATERIALS_INTERPOLATED_POINT%VALUES(2,NO_PART_DERIV) = ", & - & MATERIALS_INTERPOLATED_POINT%VALUES(2,NO_PART_DERIV),err,error,*999) - CALL WRITE_STRING(DIAGNOSTIC_OUTPUT_TYPE,"",err,error,*999) - idebug2 = .FALSE. - ENDIF - ENDIF - - CALL Determinant(PERM_TENSOR_OVER_VIS,Jmat,err,error,*999) - IF(Jmat>ZERO_TOLERANCE) THEN - CALL INVERT(PERM_TENSOR_OVER_VIS,VIS_OVER_PERM_TENSOR,Jmat,err,error,*999) - ELSE - VIS_OVER_PERM_TENSOR = 0.0_DP - DO idx_tensor=1,3 - VIS_OVER_PERM_TENSOR(idx_tensor,idx_tensor) = 1.0e10_DP - END DO -! CALL WRITE_STRING(GENERAL_OUTPUT_TYPE, & -! & "WARNING: Jmat dependentField%DECOMPOSITION%DOMAIN(MESH_COMPONENT_1)%ptr% & - & TOPOLOGY%ELEMENTS%ELEMENTS(ELEMENT_NUMBER)%BASIS - QUADRATURE_SCHEME_1 => DEPENDENT_BASIS_1%QUADRATURE% & - & QUADRATURE_SCHEME_MAP(BASIS_DEFAULT_QUADRATURE_SCHEME)%ptr - RWG = equations%interpolation%geometricInterpPointMetrics(FIELD_U_VARIABLE_TYPE)%ptr%JACOBIAN * & - & QUADRATURE_SCHEME_1%GAUSS_WEIGHTS(ng) - - DO ms=1,DEPENDENT_BASIS_1%NUMBER_OF_ELEMENT_PARAMETERS - mhs=mhs+1 - - !=================================================================================================================== - !stiffnessMatrix - IF(stiffnessMatrix%updateMatrix) THEN - - !Loop over element columns - nhs=0 - DO nh=1,FIELD_VARIABLE%NUMBER_OF_COMPONENTS - - MESH_COMPONENT_2 = FIELD_VARIABLE%COMPONENTS(nh)%MESH_COMPONENT_NUMBER - DEPENDENT_BASIS_2 => dependentField%DECOMPOSITION%DOMAIN(MESH_COMPONENT_2)%ptr% & - & TOPOLOGY%ELEMENTS%ELEMENTS(ELEMENT_NUMBER)%BASIS - !--- We cannot use two different quadrature schemes here !!! - QUADRATURE_SCHEME_2 => DEPENDENT_BASIS_2%QUADRATURE% & - & QUADRATURE_SCHEME_MAP(BASIS_DEFAULT_QUADRATURE_SCHEME)%ptr - !RWG = equations%interpolation%geometricInterpPointMetrics%JACOBIAN * & - ! & QUADRATURE_SCHEME_2%GAUSS_WEIGHTS(ng) - - DO ns=1,DEPENDENT_BASIS_2%NUMBER_OF_ELEMENT_PARAMETERS - nhs=nhs+1 - - SELECT CASE(EQUATIONS_SET_SUBTYPE) - !==================================================================================================== - ! i n c o m p r e s s i b l e e l a s t i c i t y d r i v e n D a r c y : M A T R I C E S - CASE(EQUATIONS_SET_INCOMPRESSIBLE_ELASTICITY_DRIVEN_DARCY_SUBTYPE) - !------------------------------------------------------------------------------------------------------------- - !velocity test function, velocity trial function - IF(mh==nh.AND.nh1.0E-08) WRITE(*,*)'C_PARAM = ',C_PARAM - - SUM = 0.0_DP - PGM=QUADRATURE_SCHEME_1%GAUSS_BASIS_FNS(ms,NO_PART_DERIV,ng) - SUM = SUM + PGM * C_PARAM - sourceVector%elementVector%vector(mhs) = sourceVector%elementVector%vector(mhs) + SUM * RWG - ENDIF - END IF - END IF - ENDDO !ms - ENDDO !mh - - IF(EQUATIONS_SET_SUBTYPE==EQUATIONS_SET_INCOMPRESSIBLE_ELAST_MULTI_COMP_DARCY_SUBTYPE) THEN - !Calculate the momentum coupling matrices - - !Loop over element rows - mhs=0 - DO mh=1,FIELD_VARIABLE%NUMBER_OF_COMPONENTS !field_variable is the variable associated with the equations set under consideration - - MESH_COMPONENT_1 = FIELD_VARIABLE%COMPONENTS(mh)%MESH_COMPONENT_NUMBER - DEPENDENT_BASIS_1 => dependentField%DECOMPOSITION%DOMAIN(MESH_COMPONENT_1)%ptr% & - & TOPOLOGY%ELEMENTS%ELEMENTS(ELEMENT_NUMBER)%BASIS - QUADRATURE_SCHEME_1 => DEPENDENT_BASIS_1%QUADRATURE% & - & QUADRATURE_SCHEME_MAP(BASIS_DEFAULT_QUADRATURE_SCHEME)%ptr - RWG = equations%interpolation%geometricInterpPointMetrics(FIELD_U_VARIABLE_TYPE)%ptr%JACOBIAN * & - & QUADRATURE_SCHEME_1%GAUSS_WEIGHTS(ng) - - DO ms=1,DEPENDENT_BASIS_1%NUMBER_OF_ELEMENT_PARAMETERS - mhs=mhs+1 - - num_var_count=0 - DO imatrix = 1,Ncompartments - IF(imatrix/=my_compartment)THEN - num_var_count=num_var_count+1 - -!need to test for the case where imatrix==mycompartment -!the coupling terms then needs to be added into the stiffness matrix - IF(COUPLING_MATRICES(num_var_count)%ptr%updateMatrix) THEN - - !Loop over element columns - nhs=0 - DO nh=1,FIELD_VARIABLES(num_var_count)%ptr%NUMBER_OF_COMPONENTS - - MESH_COMPONENT_2 = FIELD_VARIABLE%COMPONENTS(nh)%MESH_COMPONENT_NUMBER - DEPENDENT_BASIS_2 => dependentField%DECOMPOSITION%DOMAIN(MESH_COMPONENT_2)%ptr% & - & TOPOLOGY%ELEMENTS%ELEMENTS(ELEMENT_NUMBER)%BASIS - !--- We cannot use two different quadrature schemes here !!! - QUADRATURE_SCHEME_2 => DEPENDENT_BASIS_2%QUADRATURE% & - & QUADRATURE_SCHEME_MAP(BASIS_DEFAULT_QUADRATURE_SCHEME)%ptr - !RWG = equations%interpolation%geometricInterpPointMetrics%JACOBIAN * & - ! & QUADRATURE_SCHEME_2%GAUSS_WEIGHTS(ng) - - DO ns=1,DEPENDENT_BASIS_2%NUMBER_OF_ELEMENT_PARAMETERS - nhs=nhs+1 - -! !------------------------------------------------------------------------------------------------------------- -! !concentration test function, concentration trial function -! !For now, this is only a dummy implementation - this still has to be properly set up. -! IF(mh==nh.AND.nhdependentField%DECOMPOSITION%DOMAIN(MESH_COMPONENT_1)%ptr% & - & TOPOLOGY%ELEMENTS%ELEMENTS(ELEMENT_NUMBER)%BASIS - QUADRATURE_SCHEME_1=>DEPENDENT_BASIS_1%QUADRATURE%QUADRATURE_SCHEME_MAP(BASIS_DEFAULT_QUADRATURE_SCHEME)%ptr - RWG=equations%interpolation%geometricInterpPointMetrics(FIELD_U_VARIABLE_TYPE)%ptr%JACOBIAN* & - & QUADRATURE_SCHEME_1%GAUSS_WEIGHTS(ng) - DO ms=1,DEPENDENT_BASIS_1%NUMBER_OF_ELEMENT_PARAMETERS - mhs=mhs+1 - PGM=QUADRATURE_SCHEME_1%GAUSS_BASIS_FNS(ms,NO_PART_DERIV,ng) - !note mh value derivative - SUM=0.0_DP - - X(1) = equations%interpolation%geometricInterpPoint(FIELD_U_VARIABLE_TYPE)%ptr%VALUES(1,1) - X(2) = equations%interpolation%geometricInterpPoint(FIELD_U_VARIABLE_TYPE)%ptr%VALUES(2,1) - IF(DEPENDENT_BASIS_1%NUMBER_OF_XI==3) THEN - X(3) = equations%interpolation%geometricInterpPoint(FIELD_U_VARIABLE_TYPE)%ptr%VALUES(3,1) - END IF - IF(EQUATIONS_SET%ANALYTIC%ANALYTIC_FUNCTION_TYPE==EQUATIONS_SET_DARCY_EQUATION_TWO_DIM_1) THEN - SUM=0.0_DP - ELSE IF(EQUATIONS_SET%ANALYTIC%ANALYTIC_FUNCTION_TYPE==EQUATIONS_SET_DARCY_EQUATION_TWO_DIM_2) THEN - IF(mh==3) THEN - FACT = PERM_OVER_VIS_PARAM / L - ARG(1) = X(1) / L - ARG(2) = X(2) / L - SOURCE = -2.0_DP / L * FACT * EXP( ARG(1) ) * EXP( ARG(2) ) - SUM = PGM * SOURCE - ELSE - SUM = 0.0_DP - ENDIF - ELSE IF(EQUATIONS_SET%ANALYTIC%ANALYTIC_FUNCTION_TYPE==EQUATIONS_SET_DARCY_EQUATION_TWO_DIM_3) THEN - IF(mh==3) THEN - FACT = 2.0_DP * PI * PERM_OVER_VIS_PARAM / L - ARG(1) = 2.0_DP * PI * X(1) / L - ARG(2) = 2.0_DP * PI * X(2) / L - SOURCE = +2.0_DP * (2.0_DP * PI / L) * FACT * SIN( ARG(1) ) * SIN( ARG(2) ) - SUM = PGM * SOURCE - ELSE - SUM = 0.0_DP - ENDIF - ELSE IF(EQUATIONS_SET%ANALYTIC%ANALYTIC_FUNCTION_TYPE==EQUATIONS_SET_DARCY_EQUATION_THREE_DIM_1) THEN - SUM=0.0_DP - ELSE IF(EQUATIONS_SET%ANALYTIC%ANALYTIC_FUNCTION_TYPE==EQUATIONS_SET_DARCY_EQUATION_THREE_DIM_2) THEN - IF(mh==4) THEN - FACT = PERM_OVER_VIS_PARAM / L - ARG(1) = X(1) / L - ARG(2) = X(2) / L - ARG(3) = X(3) / L - SOURCE = -3.0_DP / L * FACT * EXP( ARG(1) ) * EXP( ARG(2) ) * EXP( ARG(3) ) - SUM = PGM * SOURCE - ELSE - SUM = 0.0_DP - ENDIF - ELSE IF(EQUATIONS_SET%ANALYTIC%ANALYTIC_FUNCTION_TYPE==EQUATIONS_SET_DARCY_EQUATION_THREE_DIM_3) THEN - IF(mh==4) THEN - FACT = 2.0_DP * PI * PERM_OVER_VIS_PARAM / L - ARG(1) = 2.0_DP * PI * X(1) / L - ARG(2) = 2.0_DP * PI * X(2) / L - ARG(3) = 2.0_DP * PI * X(3) / L - SOURCE = +3.0_DP * ( 2.0_DP * PI / L ) * FACT * SIN( ARG(1) ) * SIN( ARG(2) ) * SIN( ARG(3) ) - SUM = PGM * SOURCE - ELSE - SUM = 0.0_DP - END IF - ENDIF - - !Calculate RHS VECTOR - rhsVector%elementVector%vector(mhs)=rhsVector%elementVector%vector(mhs)+SUM*RWG - ENDDO !ms - ENDDO !mh - ELSE - rhsVector%elementVector%vector(mhs)=0.0_DP - ENDIF - ENDIF - - ! end: RIGHT HAND SIDE FOR ANALYTIC SOLUTION - !----------------------------------------------------------------------------------------------------------------------------------- - -! !=================================================================================================================== -! !COUPLING_MATRICES -! SELECT CASE(EQUATIONS_SET_SUBTYPE) -! CASE(EQUATIONS_SET_MULTI_COMPARTMENT_DARCY_SUBTYPE,EQUATIONS_SET_ELASTICITY_MULTI_COMPARTMENT_DARCY_INRIA_SUBTYPE) -! -! !Create FIELD_VARIABLES type, COUPLING_MATRICES type -! -! !Loop over element rows -! mhs=0 -! DO mh=1,FIELD_VARIABLE%NUMBER_OF_COMPONENTS -! -! MESH_COMPONENT_1 = FIELD_VARIABLE%COMPONENTS(mh)%MESH_COMPONENT_NUMBER -! DEPENDENT_BASIS_1 => dependentField%DECOMPOSITION%DOMAIN(MESH_COMPONENT_1)%ptr% & -! & TOPOLOGY%ELEMENTS%ELEMENTS(ELEMENT_NUMBER)%BASIS -! QUADRATURE_SCHEME_1 => DEPENDENT_BASIS_1%QUADRATURE% & -! & QUADRATURE_SCHEME_MAP(BASIS_DEFAULT_QUADRATURE_SCHEME)%ptr -! RWG = equations%interpolation%geometricInterpPointMetrics(FIELD_U_VARIABLE_TYPE)%ptr%JACOBIAN * & -! & QUADRATURE_SCHEME_1%GAUSS_WEIGHTS(ng) -! -! DO ms=1,DEPENDENT_BASIS_1%NUMBER_OF_ELEMENT_PARAMETERS -! mhs=mhs+1 -! -! DO imatrix=1,Ncompartments -! -! IF(COUPLING_MATRICES(imatrix)%ptr%updateMatrix) THEN -! -! !Loop over element columns -! nhs=0 -! ! DO nh=1,FIELD_VARIABLE%NUMBER_OF_COMPONENTS -! DO nh=1,FIELD_VARIABLES(imatrix)%ptr%NUMBER_OF_COMPONENTS -! -! MESH_COMPONENT_2 = FIELD_VARIABLE%COMPONENTS(nh)%MESH_COMPONENT_NUMBER -! DEPENDENT_BASIS_2 => dependentField%DECOMPOSITION%DOMAIN(MESH_COMPONENT_2)%ptr% & -! & TOPOLOGY%ELEMENTS%ELEMENTS(ELEMENT_NUMBER)%BASIS -! !--- We cannot use two different quadrature schemes here !!! -! QUADRATURE_SCHEME_2 => DEPENDENT_BASIS_2%QUADRATURE% & -! & QUADRATURE_SCHEME_MAP(BASIS_DEFAULT_QUADRATURE_SCHEME)%ptr -! !RWG = equations%interpolation%geometricInterpPointMetrics%JACOBIAN * & -! ! & QUADRATURE_SCHEME_2%GAUSS_WEIGHTS(ng) -! -! DO ns=1,DEPENDENT_BASIS_2%NUMBER_OF_ELEMENT_PARAMETERS -! nhs=nhs+1 -! -! !------------------------------------------------------------------------------------------------------------- -! !velocity test function, velocity trial function -! !For now, this is only a dummy implementation - this still has to be properly set up. -! IF(mh==nh.AND.nh dependentField%DECOMPOSITION%DOMAIN(MESH_COMPONENT_1)%ptr% & - & TOPOLOGY%ELEMENTS%ELEMENTS(ELEMENT_NUMBER)%BASIS - NDOFS = NDOFS + DEPENDENT_BASIS_1%NUMBER_OF_ELEMENT_PARAMETERS - END DO - - CALL WRITE_STRING(DIAGNOSTIC_OUTPUT_TYPE,"Element Matrix for element number 1 (Darcy):",err,error,*999) - DO mhs=1,NDOFS - CALL WRITE_STRING_VALUE(DIAGNOSTIC_OUTPUT_TYPE,"row number = ",mhs,err,error,*999) - CALL WRITE_STRING_VECTOR(DIAGNOSTIC_OUTPUT_TYPE,1,1,NDOFS,NDOFS,NDOFS,& - & stiffnessMatrix%elementMatrix%matrix(mhs,:), & - & '("",4(X,E13.6))','4(4(X,E13.6))',err,error,*999) - CALL WRITE_STRING(DIAGNOSTIC_OUTPUT_TYPE," ",err,error,*999) - END DO - END IF - END IF - - !Scale factor adjustment - IF(dependentField%SCALINGS%SCALING_TYPE/=FIELD_NO_SCALING) THEN - CALL Field_InterpolationParametersScaleFactorsElementGet(ELEMENT_NUMBER,equations%interpolation% & - & dependentInterpParameters(FIELD_VAR_TYPE)%ptr,err,error,*999) - mhs=0 - DO mh=1,FIELD_VARIABLE%NUMBER_OF_COMPONENTS - !Loop over element rows - MESH_COMPONENT_1=FIELD_VARIABLE%COMPONENTS(mh)%MESH_COMPONENT_NUMBER - DEPENDENT_BASIS_1=>dependentField%DECOMPOSITION%DOMAIN(MESH_COMPONENT_1)%ptr% & - & TOPOLOGY%ELEMENTS%ELEMENTS(ELEMENT_NUMBER)%BASIS - DO ms=1,DEPENDENT_BASIS_1%NUMBER_OF_ELEMENT_PARAMETERS - mhs=mhs+1 - nhs=0 - IF(ASSOCIATED(stiffnessMatrix).AND.ASSOCIATED(dampingMatrix)) THEN - IF(stiffnessMatrix%updateMatrix.OR.dampingMatrix%updateMatrix) THEN - !Loop over element columns - DO nh=1,FIELD_VARIABLE%NUMBER_OF_COMPONENTS - MESH_COMPONENT_2=FIELD_VARIABLE%COMPONENTS(nh)%MESH_COMPONENT_NUMBER - DEPENDENT_BASIS_2=>dependentField%DECOMPOSITION%DOMAIN(MESH_COMPONENT_2)%ptr% & - & TOPOLOGY%ELEMENTS%ELEMENTS(ELEMENT_NUMBER)%BASIS - DO ns=1,DEPENDENT_BASIS_2%NUMBER_OF_ELEMENT_PARAMETERS - nhs=nhs+1 - IF(stiffnessMatrix%updateMatrix)THEN - stiffnessMatrix%elementMatrix%matrix(mhs,nhs)=stiffnessMatrix%elementMatrix%matrix(mhs,nhs)* & - & equations%interpolation%dependentInterpParameters(FIELD_VAR_TYPE)%ptr%SCALE_FACTORS(ms,mh)* & - & equations%interpolation%dependentInterpParameters(FIELD_VAR_TYPE)%ptr%SCALE_FACTORS(ns,nh) - END IF - IF(dampingMatrix%updateMatrix)THEN - dampingMatrix%elementMatrix%matrix(mhs,nhs)=dampingMatrix%elementMatrix%matrix(mhs,nhs)* & - & equations%interpolation%dependentInterpParameters(FIELD_VAR_TYPE)%ptr%SCALE_FACTORS(ms,mh)* & - & equations%interpolation%dependentInterpParameters(FIELD_VAR_TYPE)%ptr%SCALE_FACTORS(ns,nh) - END IF - ENDDO !ns - ENDDO !nh - ENDIF - ENDIF - IF(ASSOCIATED(rhsVector)) THEN - IF(rhsVector%updateVector) rhsVector%elementVector%vector(mhs)=rhsVector%elementVector%vector(mhs)* & - & equations%interpolation%dependentInterpParameters(FIELD_VAR_TYPE)%ptr%SCALE_FACTORS(ms,mh) - ENDIF - IF(ASSOCIATED(sourceVector)) THEN - IF(sourceVector%updateVector) sourceVector%elementVector%vector(mhs)= & - & sourceVector%elementVector%vector(mhs)* & - & equations%interpolation%dependentInterpParameters(FIELD_VAR_TYPE)%ptr%SCALE_FACTORS(ms,mh) - ENDIF - ENDDO !ms - ENDDO !mh - ENDIF - - ! RESTORE ALL POINTERS CALL PARAMATER_SET_FIELD_DATA_RESTORE - - CASE DEFAULT - localError="Equations set subtype "//TRIM(NumberToVString(EQUATIONS_SET_SUBTYPE,"*",err,error))// & - & " is not valid for a Darcy equation type of a fluid mechanics equations set class." - CALL FlagError(localError,err,error,*999) - END SELECT - - ELSE - CALL FlagError("Equations set equations is not associated.",err,error,*999) - ENDIF - ELSE - CALL FlagError("Equations set is not associated.",err,error,*999) - ENDIF - - EXITS("DARCY_EQUATION_FINITE_ELEMENT_CALCULATE") - RETURN -999 ERRORSEXITS("DARCY_EQUATION_FINITE_ELEMENT_CALCULATE",err,error) - RETURN 1 - END SUBROUTINE DARCY_EQUATION_FINITE_ELEMENT_CALCULATE - - ! - !================================================================================================================================ - ! - - !>Calculates the face integration term of the finite element formulation for Darcy's equation, - !>required for pressure boundary conditions. - SUBROUTINE Darcy_FiniteElementFaceIntegrate(equationsSet,elementNumber,dependentVariable,err,error,*) - - !Argument variables - TYPE(EQUATIONS_SET_TYPE), POINTER :: equationsSet !equationsSet%EQUATIONS - IF(ASSOCIATED(equations)) THEN - NULLIFY(vectorEquations) - CALL Equations_VectorEquationsGet(equations,vectorEquations,err,error,*999) - equationsMatrices=>vectorEquations%vectorMatrices - IF(ASSOCIATED(equationsMatrices)) THEN - rhsVector=>equationsMatrices%rhsVector - END IF - ELSE - CALL FlagError("Equations set equations is not associated.",err,error,*999) - END IF - ELSE - CALL FlagError("Equations set is not associated.",err,error,*999) - END IF - - IF(.NOT.ALLOCATED(equationsSet%specification)) THEN - CALL FlagError("Equations set specification is not allocated.",err,error,*999) - ELSE IF(SIZE(equationsSet%specification,1)/=3) THEN - CALL FlagError("Equations set specification must have three entries for a Darcy type equations set.", & - & err,error,*999) - END IF - SELECT CASE(equationsSet%specification(3)) - CASE(EQUATIONS_SET_STANDARD_DARCY_SUBTYPE, & - & EQUATIONS_SET_QUASISTATIC_DARCY_SUBTYPE, & - & EQUATIONS_SET_ALE_DARCY_SUBTYPE, & - & EQUATIONS_SET_TRANSIENT_DARCY_SUBTYPE) - - !Get the mesh decomposition and basis for this element - decomposition=>dependentVariable%FIELD%DECOMPOSITION - !These RHS terms are associated with the equations for the three velocity components, - !rather than the pressure term - meshComponentNumber=dependentVariable%COMPONENTS(1)%MESH_COMPONENT_NUMBER - dependentBasis=>decomposition%DOMAIN(meshComponentNumber)%ptr%TOPOLOGY%ELEMENTS%ELEMENTS(elementNumber)%BASIS - decompElement=>DECOMPOSITION%TOPOLOGY%ELEMENTS%ELEMENTS(elementNumber) - - !Only add RHS terms if the face geometric parameters are calculated - IF(decomposition%CALCULATE_FACES) THEN - !Get interpolation parameters and point for Darcy pressure - dependentInterpolationParameters=>equations%interpolation%dependentInterpParameters(dependentVariable%VARIABLE_TYPE)%ptr - dependentInterpolatedPoint=>equations%interpolation%dependentInterpPoint(dependentVariable%VARIABLE_TYPE)%ptr - - DO faceIdx=1,dependentBasis%NUMBER_OF_LOCAL_FACES - !Get the face normal and quadrature information - IF(ALLOCATED(decompElement%ELEMENT_FACES)) THEN - faceNumber=decompElement%ELEMENT_FACES(faceIdx) - ELSE - CALL FlagError("Decomposition element faces is not allocated.",err,error,*999) - END IF - face=>decomposition%TOPOLOGY%FACES%FACES(faceNumber) - !This speeds things up but is also important, as non-boundary faces have an XI_DIRECTION that might - !correspond to the other element. - IF(.NOT.(face%BOUNDARY_FACE)) CYCLE - CALL FIELD_INTERPOLATION_PARAMETERS_FACE_GET(FIELD_VALUES_SET_TYPE,faceNumber,dependentInterpolationParameters, & - & err,error,*999) - normalComponentIdx=ABS(face%XI_DIRECTION) - faceBasis=>decomposition%DOMAIN(meshComponentNumber)%ptr%TOPOLOGY%FACES%FACES(faceNumber)%BASIS - faceQuadratureScheme=>faceBasis%QUADRATURE%QUADRATURE_SCHEME_MAP(BASIS_DEFAULT_QUADRATURE_SCHEME)%ptr - - DO gaussIdx=1,faceQuadratureScheme%NUMBER_OF_GAUSS - gaussWeight=faceQuadratureScheme%GAUSS_WEIGHTS(gaussIdx) - !Get interpolated Darcy pressure - CALL FIELD_INTERPOLATE_GAUSS(NO_PART_DERIV,BASIS_DEFAULT_QUADRATURE_SCHEME,gaussIdx, & - & dependentInterpolatedPoint,err,error,*999) - pressureGauss=dependentInterpolatedPoint%values(4,1) !(component,derivative) - - !Use the geometric field to find the face normal and the Jacobian for the face integral - geometricInterpolationParameters=>equations%interpolation%geometricInterpParameters( & - & FIELD_U_VARIABLE_TYPE)%ptr - CALL FIELD_INTERPOLATION_PARAMETERS_ELEMENT_GET(FIELD_VALUES_SET_TYPE,elementNumber, & - & geometricInterpolationParameters,err,error,*999) - geometricInterpolatedPoint=>equations%interpolation%geometricInterpPoint(FIELD_U_VARIABLE_TYPE)%ptr - CALL FIELD_INTERPOLATE_LOCAL_FACE_GAUSS(FIRST_PART_DERIV,BASIS_DEFAULT_QUADRATURE_SCHEME,faceIdx,gaussIdx, & - & geometricInterpolatedPoint,err,error,*999) - !Calculate the metric tensors and Jacobian - pointMetrics=>equations%interpolation%geometricInterpPointMetrics(FIELD_U_VARIABLE_TYPE)%ptr - CALL FIELD_INTERPOLATED_POINT_METRICS_CALCULATE(COORDINATE_JACOBIAN_VOLUME_TYPE,pointMetrics,err,error,*999) - - DO componentIdx=1,dependentVariable%NUMBER_OF_COMPONENTS-1 - normalProjection=DOT_PRODUCT(pointMetrics%GU(normalComponentIdx,:),pointMetrics%DX_DXI(componentIdx,:)) - IF(face%XI_DIRECTION<0) THEN - normalProjection=-normalProjection - END IF - IF(ABS(normalProjection)Sets the equation specification for a Darcy equation type of a fluid mechanics equations set class. - SUBROUTINE Darcy_EquationsSetSpecificationSet(equationsSet,specification,err,error,*) - - !Argument variables - TYPE(EQUATIONS_SET_TYPE), POINTER :: equationsSet !Sets the problem specification for a Darcy problem. - SUBROUTINE Darcy_ProblemSpecificationSet(problem,problemSpecification,err,error,*) - - !Argument variables - TYPE(PROBLEM_TYPE), POINTER :: problem !Sets up the Darcy equations problem. -! SUBROUTINE DARCY_EQUATION_PROBLEM_STANDARD_SETUP(PROBLEM,PROBLEM_SETUP,err,error,*) - SUBROUTINE DARCY_EQUATION_PROBLEM_SETUP(PROBLEM,PROBLEM_SETUP,err,error,*) - - !Argument variables - TYPE(PROBLEM_TYPE), POINTER :: PROBLEM !PROBLEM%CONTROL_LOOP - CALL CONTROL_LOOP_GET(CONTROL_LOOP_ROOT,CONTROL_LOOP_NODE,CONTROL_LOOP,err,error,*999) - CALL CONTROL_LOOP_CREATE_FINISH(CONTROL_LOOP,err,error,*999) - CASE DEFAULT - localError="The action type of "//TRIM(NumberToVString(PROBLEM_SETUP%ACTION_TYPE,"*",err,error))// & - & " for a setup type of "//TRIM(NumberToVString(PROBLEM_SETUP%SETUP_TYPE,"*",err,error))// & - & " is invalid for a standard Darcy equation." - CALL FlagError(localError,err,error,*999) - END SELECT - CASE(PROBLEM_SETUP_SOLVERS_TYPE) - !Get the control loop - CONTROL_LOOP_ROOT=>PROBLEM%CONTROL_LOOP - CALL CONTROL_LOOP_GET(CONTROL_LOOP_ROOT,CONTROL_LOOP_NODE,CONTROL_LOOP,err,error,*999) - SELECT CASE(PROBLEM_SETUP%ACTION_TYPE) - CASE(PROBLEM_SETUP_START_ACTION) - !Start the solvers creation - CALL SOLVERS_CREATE_START(CONTROL_LOOP,SOLVERS,err,error,*999) - CALL SOLVERS_NUMBER_SET(SOLVERS,1,err,error,*999) - !Set the solver to be a linear solver - CALL SOLVERS_SOLVER_GET(SOLVERS,1,SOLVER,err,error,*999) - CALL SOLVER_TYPE_SET(SOLVER,SOLVER_LINEAR_TYPE,err,error,*999) - !Set solver defaults - CALL SOLVER_LIBRARY_TYPE_SET(SOLVER,SOLVER_PETSC_LIBRARY,err,error,*999) - CASE(PROBLEM_SETUP_FINISH_ACTION) - !Get the solvers - CALL CONTROL_LOOP_SOLVERS_GET(CONTROL_LOOP,SOLVERS,err,error,*999) - !Finish the solvers creation - CALL SOLVERS_CREATE_FINISH(SOLVERS,err,error,*999) - CASE DEFAULT - localError="The action type of "//TRIM(NumberToVString(PROBLEM_SETUP%ACTION_TYPE,"*",err,error))// & - & " for a setup type of "//TRIM(NumberToVString(PROBLEM_SETUP%SETUP_TYPE,"*",err,error))// & - & " is invalid for a standard Darcy equation." - CALL FlagError(localError,err,error,*999) - END SELECT - CASE(PROBLEM_SETUP_SOLVER_EQUATIONS_TYPE) - SELECT CASE(PROBLEM_SETUP%ACTION_TYPE) - CASE(PROBLEM_SETUP_START_ACTION) - !Get the control loop - CONTROL_LOOP_ROOT=>PROBLEM%CONTROL_LOOP - CALL CONTROL_LOOP_GET(CONTROL_LOOP_ROOT,CONTROL_LOOP_NODE,CONTROL_LOOP,err,error,*999) - !Get the solver - CALL CONTROL_LOOP_SOLVERS_GET(CONTROL_LOOP,SOLVERS,err,error,*999) - CALL SOLVERS_SOLVER_GET(SOLVERS,1,SOLVER,err,error,*999) - !Create the solver equations - CALL SOLVER_EQUATIONS_CREATE_START(SOLVER,SOLVER_EQUATIONS,err,error,*999) - CALL SOLVER_EQUATIONS_LINEARITY_TYPE_SET(SOLVER_EQUATIONS,SOLVER_EQUATIONS_LINEAR,err,error,*999) - CALL SOLVER_EQUATIONS_TIME_DEPENDENCE_TYPE_SET(SOLVER_EQUATIONS,SOLVER_EQUATIONS_STATIC,err,error,*999) - CALL SOLVER_EQUATIONS_SPARSITY_TYPE_SET(SOLVER_EQUATIONS,SOLVER_SPARSE_MATRICES,err,error,*999) - CASE(PROBLEM_SETUP_FINISH_ACTION) - !Get the control loop - CONTROL_LOOP_ROOT=>PROBLEM%CONTROL_LOOP - CALL CONTROL_LOOP_GET(CONTROL_LOOP_ROOT,CONTROL_LOOP_NODE,CONTROL_LOOP,err,error,*999) - !Get the solver equations - CALL CONTROL_LOOP_SOLVERS_GET(CONTROL_LOOP,SOLVERS,err,error,*999) - CALL SOLVERS_SOLVER_GET(SOLVERS,1,SOLVER,err,error,*999) - CALL SOLVER_SOLVER_EQUATIONS_GET(SOLVER,SOLVER_EQUATIONS,err,error,*999) - !Finish the solver equations creation - CALL SOLVER_EQUATIONS_CREATE_FINISH(SOLVER_EQUATIONS,err,error,*999) - CASE DEFAULT - localError="The action type of "//TRIM(NumberToVString(PROBLEM_SETUP%ACTION_TYPE,"*",err,error))// & - & " for a setup type of "//TRIM(NumberToVString(PROBLEM_SETUP%SETUP_TYPE,"*",err,error))// & - & " is invalid for a standard Darcy equation." - CALL FlagError(localError,err,error,*999) - END SELECT - CASE DEFAULT - localError="The setup type of "//TRIM(NumberToVString(PROBLEM_SETUP%SETUP_TYPE,"*",err,error))// & - & " is invalid for a standard Darcy equation." - CALL FlagError(localError,err,error,*999) - END SELECT - - !----------------------------------------------------------------- - ! q u a s i s t a t i c D a r c y - !----------------------------------------------------------------- - CASE(PROBLEM_QUASISTATIC_DARCY_SUBTYPE) - SELECT CASE(PROBLEM_SETUP%SETUP_TYPE) - CASE(PROBLEM_SETUP_INITIAL_TYPE) - SELECT CASE(PROBLEM_SETUP%ACTION_TYPE) - CASE(PROBLEM_SETUP_START_ACTION) - !Do nothing???? - CASE(PROBLEM_SETUP_FINISH_ACTION) - !Do nothing??? - CASE DEFAULT - localError="The action type of "//TRIM(NumberToVString(PROBLEM_SETUP%ACTION_TYPE,"*",err,error))// & - & " for a setup type of "//TRIM(NumberToVString(PROBLEM_SETUP%SETUP_TYPE,"*",err,error))// & - & " is invalid for a quasistatic Darcy equation." - CALL FlagError(localError,err,error,*999) - END SELECT - CASE(PROBLEM_SETUP_CONTROL_TYPE) - SELECT CASE(PROBLEM_SETUP%ACTION_TYPE) - CASE(PROBLEM_SETUP_START_ACTION) - !Set up a time control loop - CALL CONTROL_LOOP_CREATE_START(PROBLEM,CONTROL_LOOP,err,error,*999) - CALL CONTROL_LOOP_TYPE_SET(CONTROL_LOOP,PROBLEM_CONTROL_TIME_LOOP_TYPE,err,error,*999) - CASE(PROBLEM_SETUP_FINISH_ACTION) - !Finish the control loops - CONTROL_LOOP_ROOT=>PROBLEM%CONTROL_LOOP - CALL CONTROL_LOOP_GET(CONTROL_LOOP_ROOT,CONTROL_LOOP_NODE,CONTROL_LOOP,err,error,*999) - CALL CONTROL_LOOP_CREATE_FINISH(CONTROL_LOOP,err,error,*999) - CASE DEFAULT - localError="The action type of "//TRIM(NumberToVString(PROBLEM_SETUP%ACTION_TYPE,"*",err,error))// & - & " for a setup type of "//TRIM(NumberToVString(PROBLEM_SETUP%SETUP_TYPE,"*",err,error))// & - & " is invalid for a quasistatic Darcy equation." - CALL FlagError(localError,err,error,*999) - END SELECT - CASE(PROBLEM_SETUP_SOLVERS_TYPE) - !Get the control loop - CONTROL_LOOP_ROOT=>PROBLEM%CONTROL_LOOP - CALL CONTROL_LOOP_GET(CONTROL_LOOP_ROOT,CONTROL_LOOP_NODE,CONTROL_LOOP,err,error,*999) - SELECT CASE(PROBLEM_SETUP%ACTION_TYPE) - CASE(PROBLEM_SETUP_START_ACTION) - !Start the solvers creation - CALL SOLVERS_CREATE_START(CONTROL_LOOP,SOLVERS,err,error,*999) - CALL SOLVERS_NUMBER_SET(SOLVERS,1,err,error,*999) - !Set the solver to be a linear solver - CALL SOLVERS_SOLVER_GET(SOLVERS,1,SOLVER,err,error,*999) - CALL SOLVER_TYPE_SET(SOLVER,SOLVER_LINEAR_TYPE,err,error,*999) - !Set solver defaults - CALL SOLVER_LIBRARY_TYPE_SET(SOLVER,SOLVER_PETSC_LIBRARY,err,error,*999) - CASE(PROBLEM_SETUP_FINISH_ACTION) - !Get the solvers - CALL CONTROL_LOOP_SOLVERS_GET(CONTROL_LOOP,SOLVERS,err,error,*999) - !Finish the solvers creation - CALL SOLVERS_CREATE_FINISH(SOLVERS,err,error,*999) - CASE DEFAULT - localError="The action type of "//TRIM(NumberToVString(PROBLEM_SETUP%ACTION_TYPE,"*",err,error))// & - & " for a setup type of "//TRIM(NumberToVString(PROBLEM_SETUP%SETUP_TYPE,"*",err,error))// & - & " is invalid for a quasistatic Darcy equation." - CALL FlagError(localError,err,error,*999) - END SELECT - CASE(PROBLEM_SETUP_SOLVER_EQUATIONS_TYPE) - SELECT CASE(PROBLEM_SETUP%ACTION_TYPE) - CASE(PROBLEM_SETUP_START_ACTION) - !Get the control loop - CONTROL_LOOP_ROOT=>PROBLEM%CONTROL_LOOP - CALL CONTROL_LOOP_GET(CONTROL_LOOP_ROOT,CONTROL_LOOP_NODE,CONTROL_LOOP,err,error,*999) - !Get the solver - CALL CONTROL_LOOP_SOLVERS_GET(CONTROL_LOOP,SOLVERS,err,error,*999) - CALL SOLVERS_SOLVER_GET(SOLVERS,1,SOLVER,err,error,*999) - !Create the solver equations - CALL SOLVER_EQUATIONS_CREATE_START(SOLVER,SOLVER_EQUATIONS,err,error,*999) - CALL SOLVER_EQUATIONS_LINEARITY_TYPE_SET(SOLVER_EQUATIONS,SOLVER_EQUATIONS_LINEAR,err,error,*999) - CALL SOLVER_EQUATIONS_TIME_DEPENDENCE_TYPE_SET(SOLVER_EQUATIONS,SOLVER_EQUATIONS_QUASISTATIC,err,error,*999) - CALL SOLVER_EQUATIONS_SPARSITY_TYPE_SET(SOLVER_EQUATIONS,SOLVER_SPARSE_MATRICES,err,error,*999) - CASE(PROBLEM_SETUP_FINISH_ACTION) - !Get the control loop - CONTROL_LOOP_ROOT=>PROBLEM%CONTROL_LOOP - CALL CONTROL_LOOP_GET(CONTROL_LOOP_ROOT,CONTROL_LOOP_NODE,CONTROL_LOOP,err,error,*999) - !Get the solver equations - CALL CONTROL_LOOP_SOLVERS_GET(CONTROL_LOOP,SOLVERS,err,error,*999) - CALL SOLVERS_SOLVER_GET(SOLVERS,1,SOLVER,err,error,*999) - CALL SOLVER_SOLVER_EQUATIONS_GET(SOLVER,SOLVER_EQUATIONS,err,error,*999) - !Finish the solver equations creation - CALL SOLVER_EQUATIONS_CREATE_FINISH(SOLVER_EQUATIONS,err,error,*999) - CASE DEFAULT - localError="The action type of "//TRIM(NumberToVString(PROBLEM_SETUP%ACTION_TYPE,"*",err,error))// & - & " for a setup type of "//TRIM(NumberToVString(PROBLEM_SETUP%SETUP_TYPE,"*",err,error))// & - & " is invalid for a quasistatic Darcy equation." - CALL FlagError(localError,err,error,*999) - END SELECT - CASE DEFAULT - localError="The setup type of "//TRIM(NumberToVString(PROBLEM_SETUP%SETUP_TYPE,"*",err,error))// & - & " is invalid for a quasistatic Darcy equation." - CALL FlagError(localError,err,error,*999) - END SELECT - - !----------------------------------------------------------------- - ! A L E / P G M D a r c y - !----------------------------------------------------------------- - CASE(PROBLEM_ALE_DARCY_SUBTYPE,PROBLEM_PGM_DARCY_SUBTYPE) - SELECT CASE(PROBLEM_SETUP%SETUP_TYPE) - CASE(PROBLEM_SETUP_INITIAL_TYPE) - SELECT CASE(PROBLEM_SETUP%ACTION_TYPE) - CASE(PROBLEM_SETUP_START_ACTION) - !Do nothing???? - CASE(PROBLEM_SETUP_FINISH_ACTION) - !Do nothing??? - CASE DEFAULT - localError="The action type of "//TRIM(NumberToVString(PROBLEM_SETUP%ACTION_TYPE,"*",err,error))// & - & " for a setup type of "//TRIM(NumberToVString(PROBLEM_SETUP%SETUP_TYPE,"*",err,error))// & - & " is invalid for an ALE Darcy equation." - CALL FlagError(localError,err,error,*999) - END SELECT - CASE(PROBLEM_SETUP_CONTROL_TYPE) - SELECT CASE(PROBLEM_SETUP%ACTION_TYPE) - CASE(PROBLEM_SETUP_START_ACTION) - !Set up a time control loop - CALL CONTROL_LOOP_CREATE_START(PROBLEM,CONTROL_LOOP,err,error,*999) - CALL CONTROL_LOOP_TYPE_SET(CONTROL_LOOP,PROBLEM_CONTROL_TIME_LOOP_TYPE,err,error,*999) - CASE(PROBLEM_SETUP_FINISH_ACTION) - !Finish the control loops - CONTROL_LOOP_ROOT=>PROBLEM%CONTROL_LOOP - CALL CONTROL_LOOP_GET(CONTROL_LOOP_ROOT,CONTROL_LOOP_NODE,CONTROL_LOOP,err,error,*999) - CALL CONTROL_LOOP_CREATE_FINISH(CONTROL_LOOP,err,error,*999) - CASE DEFAULT - localError="The action type of "//TRIM(NumberToVString(PROBLEM_SETUP%ACTION_TYPE,"*",err,error))// & - & " for a setup type of "//TRIM(NumberToVString(PROBLEM_SETUP%SETUP_TYPE,"*",err,error))// & - & " is invalid for an ALE Darcy equation." - CALL FlagError(localError,err,error,*999) - END SELECT - CASE(PROBLEM_SETUP_SOLVERS_TYPE) - !Get the control loop - CONTROL_LOOP_ROOT=>PROBLEM%CONTROL_LOOP - CALL CONTROL_LOOP_GET(CONTROL_LOOP_ROOT,CONTROL_LOOP_NODE,CONTROL_LOOP,err,error,*999) - SELECT CASE(PROBLEM_SETUP%ACTION_TYPE) - CASE(PROBLEM_SETUP_START_ACTION) - !Start the solvers creation - CALL SOLVERS_CREATE_START(CONTROL_LOOP,SOLVERS,err,error,*999) - CALL SOLVERS_NUMBER_SET(SOLVERS,2,err,error,*999) - ! - !Set the first solver to be a linear solver for the material update - CALL SOLVERS_SOLVER_GET(SOLVERS,1,SOLVER_MAT_PROPERTIES,err,error,*999) - CALL SOLVER_TYPE_SET(SOLVER_MAT_PROPERTIES,SOLVER_LINEAR_TYPE,err,error,*999) - CALL SOLVER_LIBRARY_TYPE_SET(SOLVER_MAT_PROPERTIES,SOLVER_PETSC_LIBRARY,err,error,*999) - ! - !Set the second solver to be a linear solver for the ALE Darcy - CALL SOLVERS_SOLVER_GET(SOLVERS,2,SOLVER,err,error,*999) - CALL SOLVER_TYPE_SET(SOLVER,SOLVER_LINEAR_TYPE,err,error,*999) - CALL SOLVER_LIBRARY_TYPE_SET(SOLVER,SOLVER_PETSC_LIBRARY,err,error,*999) - CASE(PROBLEM_SETUP_FINISH_ACTION) - !Get the solvers - CALL CONTROL_LOOP_SOLVERS_GET(CONTROL_LOOP,SOLVERS,err,error,*999) - !Finish the solvers creation - CALL SOLVERS_CREATE_FINISH(SOLVERS,err,error,*999) - CASE DEFAULT - localError="The action type of "//TRIM(NumberToVString(PROBLEM_SETUP%ACTION_TYPE,"*",err,error))// & - & " for a setup type of "//TRIM(NumberToVString(PROBLEM_SETUP%SETUP_TYPE,"*",err,error))// & - & " is invalid for an ALE Darcy equation." - CALL FlagError(localError,err,error,*999) - END SELECT - CASE(PROBLEM_SETUP_SOLVER_EQUATIONS_TYPE) - SELECT CASE(PROBLEM_SETUP%ACTION_TYPE) - CASE(PROBLEM_SETUP_START_ACTION) - !Get the control loop and solvers - CONTROL_LOOP_ROOT=>PROBLEM%CONTROL_LOOP - CALL CONTROL_LOOP_GET(CONTROL_LOOP_ROOT,CONTROL_LOOP_NODE,CONTROL_LOOP,err,error,*999) - CALL CONTROL_LOOP_SOLVERS_GET(CONTROL_LOOP,SOLVERS,err,error,*999) - !Get the material-properties solver and create the material-properties solver equations - CALL SOLVERS_SOLVER_GET(SOLVERS,1,SOLVER_MAT_PROPERTIES,err,error,*999) - CALL SOLVER_EQUATIONS_CREATE_START(SOLVER_MAT_PROPERTIES,SOLVER_EQUATIONS_MAT_PROPERTIES,err,error,*999) - CALL SOLVER_EQUATIONS_LINEARITY_TYPE_SET(SOLVER_EQUATIONS_MAT_PROPERTIES,SOLVER_EQUATIONS_LINEAR,err,error,*999) - CALL SOLVER_EQUATIONS_TIME_DEPENDENCE_TYPE_SET(SOLVER_EQUATIONS_MAT_PROPERTIES,SOLVER_EQUATIONS_QUASISTATIC, & - & err,error,*999) - CALL SOLVER_EQUATIONS_SPARSITY_TYPE_SET(SOLVER_EQUATIONS_MAT_PROPERTIES,SOLVER_SPARSE_MATRICES,err,error,*999) - !Get the Darcy-ALE solver and create the Darcy-ALE solver equations - CALL SOLVERS_SOLVER_GET(SOLVERS,2,SOLVER,err,error,*999) - CALL SOLVER_EQUATIONS_CREATE_START(SOLVER,SOLVER_EQUATIONS,err,error,*999) - CALL SOLVER_EQUATIONS_LINEARITY_TYPE_SET(SOLVER_EQUATIONS,SOLVER_EQUATIONS_LINEAR,err,error,*999) - CALL SOLVER_EQUATIONS_TIME_DEPENDENCE_TYPE_SET(SOLVER_EQUATIONS,SOLVER_EQUATIONS_QUASISTATIC,err,error,*999) - CALL SOLVER_EQUATIONS_SPARSITY_TYPE_SET(SOLVER_EQUATIONS,SOLVER_SPARSE_MATRICES,err,error,*999) - CASE(PROBLEM_SETUP_FINISH_ACTION) - !Get the control loop - CONTROL_LOOP_ROOT=>PROBLEM%CONTROL_LOOP - CALL CONTROL_LOOP_GET(CONTROL_LOOP_ROOT,CONTROL_LOOP_NODE,CONTROL_LOOP,err,error,*999) - CALL CONTROL_LOOP_SOLVERS_GET(CONTROL_LOOP,SOLVERS,err,error,*999) - !Finish the creation of the material-properties solver equations - CALL SOLVERS_SOLVER_GET(SOLVERS,1,SOLVER_MAT_PROPERTIES,err,error,*999) - CALL SOLVER_SOLVER_EQUATIONS_GET(SOLVER_MAT_PROPERTIES,SOLVER_EQUATIONS_MAT_PROPERTIES,err,error,*999) - CALL SOLVER_EQUATIONS_CREATE_FINISH(SOLVER_EQUATIONS_MAT_PROPERTIES,err,error,*999) - !Finish the creation of the Darcy-ALE solver equations - CALL SOLVERS_SOLVER_GET(SOLVERS,2,SOLVER,err,error,*999) - CALL SOLVER_SOLVER_EQUATIONS_GET(SOLVER,SOLVER_EQUATIONS,err,error,*999) - CALL SOLVER_EQUATIONS_CREATE_FINISH(SOLVER_EQUATIONS,err,error,*999) - CASE DEFAULT - localError="The action type of "//TRIM(NumberToVString(PROBLEM_SETUP%ACTION_TYPE,"*",err,error))// & - & " for a setup type of "//TRIM(NumberToVString(PROBLEM_SETUP%SETUP_TYPE,"*",err,error))// & - & " is invalid for an ALE Darcy equation." - CALL FlagError(localError,err,error,*999) - END SELECT - CASE DEFAULT - localError="The setup type of "//TRIM(NumberToVString(PROBLEM_SETUP%SETUP_TYPE,"*",err,error))// & - & " is invalid for an ALE Darcy equation." - CALL FlagError(localError,err,error,*999) - END SELECT - - !----------------------------------------------------------------- - ! D Y N A M I C A L E / P G M D a r c y - !----------------------------------------------------------------- - CASE(PROBLEM_PGM_TRANSIENT_DARCY_SUBTYPE) - SELECT CASE(PROBLEM_SETUP%SETUP_TYPE) - CASE(PROBLEM_SETUP_INITIAL_TYPE) - SELECT CASE(PROBLEM_SETUP%ACTION_TYPE) - CASE(PROBLEM_SETUP_START_ACTION) - !Do nothing???? - CASE(PROBLEM_SETUP_FINISH_ACTION) - !Do nothing??? - CASE DEFAULT - localError="The action type of "//TRIM(NumberToVString(PROBLEM_SETUP%ACTION_TYPE,"*",err,error))// & - & " for a setup type of "//TRIM(NumberToVString(PROBLEM_SETUP%SETUP_TYPE,"*",err,error))// & - & " is invalid for an ALE Darcy equation." - CALL FlagError(localError,err,error,*999) - END SELECT - CASE(PROBLEM_SETUP_CONTROL_TYPE) - SELECT CASE(PROBLEM_SETUP%ACTION_TYPE) - CASE(PROBLEM_SETUP_START_ACTION) - !Set up a time control loop - CALL CONTROL_LOOP_CREATE_START(PROBLEM,CONTROL_LOOP,err,error,*999) - CALL CONTROL_LOOP_TYPE_SET(CONTROL_LOOP,PROBLEM_CONTROL_TIME_LOOP_TYPE,err,error,*999) - CASE(PROBLEM_SETUP_FINISH_ACTION) - !Finish the control loops - CONTROL_LOOP_ROOT=>PROBLEM%CONTROL_LOOP - CALL CONTROL_LOOP_GET(CONTROL_LOOP_ROOT,CONTROL_LOOP_NODE,CONTROL_LOOP,err,error,*999) - CALL CONTROL_LOOP_CREATE_FINISH(CONTROL_LOOP,err,error,*999) - CASE DEFAULT - localError="The action type of "//TRIM(NumberToVString(PROBLEM_SETUP%ACTION_TYPE,"*",err,error))// & - & " for a setup type of "//TRIM(NumberToVString(PROBLEM_SETUP%SETUP_TYPE,"*",err,error))// & - & " is invalid for an ALE Darcy equation." - CALL FlagError(localError,err,error,*999) - END SELECT - CASE(PROBLEM_SETUP_SOLVERS_TYPE) - !Get the control loop - CONTROL_LOOP_ROOT=>PROBLEM%CONTROL_LOOP - CALL CONTROL_LOOP_GET(CONTROL_LOOP_ROOT,CONTROL_LOOP_NODE,CONTROL_LOOP,err,error,*999) - SELECT CASE(PROBLEM_SETUP%ACTION_TYPE) - CASE(PROBLEM_SETUP_START_ACTION) - !Start the solvers creation - CALL SOLVERS_CREATE_START(CONTROL_LOOP,SOLVERS,err,error,*999) - CALL SOLVERS_NUMBER_SET(SOLVERS,2,err,error,*999) - ! - !Set the first solver to be a linear solver for the material update - CALL SOLVERS_SOLVER_GET(SOLVERS,1,SOLVER_MAT_PROPERTIES,err,error,*999) - CALL SOLVER_TYPE_SET(SOLVER_MAT_PROPERTIES,SOLVER_LINEAR_TYPE,err,error,*999) - CALL SOLVER_LIBRARY_TYPE_SET(SOLVER_MAT_PROPERTIES,SOLVER_PETSC_LIBRARY,err,error,*999) - ! - !Set the second solver to be a first order dynamic solver for the ALE Darcy - CALL SOLVERS_SOLVER_GET(SOLVERS,2,SOLVER,err,error,*999) - CALL SOLVER_TYPE_SET(SOLVER,SOLVER_DYNAMIC_TYPE,err,error,*999) - CALL SOLVER_DYNAMIC_ORDER_SET(SOLVER,SOLVER_DYNAMIC_FIRST_ORDER,err,error,*999) - !Set solver defaults - CALL SOLVER_DYNAMIC_DEGREE_SET(SOLVER,SOLVER_DYNAMIC_FIRST_DEGREE,err,error,*999) - CALL SOLVER_DYNAMIC_SCHEME_SET(SOLVER,SOLVER_DYNAMIC_CRANK_NICOLSON_SCHEME,err,error,*999) - CALL SOLVER_LIBRARY_TYPE_SET(SOLVER,SOLVER_CMISS_LIBRARY,err,error,*999) -! CALL SOLVER_LIBRARY_TYPE_SET(SOLVER,SOLVER_PETSC_LIBRARY,err,error,*999) - CASE(PROBLEM_SETUP_FINISH_ACTION) - !Get the solvers - CALL CONTROL_LOOP_SOLVERS_GET(CONTROL_LOOP,SOLVERS,err,error,*999) - !Finish the solvers creation - CALL SOLVERS_CREATE_FINISH(SOLVERS,err,error,*999) - CASE DEFAULT - localError="The action type of "//TRIM(NumberToVString(PROBLEM_SETUP%ACTION_TYPE,"*",err,error))// & - & " for a setup type of "//TRIM(NumberToVString(PROBLEM_SETUP%SETUP_TYPE,"*",err,error))// & - & " is invalid for an ALE Darcy equation." - CALL FlagError(localError,err,error,*999) - END SELECT - CASE(PROBLEM_SETUP_SOLVER_EQUATIONS_TYPE) - SELECT CASE(PROBLEM_SETUP%ACTION_TYPE) - CASE(PROBLEM_SETUP_START_ACTION) - !Get the control loop and solvers - CONTROL_LOOP_ROOT=>PROBLEM%CONTROL_LOOP - CALL CONTROL_LOOP_GET(CONTROL_LOOP_ROOT,CONTROL_LOOP_NODE,CONTROL_LOOP,err,error,*999) - CALL CONTROL_LOOP_SOLVERS_GET(CONTROL_LOOP,SOLVERS,err,error,*999) - !Get the material-properties solver and create the material-properties solver equations - CALL SOLVERS_SOLVER_GET(SOLVERS,1,SOLVER_MAT_PROPERTIES,err,error,*999) - CALL SOLVER_EQUATIONS_CREATE_START(SOLVER_MAT_PROPERTIES,SOLVER_EQUATIONS_MAT_PROPERTIES,err,error,*999) - CALL SOLVER_EQUATIONS_LINEARITY_TYPE_SET(SOLVER_EQUATIONS_MAT_PROPERTIES,SOLVER_EQUATIONS_LINEAR,err,error,*999) - CALL SOLVER_EQUATIONS_TIME_DEPENDENCE_TYPE_SET(SOLVER_EQUATIONS_MAT_PROPERTIES,SOLVER_EQUATIONS_QUASISTATIC, & - & err,error,*999) - CALL SOLVER_EQUATIONS_SPARSITY_TYPE_SET(SOLVER_EQUATIONS_MAT_PROPERTIES,SOLVER_SPARSE_MATRICES,err,error,*999) - !Get the Darcy-ALE solver and create the Darcy-ALE solver equations - CALL SOLVERS_SOLVER_GET(SOLVERS,2,SOLVER,err,error,*999) - CALL SOLVER_EQUATIONS_CREATE_START(SOLVER,SOLVER_EQUATIONS,err,error,*999) - CALL SOLVER_EQUATIONS_LINEARITY_TYPE_SET(SOLVER_EQUATIONS,SOLVER_EQUATIONS_LINEAR,err,error,*999) - CALL SOLVER_EQUATIONS_TIME_DEPENDENCE_TYPE_SET(SOLVER_EQUATIONS,SOLVER_EQUATIONS_FIRST_ORDER_DYNAMIC,err,error,*999) - CALL SOLVER_EQUATIONS_SPARSITY_TYPE_SET(SOLVER_EQUATIONS,SOLVER_SPARSE_MATRICES,err,error,*999) - CASE(PROBLEM_SETUP_FINISH_ACTION) - !Get the control loop - CONTROL_LOOP_ROOT=>PROBLEM%CONTROL_LOOP - CALL CONTROL_LOOP_GET(CONTROL_LOOP_ROOT,CONTROL_LOOP_NODE,CONTROL_LOOP,err,error,*999) - CALL CONTROL_LOOP_SOLVERS_GET(CONTROL_LOOP,SOLVERS,err,error,*999) - !Finish the creation of the material-properties solver equations - CALL SOLVERS_SOLVER_GET(SOLVERS,1,SOLVER_MAT_PROPERTIES,err,error,*999) - CALL SOLVER_SOLVER_EQUATIONS_GET(SOLVER_MAT_PROPERTIES,SOLVER_EQUATIONS_MAT_PROPERTIES,err,error,*999) - CALL SOLVER_EQUATIONS_CREATE_FINISH(SOLVER_EQUATIONS_MAT_PROPERTIES,err,error,*999) - !Finish the creation of the Darcy-ALE solver equations - CALL SOLVERS_SOLVER_GET(SOLVERS,2,SOLVER,err,error,*999) - CALL SOLVER_SOLVER_EQUATIONS_GET(SOLVER,SOLVER_EQUATIONS,err,error,*999) - CALL SOLVER_EQUATIONS_CREATE_FINISH(SOLVER_EQUATIONS,err,error,*999) - CASE DEFAULT - localError="The action type of "//TRIM(NumberToVString(PROBLEM_SETUP%ACTION_TYPE,"*",err,error))// & - & " for a setup type of "//TRIM(NumberToVString(PROBLEM_SETUP%SETUP_TYPE,"*",err,error))// & - & " is invalid for an ALE Darcy equation." - CALL FlagError(localError,err,error,*999) - END SELECT - CASE DEFAULT - localError="The setup type of "//TRIM(NumberToVString(PROBLEM_SETUP%SETUP_TYPE,"*",err,error))// & - & " is invalid for an ALE Darcy equation." - CALL FlagError(localError,err,error,*999) - END SELECT - - !----------------------------------------------------------------- - ! d y n a m i c D a r c y - !----------------------------------------------------------------- - CASE(PROBLEM_TRANSIENT_DARCY_SUBTYPE) - SELECT CASE(PROBLEM_SETUP%SETUP_TYPE) - CASE(PROBLEM_SETUP_INITIAL_TYPE) - SELECT CASE(PROBLEM_SETUP%ACTION_TYPE) - CASE(PROBLEM_SETUP_START_ACTION) - !Do nothing???? - CASE(PROBLEM_SETUP_FINISH_ACTION) - !Do nothing???? - CASE DEFAULT - localError="The action type of "//TRIM(NumberToVString(PROBLEM_SETUP%ACTION_TYPE,"*",err,error))// & - & " for a setup type of "//TRIM(NumberToVString(PROBLEM_SETUP%SETUP_TYPE,"*",err,error))// & - & " is invalid for a transient Darcy fluid." - CALL FlagError(localError,err,error,*999) - END SELECT - CASE(PROBLEM_SETUP_CONTROL_TYPE) - SELECT CASE(PROBLEM_SETUP%ACTION_TYPE) - CASE(PROBLEM_SETUP_START_ACTION) - !Set up a time control loop - CALL CONTROL_LOOP_CREATE_START(PROBLEM,CONTROL_LOOP,err,error,*999) - CALL CONTROL_LOOP_TYPE_SET(CONTROL_LOOP,PROBLEM_CONTROL_TIME_LOOP_TYPE,err,error,*999) - CASE(PROBLEM_SETUP_FINISH_ACTION) - !Finish the control loops - CONTROL_LOOP_ROOT=>PROBLEM%CONTROL_LOOP - CALL CONTROL_LOOP_GET(CONTROL_LOOP_ROOT,CONTROL_LOOP_NODE,CONTROL_LOOP,err,error,*999) - CALL CONTROL_LOOP_CREATE_FINISH(CONTROL_LOOP,err,error,*999) - CASE DEFAULT - localError="The action type of "//TRIM(NumberToVString(PROBLEM_SETUP%ACTION_TYPE,"*",err,error))// & - & " for a setup type of "//TRIM(NumberToVString(PROBLEM_SETUP%SETUP_TYPE,"*",err,error))// & - & " is invalid for a transient Darcy fluid." - CALL FlagError(localError,err,error,*999) - END SELECT - CASE(PROBLEM_SETUP_SOLVERS_TYPE) - !Get the control loop - CONTROL_LOOP_ROOT=>PROBLEM%CONTROL_LOOP - CALL CONTROL_LOOP_GET(CONTROL_LOOP_ROOT,CONTROL_LOOP_NODE,CONTROL_LOOP,err,error,*999) - SELECT CASE(PROBLEM_SETUP%ACTION_TYPE) - CASE(PROBLEM_SETUP_START_ACTION) - !Start the solvers creation - CALL SOLVERS_CREATE_START(CONTROL_LOOP,SOLVERS,err,error,*999) - CALL SOLVERS_NUMBER_SET(SOLVERS,1,err,error,*999) - !Set the solver to be a first order dynamic solver - CALL SOLVERS_SOLVER_GET(SOLVERS,1,SOLVER,err,error,*999) - CALL SOLVER_TYPE_SET(SOLVER,SOLVER_DYNAMIC_TYPE,err,error,*999) - CALL SOLVER_DYNAMIC_ORDER_SET(SOLVER,SOLVER_DYNAMIC_FIRST_ORDER,err,error,*999) - !Set solver defaults - CALL SOLVER_DYNAMIC_DEGREE_SET(SOLVER,SOLVER_DYNAMIC_FIRST_DEGREE,err,error,*999) - CALL SOLVER_DYNAMIC_SCHEME_SET(SOLVER,SOLVER_DYNAMIC_CRANK_NICOLSON_SCHEME,err,error,*999) - CALL SOLVER_LIBRARY_TYPE_SET(SOLVER,SOLVER_CMISS_LIBRARY,err,error,*999) - CASE(PROBLEM_SETUP_FINISH_ACTION) - !Get the solvers - CALL CONTROL_LOOP_SOLVERS_GET(CONTROL_LOOP,SOLVERS,err,error,*999) - !Finish the solvers creation - CALL SOLVERS_CREATE_FINISH(SOLVERS,err,error,*999) - CASE DEFAULT - localError="The action type of "//TRIM(NumberToVString(PROBLEM_SETUP%ACTION_TYPE,"*",err,error))// & - & " for a setup type of "//TRIM(NumberToVString(PROBLEM_SETUP%SETUP_TYPE,"*",err,error))// & - & " is invalid for a transient Darcy fluid." - CALL FlagError(localError,err,error,*999) - END SELECT - CASE(PROBLEM_SETUP_SOLVER_EQUATIONS_TYPE) - SELECT CASE(PROBLEM_SETUP%ACTION_TYPE) - CASE(PROBLEM_SETUP_START_ACTION) - !Get the control loop - CONTROL_LOOP_ROOT=>PROBLEM%CONTROL_LOOP - CALL CONTROL_LOOP_GET(CONTROL_LOOP_ROOT,CONTROL_LOOP_NODE,CONTROL_LOOP,err,error,*999) - !Get the solver - CALL CONTROL_LOOP_SOLVERS_GET(CONTROL_LOOP,SOLVERS,err,error,*999) - CALL SOLVERS_SOLVER_GET(SOLVERS,1,SOLVER,err,error,*999) - !Create the solver equations - CALL SOLVER_EQUATIONS_CREATE_START(SOLVER,SOLVER_EQUATIONS,err,error,*999) - CALL SOLVER_EQUATIONS_LINEARITY_TYPE_SET(SOLVER_EQUATIONS,SOLVER_EQUATIONS_LINEAR,err,error,*999) - CALL SOLVER_EQUATIONS_TIME_DEPENDENCE_TYPE_SET(SOLVER_EQUATIONS,SOLVER_EQUATIONS_FIRST_ORDER_DYNAMIC,& - & err,error,*999) - CALL SOLVER_EQUATIONS_SPARSITY_TYPE_SET(SOLVER_EQUATIONS,SOLVER_SPARSE_MATRICES,err,error,*999) - CASE(PROBLEM_SETUP_FINISH_ACTION) - !Get the control loop - CONTROL_LOOP_ROOT=>PROBLEM%CONTROL_LOOP - CALL CONTROL_LOOP_GET(CONTROL_LOOP_ROOT,CONTROL_LOOP_NODE,CONTROL_LOOP,err,error,*999) - !Get the solver equations - CALL CONTROL_LOOP_SOLVERS_GET(CONTROL_LOOP,SOLVERS,err,error,*999) - CALL SOLVERS_SOLVER_GET(SOLVERS,1,SOLVER,err,error,*999) - CALL SOLVER_SOLVER_EQUATIONS_GET(SOLVER,SOLVER_EQUATIONS,err,error,*999) - !Finish the solver equations creation - CALL SOLVER_EQUATIONS_CREATE_FINISH(SOLVER_EQUATIONS,err,error,*999) - CASE DEFAULT - localError="The action type of "//TRIM(NumberToVString(PROBLEM_SETUP%ACTION_TYPE,"*",err,error))// & - & " for a setup type of "//TRIM(NumberToVString(PROBLEM_SETUP%SETUP_TYPE,"*",err,error))// & - & " is invalid for a transient Darcy fluid." - CALL FlagError(localError,err,error,*999) - END SELECT - CASE DEFAULT - localError="The setup type of "//TRIM(NumberToVString(PROBLEM_SETUP%SETUP_TYPE,"*",err,error))// & - & " is invalid for a transient Darcy fluid." - CALL FlagError(localError,err,error,*999) - END SELECT - - !----------------------------------------------------------------- - ! c a s e d e f a u l t - !----------------------------------------------------------------- - CASE DEFAULT - localError="The problem subtype of "//TRIM(NumberToVString(PROBLEM%SPECIFICATION(3),"*",err,error))// & - & " does not equal a standard, quasistatic or ALE Darcy equation subtype." - CALL FlagError(localError,err,error,*999) - - END SELECT - ELSE - CALL FlagError("Problem is not associated.",err,error,*999) - ENDIF - -! EXITS("DARCY_EQUATION_PROBLEM_STANDARD_SETUP") - EXITS("DARCY_EQUATION_PROBLEM_SETUP") - RETURN -! 999 ERRORSEXITS("DARCY_EQUATION_PROBLEM_STANDARD_SETUP",err,error) -999 ERRORSEXITS("DARCY_EQUATION_PROBLEM_SETUP",err,error) - RETURN 1 -! END SUBROUTINE DARCY_EQUATION_PROBLEM_STANDARD_SETUP - END SUBROUTINE DARCY_EQUATION_PROBLEM_SETUP - - ! - !================================================================================================================================ - ! - - !>Sets up the Darcy problem pre-solve. - SUBROUTINE DARCY_EQUATION_PRE_SOLVE(CONTROL_LOOP,SOLVER,err,error,*) - - !Argument variables - TYPE(CONTROL_LOOP_TYPE), POINTER :: CONTROL_LOOP !SOLVER%SOLVER_EQUATIONS - IF(ASSOCIATED(SOLVER_EQUATIONS)) THEN - SOLVER_MAPPING=>SOLVER_equations%SOLVER_MAPPING - IF(ASSOCIATED(SOLVER_MAPPING)) THEN - SOLVER_MATRICES=>SOLVER_equations%SOLVER_MATRICES - IF(ASSOCIATED(SOLVER_MATRICES)) THEN - DO solver_matrix_idx=1,SOLVER_MAPPING%NUMBER_OF_SOLVER_MATRICES - SOLVER_MATRIX=>SOLVER_MATRICES%matrices(solver_matrix_idx)%ptr - IF(ASSOCIATED(SOLVER_MATRIX)) THEN - SOLVER_MATRIX%UPDATE_MATRIX=.TRUE. - ELSE - CALL FlagError("Solver Matrix is not associated.",err,error,*999) - ENDIF - ENDDO - ELSE - CALL FlagError("Solver Matrices is not associated.",err,error,*999) - ENDIF - ELSE - CALL FlagError("Solver mapping is not associated.",err,error,*999) - ENDIF - ELSE - CALL FlagError("Solver equations is not associated.",err,error,*999) - ENDIF - - !--- pre_solve calls for various actions - SELECT CASE(CONTROL_LOOP%PROBLEM%SPECIFICATION(3)) - CASE(PROBLEM_STANDARD_DARCY_SUBTYPE) - ! do nothing - CASE(PROBLEM_QUASISTATIC_DARCY_SUBTYPE) - ! do nothing - CASE(PROBLEM_TRANSIENT_DARCY_SUBTYPE) - CALL Darcy_PreSolveUpdateBoundaryConditions(CONTROL_LOOP,SOLVER,err,error,*999) - CASE(PROBLEM_QUASISTATIC_ELASTICITY_TRANSIENT_DARCY_SUBTYPE) - - IF((CONTROL_LOOP%LOOP_TYPE==PROBLEM_CONTROL_SIMPLE_TYPE.OR.CONTROL_LOOP%LOOP_TYPE==PROBLEM_CONTROL_TIME_LOOP_TYPE) & - & .AND.SOLVER%GLOBAL_NUMBER==SOLVER_NUMBER_DARCY) THEN - !--- flags to ensure once-per-time-step output in conjunction with diagnostics - idebug1 = .TRUE. - idebug2 = .TRUE. - idebug3 = .TRUE. - - NULLIFY(SOLVER_ALE_DARCY) - CALL SOLVERS_SOLVER_GET(SOLVER%SOLVERS,SOLVER_NUMBER_DARCY,SOLVER_ALE_DARCY,err,error,*999) - EQUATIONS=>SOLVER_ALE_DARCY%SOLVER_equations%SOLVER_MAPPING%EQUATIONS_SET_TO_SOLVER_MAP(1)%EQUATIONS - IF(ASSOCIATED(EQUATIONS)) THEN - EQUATIONS_SET=>equations%equationsSet - IF(ASSOCIATED(EQUATIONS_SET)) THEN - IF(ASSOCIATED(EQUATIONS_SET%ANALYTIC)) THEN - IF(EQUATIONS_SET%ANALYTIC%ANALYTIC_FUNCTION_TYPE==EQUATIONS_SET_INCOMP_ELAST_DARCY_ANALYTIC_DARCY)THEN - !call only analytic update and DO NOT call the other standard pre-solve routines as the mesh does not require deformation - CALL Darcy_PreSolveUpdateAnalyticValues(CONTROL_LOOP,SOLVER_ALE_DARCY,err,error,*999) - ENDIF - ELSE - !default - !--- 1.1 Transfer solid displacement to Darcy geometric field - CALL Darcy_PreSolveGetSolidDisplacement(CONTROL_LOOP,SOLVER_ALE_DARCY,err,error,*999) - - !--- 1.2 Update the mesh (and calculate boundary velocities) PRIOR to solving for new material properties - CALL DARCY_EQUATION_PRE_SOLVE_ALE_UPDATE_MESH(CONTROL_LOOP,SOLVER_ALE_DARCY,err,error,*999) - - ! ! ! !i n p r i n c i p l e c u r r e n t l y d o n o t n e e d t o u p d a t e B C s - ! ! ! !unless: - ! ! ! !--- 1.3 Apply both normal and moving mesh boundary conditions, OR: - ! ! ! !--- 1.3 (Iteratively) Render the boundary impermeable (ellipsoid, general curvilinear mesh) - ! ! ! CALL Darcy_PreSolveUpdateBoundaryConditions(CONTROL_LOOP,SOLVER_ALE_DARCY,err,error,*999) - ENDIF - ENDIF - ENDIF - END IF - CASE(PROBLEM_ALE_DARCY_SUBTYPE,PROBLEM_PGM_DARCY_SUBTYPE,PROBLEM_STANDARD_ELASTICITY_DARCY_SUBTYPE, & - & PROBLEM_PGM_ELASTICITY_DARCY_SUBTYPE,PROBLEM_PGM_TRANSIENT_DARCY_SUBTYPE, & - & PROBLEM_QUASISTATIC_ELAST_TRANS_DARCY_MAT_SOLVE_SUBTYPE) - - IF((CONTROL_LOOP%LOOP_TYPE==PROBLEM_CONTROL_SIMPLE_TYPE.OR.CONTROL_LOOP%LOOP_TYPE==PROBLEM_CONTROL_TIME_LOOP_TYPE) & - & .AND.SOLVER%GLOBAL_NUMBER==SOLVER_NUMBER_MAT_PROPERTIES) THEN - !--- flags to ensure once-per-time-step output in conjunction with diagnostics - idebug1 = .TRUE. - idebug2 = .TRUE. - idebug3 = .TRUE. - - NULLIFY(SOLVER_ALE_DARCY) - CALL SOLVERS_SOLVER_GET(SOLVER%SOLVERS,SOLVER_NUMBER_DARCY,SOLVER_ALE_DARCY,err,error,*999) - EQUATIONS=>SOLVER_ALE_DARCY%SOLVER_equations%SOLVER_MAPPING%EQUATIONS_SET_TO_SOLVER_MAP(1)%EQUATIONS - IF(ASSOCIATED(EQUATIONS)) THEN - EQUATIONS_SET=>equations%equationsSet - IF(ASSOCIATED(EQUATIONS_SET)) THEN - IF(ASSOCIATED(EQUATIONS_SET%ANALYTIC)) THEN - IF(EQUATIONS_SET%ANALYTIC%ANALYTIC_FUNCTION_TYPE==EQUATIONS_SET_INCOMP_ELAST_DARCY_ANALYTIC_DARCY)THEN - !call only analytic update and DO NOT call the other standard pre-solve routines as the mesh does not require deformation - CALL Darcy_PreSolveUpdateAnalyticValues(CONTROL_LOOP,SOLVER_ALE_DARCY,err,error,*999) - ENDIF - ELSE - !default - !--- 1.1 Transfer solid displacement to Darcy geometric field - CALL Darcy_PreSolveGetSolidDisplacement(CONTROL_LOOP,SOLVER_ALE_DARCY,err,error,*999) - - !--- 1.2 Update the mesh (and calculate boundary velocities) PRIOR to solving for new material properties - CALL DARCY_EQUATION_PRE_SOLVE_ALE_UPDATE_MESH(CONTROL_LOOP,SOLVER_ALE_DARCY,err,error,*999) - - ! ! ! !i n p r i n c i p l e c u r r e n t l y d o n o t n e e d t o u p d a t e B C s - ! ! ! !--- 1.3 Apply both normal and moving mesh boundary conditions - ! ! ! CALL Darcy_PreSolveUpdateBoundaryConditions(CONTROL_LOOP,SOLVER_ALE_DARCY,err,error,*999) - ENDIF - ENDIF - ENDIF - ELSE IF((CONTROL_LOOP%LOOP_TYPE==PROBLEM_CONTROL_SIMPLE_TYPE.OR. & - & CONTROL_LOOP%LOOP_TYPE==PROBLEM_CONTROL_TIME_LOOP_TYPE).AND.SOLVER%GLOBAL_NUMBER==SOLVER_NUMBER_DARCY) THEN -! ! ! !n o t f o r n o w ! ! ! -! ! ! !--- 2.1 Update the material field -! ! ! CALL Darcy_PreSolveUpdateMatrixProperties(CONTROL_LOOP,SOLVER,err,error,*999) - END IF - CASE DEFAULT - localError="Problem subtype "//TRIM(NumberToVString(CONTROL_LOOP%PROBLEM%SPECIFICATION(3),"*",err,error))// & - & " is not valid for a Darcy fluid type of a fluid mechanics problem class." - CALL FlagError(localError,err,error,*999) - END SELECT - ELSE - CALL FlagError("Problem is not associated.",err,error,*999) - ENDIF - ELSE - CALL FlagError("Solver is not associated.",err,error,*999) - ENDIF - ELSE - CALL FlagError("Control loop is not associated.",err,error,*999) - ENDIF - - EXITS("DARCY_EQUATION_PRE_SOLVE") - RETURN -999 ERRORSEXITS("DARCY_EQUATION_PRE_SOLVE",err,error) - RETURN 1 - END SUBROUTINE DARCY_EQUATION_PRE_SOLVE - - ! - !================================================================================================================================ - ! - - SUBROUTINE DARCY_CONTROL_TIME_LOOP_PRE_LOOP(CONTROL_LOOP,err,error,*) - - !Argument variables - TYPE(CONTROL_LOOP_TYPE), POINTER :: CONTROL_LOOP !=CONTROL_LOOP_PROGRESS_OUTPUT) THEN - CALL WRITE_STRING(GENERAL_OUTPUT_TYPE,'== Storing reference data',err,error,*999) - ENDIF - CALL Darcy_PreSolveStoreReferenceData(CONTROL_LOOP,SOLVER_DARCY,err,error,*999) - ENDIF - - !Store data of previous time step (mesh position); executed once per time step before subiteration - IF(CONTROL_LOOP%outputType>=CONTROL_LOOP_PROGRESS_OUTPUT) THEN - CALL WRITE_STRING(GENERAL_OUTPUT_TYPE,'== Storing previous data',err,error,*999) - ENDIF - CALL Darcy_PreSolveStorePreviousData(CONTROL_LOOP,SOLVER_DARCY,err,error,*999) - - EXITS("DARCY_CONTROL_TIME_LOOP_PRE_LOOP") - RETURN -999 ERRORSEXITS("DARCY_CONTROL_TIME_LOOP_PRE_LOOP",err,error) - RETURN 1 - END SUBROUTINE DARCY_CONTROL_TIME_LOOP_PRE_LOOP - - ! - !================================================================================================================================ - ! - - !>Store some reference data for ALE Darcy problem - SUBROUTINE Darcy_PreSolveStoreReferenceData(CONTROL_LOOP,SOLVER,err,error,*) - - !Argument variables - TYPE(CONTROL_LOOP_TYPE), POINTER :: CONTROL_LOOP !SOLVER%SOLVER_EQUATIONS - IF(ASSOCIATED(SOLVER_EQUATIONS)) THEN - SOLVER_MAPPING=>SOLVER_equations%SOLVER_MAPPING - IF(ASSOCIATED(SOLVER_MAPPING)) THEN - DO equations_set_idx=1,SOLVER_MAPPING%NUMBER_OF_EQUATIONS_SETS - EQUATIONS_SET=>SOLVER_MAPPING%EQUATIONS_SETS(equations_set_idx)%ptr - IF(ASSOCIATED(EQUATIONS_SET)) THEN - IF(.NOT.ALLOCATED(EQUATIONS_SET%SPECIFICATION)) THEN - CALL FlagError("Equations set specification is not allocated.",err,error,*999) - ELSE IF(SIZE(EQUATIONS_SET%SPECIFICATION,1)/=3) THEN - CALL FlagError("Equations set specification must have three entries for a Darcy type equations set.", & - & err,error,*999) - END IF - SELECT CASE(EQUATIONS_SET%SPECIFICATION(3)) - CASE(EQUATIONS_SET_STANDARD_DARCY_SUBTYPE) - ! do nothing - CASE(EQUATIONS_SET_QUASISTATIC_DARCY_SUBTYPE) - ! do nothing - CASE(EQUATIONS_SET_TRANSIENT_DARCY_SUBTYPE) - ! do nothing - CASE(EQUATIONS_SET_ALE_DARCY_SUBTYPE,EQUATIONS_SET_INCOMPRESSIBLE_FINITE_ELASTICITY_DARCY_SUBTYPE, & - & EQUATIONS_SET_TRANSIENT_ALE_DARCY_SUBTYPE,EQUATIONS_SET_ELASTICITY_DARCY_INRIA_MODEL_SUBTYPE, & - & EQUATIONS_SET_INCOMPRESSIBLE_ELASTICITY_DRIVEN_DARCY_SUBTYPE, & - & EQUATIONS_SET_INCOMPRESSIBLE_ELAST_MULTI_COMP_DARCY_SUBTYPE) - dependentField=>EQUATIONS_SET%DEPENDENT%DEPENDENT_FIELD - geometricField=>EQUATIONS_SET%GEOMETRY%GEOMETRIC_FIELD - IF(ASSOCIATED(dependentField).AND.ASSOCIATED(geometricField)) THEN - !--- Store the initial (= reference) GEOMETRY field values - ALPHA = 1.0_DP - CALL FIELD_PARAMETER_SETS_COPY(geometricField,FIELD_U_VARIABLE_TYPE, & - & FIELD_VALUES_SET_TYPE,FIELD_INITIAL_VALUES_SET_TYPE,ALPHA,err,error,*999) - NULLIFY(vectorEquations) - CALL Equations_VectorEquationsGet(EQUATIONS_SET%equations,vectorEquations,err,error,*999) - vectorMapping=>vectorEquations%vectorMapping - IF(ASSOCIATED(vectorMapping)) THEN - - SELECT CASE(EQUATIONS_SET%SPECIFICATION(3)) - CASE(EQUATIONS_SET_ALE_DARCY_SUBTYPE,EQUATIONS_SET_INCOMPRESSIBLE_FINITE_ELASTICITY_DARCY_SUBTYPE) - FIELD_VARIABLE=>vectorMapping%linearMapping%equationsMatrixToVarMaps(1)%VARIABLE - ! '1' associated with linear matrix - CASE(EQUATIONS_SET_TRANSIENT_ALE_DARCY_SUBTYPE,EQUATIONS_SET_ELASTICITY_DARCY_INRIA_MODEL_SUBTYPE, & - & EQUATIONS_SET_INCOMPRESSIBLE_ELASTICITY_DRIVEN_DARCY_SUBTYPE, & - & EQUATIONS_SET_INCOMPRESSIBLE_ELAST_MULTI_COMP_DARCY_SUBTYPE) - FIELD_VARIABLE=>vectorMapping%dynamicMapping%equationsMatrixToVarMaps(1)%VARIABLE - END SELECT - - IF(ASSOCIATED(FIELD_VARIABLE)) THEN - FIELD_VAR_TYPE=FIELD_VARIABLE%VARIABLE_TYPE - !--- Store the initial DEPENDENT field values - ALPHA = 1.0_DP - CALL FIELD_PARAMETER_SETS_COPY(dependentField,FIELD_VAR_TYPE, & - & FIELD_VALUES_SET_TYPE,FIELD_INITIAL_VALUES_SET_TYPE,ALPHA,err,error,*999) - - IF(DIAGNOSTICS1) THEN - NULLIFY(INITIAL_VALUES) - CALL FIELD_PARAMETER_SET_DATA_GET(dependentField,FIELD_VAR_TYPE, & - & FIELD_INITIAL_VALUES_SET_TYPE,INITIAL_VALUES,err,error,*999) - NDOFS_TO_PRINT = SIZE(INITIAL_VALUES,1) - CALL WRITE_STRING_VECTOR(DIAGNOSTIC_OUTPUT_TYPE,1,1,NDOFS_TO_PRINT,NDOFS_TO_PRINT,NDOFS_TO_PRINT,& - & INITIAL_VALUES, & - & '(" dependentField,FIELD_U_VARIABLE_TYPE,FIELD_INITIAL_VALUES_SET_TYPE = ",4(X,E13.6))', & - & '4(4(X,E13.6))',err,error,*999) - CALL FIELD_PARAMETER_SET_DATA_RESTORE(dependentField,FIELD_VAR_TYPE, & - & FIELD_INITIAL_VALUES_SET_TYPE,INITIAL_VALUES,err,error,*999) - ENDIF - ELSE - CALL FlagError("FIELD_VAR_TYPE is not associated.",err,error,*999) - ENDIF - ELSE - CALL FlagError("vectorMapping is not associated.",err,error,*999) - ENDIF - ELSE - CALL FlagError("Dependent field and / or geometric field is / are not associated.",err,error,*999) - ENDIF - CASE DEFAULT - localError="Equations set subtype " & - & //TRIM(NumberToVString(EQUATIONS_SET%SPECIFICATION(3),"*",err,error))// & - & " is not valid for a Darcy equation fluid type of a fluid mechanics problem class." - CALL FlagError(localError,err,error,*999) - END SELECT - ELSE - CALL FlagError("Equations set is not associated.",err,error,*999) - ENDIF - ENDDO - ELSE - CALL FlagError("Solver mapping is not associated.",err,error,*999) - ENDIF - ELSE - CALL FlagError("Solver equations is not associated.",err,error,*999) - ENDIF - CASE DEFAULT - localError="Problem subtype "//TRIM(NumberToVString(CONTROL_LOOP%PROBLEM%SPECIFICATION(3),"*",err,error))// & - & " is not valid for a Darcy equation fluid type of a fluid mechanics problem class." - CALL FlagError(localError,err,error,*999) - END SELECT - ELSE - CALL FlagError("Problem is not associated.",err,error,*999) - ENDIF - ELSE - ! do nothing - ENDIF - ELSE - CALL FlagError("Solver is not associated.",err,error,*999) - ENDIF - ELSE - CALL FlagError("Control loop is not associated.",err,error,*999) - ENDIF - - - EXITS("Darcy_PreSolveStoreReferenceData") - RETURN -999 ERRORSEXITS("Darcy_PreSolveStoreReferenceData",err,error) - RETURN 1 - - END SUBROUTINE Darcy_PreSolveStoreReferenceData - - ! - !================================================================================================================================ - ! - - !>Store data of previous time step (mesh position) for ALE Darcy problem - SUBROUTINE Darcy_PreSolveStorePreviousData(CONTROL_LOOP,SOLVER,err,error,*) - - !Argument variables - TYPE(CONTROL_LOOP_TYPE), POINTER :: CONTROL_LOOP !SOLVER%SOLVER_EQUATIONS - IF(ASSOCIATED(SOLVER_EQUATIONS)) THEN - SOLVER_MAPPING=>SOLVER_equations%SOLVER_MAPPING - IF(ASSOCIATED(SOLVER_MAPPING)) THEN - EQUATIONS_SET=>SOLVER_MAPPING%EQUATIONS_SETS(1)%ptr - IF(ASSOCIATED(EQUATIONS_SET)) THEN - IF(.NOT.ALLOCATED(EQUATIONS_SET%SPECIFICATION)) THEN - CALL FlagError("Equations set specification is not allocated.",err,error,*999) - ELSE IF(SIZE(EQUATIONS_SET%SPECIFICATION,1)/=3) THEN - CALL FlagError("Equations set specification must have three entries for a Darcy type equations set.", & - & err,error,*999) - END IF - SELECT CASE(EQUATIONS_SET%SPECIFICATION(3)) - CASE(EQUATIONS_SET_STANDARD_DARCY_SUBTYPE) - ! do nothing - CASE(EQUATIONS_SET_QUASISTATIC_DARCY_SUBTYPE) - ! do nothing - CASE(EQUATIONS_SET_TRANSIENT_DARCY_SUBTYPE) - ! do nothing - CASE(EQUATIONS_SET_ALE_DARCY_SUBTYPE,EQUATIONS_SET_INCOMPRESSIBLE_FINITE_ELASTICITY_DARCY_SUBTYPE, & - & EQUATIONS_SET_TRANSIENT_ALE_DARCY_SUBTYPE,EQUATIONS_SET_ELASTICITY_DARCY_INRIA_MODEL_SUBTYPE, & - & EQUATIONS_SET_INCOMPRESSIBLE_ELASTICITY_DRIVEN_DARCY_SUBTYPE, & - & EQUATIONS_SET_INCOMPRESSIBLE_ELAST_MULTI_COMP_DARCY_SUBTYPE) - geometricField=>EQUATIONS_SET%GEOMETRY%GEOMETRIC_FIELD - IF(ASSOCIATED(geometricField)) THEN - !--- Store the GEOMETRY field values of the previous time step - ALPHA = 1.0_DP - CALL FIELD_PARAMETER_SETS_COPY(geometricField,FIELD_U_VARIABLE_TYPE, & - & FIELD_VALUES_SET_TYPE,FIELD_PREVIOUS_VALUES_SET_TYPE,ALPHA,err,error,*999) - ELSE - CALL FlagError("Dependent field and / or geometric field is / are not associated.",err,error,*999) - ENDIF - CASE DEFAULT - localError="Equations set subtype " & - & //TRIM(NumberToVString(EQUATIONS_SET%SPECIFICATION(3),"*",err,error))// & - & " is not valid for a Darcy equation fluid type of a fluid mechanics problem class." - CALL FlagError(localError,err,error,*999) - END SELECT - ELSE - CALL FlagError("Equations set is not associated.",err,error,*999) - ENDIF - ELSE - CALL FlagError("Solver mapping is not associated.",err,error,*999) - ENDIF - ELSE - CALL FlagError("Solver equations is not associated.",err,error,*999) - ENDIF - CASE DEFAULT - localError="Problem subtype "//TRIM(NumberToVString(CONTROL_LOOP%PROBLEM%SPECIFICATION(3),"*",err,error))// & - & " is not valid for a Darcy equation fluid type of a fluid mechanics problem class." - CALL FlagError(localError,err,error,*999) - END SELECT - ELSE - CALL FlagError("Problem is not associated.",err,error,*999) - ENDIF - ELSE - ! do nothing - ENDIF - ELSE - CALL FlagError("Solver is not associated.",err,error,*999) - ENDIF - ELSE - CALL FlagError("Control loop is not associated.",err,error,*999) - ENDIF - - EXITS("Darcy_PreSolveStorePreviousData") - RETURN -999 ERRORSEXITS("Darcy_PreSolveStorePreviousData",err,error) - RETURN 1 - - END SUBROUTINE Darcy_PreSolveStorePreviousData - - ! - !================================================================================================================================ - ! - - !>Update mesh position and velocity for ALE Darcy problem - SUBROUTINE DARCY_EQUATION_PRE_SOLVE_ALE_UPDATE_MESH(CONTROL_LOOP,SOLVER,err,error,*) - - !Argument variables - TYPE(CONTROL_LOOP_TYPE), POINTER :: CONTROL_LOOP !CONTROL_LOOP - DO loop_idx=1,CONTROL_LOOP%CONTROL_LOOP_LEVEL - IF(CONTROL_TIME_LOOP%LOOP_TYPE==PROBLEM_CONTROL_TIME_LOOP_TYPE) THEN - CALL CONTROL_LOOP_CURRENT_TIMES_GET(CONTROL_TIME_LOOP,CURRENT_TIME,TIME_INCREMENT,err,error,*999) - EXIT - ENDIF - IF (ASSOCIATED(CONTROL_LOOP%PARENT_LOOP)) THEN - CONTROL_TIME_LOOP=>CONTROL_TIME_LOOP%PARENT_LOOP - ELSE - CALL FlagError("Could not find a time control loop.",err,error,*999) - ENDIF - ENDDO - - IF(ASSOCIATED(SOLVER)) THEN - IF(ASSOCIATED(CONTROL_LOOP%PROBLEM)) THEN - IF(.NOT.ALLOCATED(CONTROL_LOOP%PROBLEM%SPECIFICATION)) THEN - CALL FlagError("Problem specification is not allocated.",err,error,*999) - ELSE IF(SIZE(CONTROL_LOOP%PROBLEM%SPECIFICATION,1)<3) THEN - CALL FlagError("Problem specification must have three entries for a Darcy equation problem.",err,error,*999) - END IF - PROBLEM_SUBTYPE=CONTROL_LOOP%PROBLEM%SPECIFICATION(3) - SELECT CASE(PROBLEM_SUBTYPE) - CASE(PROBLEM_STANDARD_DARCY_SUBTYPE) - ! do nothing - CASE(PROBLEM_QUASISTATIC_DARCY_SUBTYPE) - ! do nothing - CASE(PROBLEM_TRANSIENT_DARCY_SUBTYPE) - ! do nothing - CASE(PROBLEM_ALE_DARCY_SUBTYPE,PROBLEM_STANDARD_ELASTICITY_DARCY_SUBTYPE,PROBLEM_PGM_DARCY_SUBTYPE, & - & PROBLEM_PGM_ELASTICITY_DARCY_SUBTYPE,PROBLEM_PGM_TRANSIENT_DARCY_SUBTYPE, & - & PROBLEM_QUASISTATIC_ELASTICITY_TRANSIENT_DARCY_SUBTYPE,PROBLEM_QUASISTATIC_ELAST_TRANS_DARCY_MAT_SOLVE_SUBTYPE) - IF(SOLVER%GLOBAL_NUMBER==SOLVER_NUMBER_DARCY) THEN - SOLVER_EQUATIONS=>SOLVER%SOLVER_EQUATIONS - IF(ASSOCIATED(SOLVER_EQUATIONS)) THEN - SOLVER_MAPPING=>SOLVER_equations%SOLVER_MAPPING - IF(ASSOCIATED(SOLVER_MAPPING)) THEN - EQUATIONS_SET=>SOLVER_MAPPING%EQUATIONS_SETS(1)%ptr - IF(ASSOCIATED(EQUATIONS_SET)) THEN - IF(.NOT.ALLOCATED(EQUATIONS_SET%SPECIFICATION)) THEN - CALL FlagError("Equations set specification is not allocated.",err,error,*999) - ELSE IF(SIZE(EQUATIONS_SET%SPECIFICATION,1)/=3) THEN - CALL FlagError("Equations set specification must have three entries for a Darcy type equations set.", & - & err,error,*999) - END IF - SELECT CASE(EQUATIONS_SET%SPECIFICATION(3)) - CASE(EQUATIONS_SET_STANDARD_DARCY_SUBTYPE) - ! do nothing - CASE(EQUATIONS_SET_QUASISTATIC_DARCY_SUBTYPE) - ! do nothing - CASE(EQUATIONS_SET_ALE_DARCY_SUBTYPE,EQUATIONS_SET_INCOMPRESSIBLE_FINITE_ELASTICITY_DARCY_SUBTYPE, & - & EQUATIONS_SET_TRANSIENT_ALE_DARCY_SUBTYPE,EQUATIONS_SET_ELASTICITY_DARCY_INRIA_MODEL_SUBTYPE, & - & EQUATIONS_SET_INCOMPRESSIBLE_ELASTICITY_DRIVEN_DARCY_SUBTYPE, & - & EQUATIONS_SET_INCOMPRESSIBLE_ELAST_MULTI_COMP_DARCY_SUBTYPE) - IF(SOLVER%outputType>=SOLVER_PROGRESS_OUTPUT) THEN - CALL WRITE_STRING(GENERAL_OUTPUT_TYPE,"Darcy update mesh ... ",err,error,*999) - ENDIF - geometricField=>EQUATIONS_SET%GEOMETRY%GEOMETRIC_FIELD - IF(ASSOCIATED(geometricField)) THEN - !--- First, get pointer to mesh displacement values - NULLIFY(MESH_DISPLACEMENT_VALUES) - CALL FIELD_PARAMETER_SET_DATA_GET(geometricField,FIELD_U_VARIABLE_TYPE, & - & FIELD_MESH_DISPLACEMENT_SET_TYPE,MESH_DISPLACEMENT_VALUES,err,error,*999) - IF(DIAGNOSTICS1) THEN - NDOFS_TO_PRINT = SIZE(MESH_DISPLACEMENT_VALUES,1) - CALL WRITE_STRING_VECTOR(DIAGNOSTIC_OUTPUT_TYPE,1,1,NDOFS_TO_PRINT,NDOFS_TO_PRINT,NDOFS_TO_PRINT,& - & MESH_DISPLACEMENT_VALUES,'(" MESH_DISPLACEMENT_VALUES = ",3(X,E13.6))','3(3(X,E13.6))', & - & err,error,*999) - ENDIF - - NUMBER_OF_DOFS = geometricField%VARIABLE_TYPE_MAP(FIELD_U_VARIABLE_TYPE)%ptr%NUMBER_OF_DOFS - - IF(PROBLEM_SUBTYPE==PROBLEM_QUASISTATIC_ELASTICITY_TRANSIENT_DARCY_SUBTYPE & - & .OR. PROBLEM_SUBTYPE==PROBLEM_QUASISTATIC_ELAST_TRANS_DARCY_MAT_SOLVE_SUBTYPE & - & .OR. PROBLEM_SUBTYPE==PROBLEM_STANDARD_ELASTICITY_DARCY_SUBTYPE) THEN - !--- Don't update geometric field here, this is done in - ! darcy_equation_pre_solve_get_solid_displacement for these problems, but - ! needs to be made consistent between the different problem types - ELSE - !--- Second, update geometric field - DO dof_number=1,NUMBER_OF_DOFS - CALL FIELD_PARAMETER_SET_ADD_LOCAL_DOF(geometricField, & - & FIELD_U_VARIABLE_TYPE,FIELD_VALUES_SET_TYPE,dof_number, & - & MESH_DISPLACEMENT_VALUES(dof_number), & - & err,error,*999) - END DO - CALL FIELD_PARAMETER_SET_UPDATE_START(geometricField, & - & FIELD_U_VARIABLE_TYPE, FIELD_VALUES_SET_TYPE,err,error,*999) - CALL FIELD_PARAMETER_SET_UPDATE_FINISH(geometricField, & - & FIELD_U_VARIABLE_TYPE, FIELD_VALUES_SET_TYPE,err,error,*999) - ENDIF - - !--- Third, use displacement values to calculate velocity values - ALPHA=1.0_DP/TIME_INCREMENT - CALL FIELD_PARAMETER_SETS_COPY(geometricField,FIELD_U_VARIABLE_TYPE, & - & FIELD_MESH_DISPLACEMENT_SET_TYPE,FIELD_MESH_VELOCITY_SET_TYPE,ALPHA,err,error,*999) - CALL FIELD_PARAMETER_SET_DATA_RESTORE(geometricField,FIELD_U_VARIABLE_TYPE, & - & FIELD_MESH_DISPLACEMENT_SET_TYPE,MESH_DISPLACEMENT_VALUES,err,error,*999) - ELSE - CALL FlagError("Geometric field is not associated.",err,error,*999) - ENDIF - CASE DEFAULT - localError="Equations set subtype " & - & //TRIM(NumberToVString(EQUATIONS_SET%SPECIFICATION(3),"*",err,error))// & - & " is not valid for a Darcy equation fluid type of a fluid mechanics problem class." - CALL FlagError(localError,err,error,*999) - END SELECT - ELSE - CALL FlagError("Equations set is not associated.",err,error,*999) - ENDIF - ELSE - CALL FlagError("Solver mapping is not associated.",err,error,*999) - ENDIF - ELSE - CALL FlagError("Solver equations is not associated.",err,error,*999) - ENDIF - ELSE - ! do nothing - ENDIF - CASE DEFAULT - localError="Problem subtype "//TRIM(NumberToVString(PROBLEM_SUBTYPE,"*",err,error))// & - & " is not valid for a Darcy equation fluid type of a fluid mechanics problem class." - CALL FlagError(localError,err,error,*999) - END SELECT - ELSE - CALL FlagError("Problem is not associated.",err,error,*999) - ENDIF - ELSE - CALL FlagError("Solver is not associated.",err,error,*999) - ENDIF - ELSE - CALL FlagError("Control loop is not associated.",err,error,*999) - ENDIF - - EXITS("DARCY_EQUATION_PRE_SOLVE_ALE_UPDATE_MESH") - RETURN -999 ERRORSEXITS("DARCY_EQUATION_PRE_SOLVE_ALE_UPDATE_MESH",err,error) - RETURN 1 - END SUBROUTINE DARCY_EQUATION_PRE_SOLVE_ALE_UPDATE_MESH - - ! - !================================================================================================================================ - ! - - !>Update boundary conditions for Darcy equation pre solve - SUBROUTINE Darcy_PreSolveUpdateBoundaryConditions(CONTROL_LOOP,SOLVER,err,error,*) - - !Argument variables - TYPE(CONTROL_LOOP_TYPE), POINTER :: CONTROL_LOOP !CONTROL_LOOP - DO loop_idx=1,CONTROL_LOOP%CONTROL_LOOP_LEVEL - IF(CONTROL_TIME_LOOP%LOOP_TYPE==PROBLEM_CONTROL_TIME_LOOP_TYPE) THEN - CALL CONTROL_LOOP_CURRENT_TIMES_GET(CONTROL_TIME_LOOP,CURRENT_TIME,TIME_INCREMENT,err,error,*999) - EXIT - ENDIF - IF (ASSOCIATED(CONTROL_LOOP%PARENT_LOOP)) THEN - CONTROL_TIME_LOOP=>CONTROL_TIME_LOOP%PARENT_LOOP - ELSE - CALL FlagError("Could not find a time control loop.",err,error,*999) - ENDIF - ENDDO - - IF(ASSOCIATED(SOLVER)) THEN - IF(SOLVER%GLOBAL_NUMBER==SOLVER_NUMBER_DARCY) THEN - IF(ASSOCIATED(CONTROL_LOOP%PROBLEM)) THEN - IF(.NOT.ALLOCATED(CONTROL_LOOP%PROBLEM%SPECIFICATION)) THEN - CALL FlagError("Problem specification is not allocated.",err,error,*999) - ELSE IF(SIZE(CONTROL_LOOP%PROBLEM%SPECIFICATION,1)<3) THEN - CALL FlagError("Problem specification must have three entries for a Darcy equation problem.",err,error,*999) - END IF - SELECT CASE(CONTROL_LOOP%PROBLEM%SPECIFICATION(3)) - CASE(PROBLEM_STANDARD_DARCY_SUBTYPE) - ! do nothing - CASE(PROBLEM_QUASISTATIC_DARCY_SUBTYPE) - ! do nothing - CASE(PROBLEM_TRANSIENT_DARCY_SUBTYPE) - ! do nothing - CASE(PROBLEM_ALE_DARCY_SUBTYPE,PROBLEM_PGM_DARCY_SUBTYPE,PROBLEM_STANDARD_ELASTICITY_DARCY_SUBTYPE, & - & PROBLEM_PGM_ELASTICITY_DARCY_SUBTYPE,PROBLEM_PGM_TRANSIENT_DARCY_SUBTYPE, & - & PROBLEM_QUASISTATIC_ELASTICITY_TRANSIENT_DARCY_SUBTYPE,PROBLEM_QUASISTATIC_ELAST_TRANS_DARCY_MAT_SOLVE_SUBTYPE) - SOLVER_EQUATIONS=>SOLVER%SOLVER_EQUATIONS - IF(ASSOCIATED(SOLVER_EQUATIONS)) THEN - SOLVER_MAPPING=>SOLVER_equations%SOLVER_MAPPING - IF(ASSOCIATED(SOLVER_MAPPING)) THEN - EQUATIONS=>SOLVER_MAPPING%EQUATIONS_SET_TO_SOLVER_MAP(1)%EQUATIONS - IF(ASSOCIATED(EQUATIONS)) THEN - EQUATIONS_SET=>equations%equationsSet - IF(ASSOCIATED(EQUATIONS_SET)) THEN - IF(.NOT.ALLOCATED(EQUATIONS_SET%SPECIFICATION)) THEN - CALL FlagError("Equations set specification is not allocated.",err,error,*999) - ELSE IF(SIZE(EQUATIONS_SET%SPECIFICATION,1)/=3) THEN - CALL FlagError("Equations set specification must have three entries for a Darcy type equations set.", & - & err,error,*999) - END IF - SELECT CASE(EQUATIONS_SET%SPECIFICATION(3)) - CASE(EQUATIONS_SET_STANDARD_DARCY_SUBTYPE) - ! do nothing - CASE(EQUATIONS_SET_QUASISTATIC_DARCY_SUBTYPE) - ! do nothing - CASE(EQUATIONS_SET_ALE_DARCY_SUBTYPE,EQUATIONS_SET_INCOMPRESSIBLE_FINITE_ELASTICITY_DARCY_SUBTYPE, & - & EQUATIONS_SET_TRANSIENT_ALE_DARCY_SUBTYPE,EQUATIONS_SET_ELASTICITY_DARCY_INRIA_MODEL_SUBTYPE, & - & EQUATIONS_SET_INCOMPRESSIBLE_ELASTICITY_DRIVEN_DARCY_SUBTYPE, & - & EQUATIONS_SET_INCOMPRESSIBLE_ELAST_MULTI_COMP_DARCY_SUBTYPE) - IF(SOLVER%outputType>=SOLVER_PROGRESS_OUTPUT) THEN - CALL WRITE_STRING(GENERAL_OUTPUT_TYPE,"Darcy update boundary conditions ... ",err,error,*999) - ENDIF - dependentField=>EQUATIONS_SET%DEPENDENT%DEPENDENT_FIELD - geometricField=>EQUATIONS_SET%GEOMETRY%GEOMETRIC_FIELD - IF(ASSOCIATED(dependentField).AND.ASSOCIATED(geometricField)) THEN - BOUNDARY_CONDITIONS=>SOLVER_equations%BOUNDARY_CONDITIONS - IF(ASSOCIATED(BOUNDARY_CONDITIONS)) THEN - vectorMapping=>EQUATIONS_SET%equations%vectorEquations%vectorMapping - IF(ASSOCIATED(vectorMapping)) THEN - - SELECT CASE(EQUATIONS_SET%SPECIFICATION(3)) - CASE(EQUATIONS_SET_ALE_DARCY_SUBTYPE, & - & EQUATIONS_SET_INCOMPRESSIBLE_FINITE_ELASTICITY_DARCY_SUBTYPE) - FIELD_VARIABLE=>vectorMapping%linearMapping%equationsMatrixToVarMaps(1)%VARIABLE - ! '1' associated with linear matrix - CASE(EQUATIONS_SET_TRANSIENT_ALE_DARCY_SUBTYPE, & - & EQUATIONS_SET_ELASTICITY_DARCY_INRIA_MODEL_SUBTYPE, & - & EQUATIONS_SET_INCOMPRESSIBLE_ELASTICITY_DRIVEN_DARCY_SUBTYPE, & - & EQUATIONS_SET_INCOMPRESSIBLE_ELAST_MULTI_COMP_DARCY_SUBTYPE) - FIELD_VARIABLE=>vectorMapping%dynamicMapping%equationsMatrixToVarMaps(1)%VARIABLE - END SELECT - - IF(ASSOCIATED(FIELD_VARIABLE)) THEN - FIELD_VAR_TYPE=FIELD_VARIABLE%VARIABLE_TYPE - - CALL BOUNDARY_CONDITIONS_VARIABLE_GET(BOUNDARY_CONDITIONS,FIELD_VARIABLE, & - & BOUNDARY_CONDITIONS_VARIABLE,err,error,*999) - IF(ASSOCIATED(BOUNDARY_CONDITIONS_VARIABLE)) THEN - NULLIFY(MESH_VELOCITY_VALUES) - CALL FIELD_PARAMETER_SET_DATA_GET(geometricField,FIELD_U_VARIABLE_TYPE, & - & FIELD_MESH_VELOCITY_SET_TYPE,MESH_VELOCITY_VALUES,err,error,*999) - NULLIFY(INITIAL_VALUES) - CALL FIELD_PARAMETER_SET_DATA_GET(dependentField,FIELD_VAR_TYPE, & - & FIELD_INITIAL_VALUES_SET_TYPE,INITIAL_VALUES,err,error,*999) - IF(DIAGNOSTICS1) THEN - NULLIFY( DUMMY_VALUES1 ) - CALL FIELD_PARAMETER_SET_DATA_GET(dependentField,FIELD_VAR_TYPE, & - & FIELD_VALUES_SET_TYPE,DUMMY_VALUES1,err,error,*999) - NDOFS_TO_PRINT = SIZE(DUMMY_VALUES1,1) - CALL WRITE_STRING_VECTOR(DIAGNOSTIC_OUTPUT_TYPE,1,1,NDOFS_TO_PRINT,NDOFS_TO_PRINT, & - & NDOFS_TO_PRINT,DUMMY_VALUES1, & - & '(" dependentField,FIELD_VAR_TYPE,FIELD_VALUES_SET_TYPE (before) = ",4(X,E13.6))', & - & '4(4(X,E13.6))',err,error,*999) - ENDIF - NUMBER_OF_DOFS = dependentField%VARIABLE_TYPE_MAP(FIELD_VAR_TYPE)%ptr%NUMBER_OF_DOFS - DO dof_number=1,NUMBER_OF_DOFS - BOUNDARY_CONDITION_CHECK_VARIABLE=BOUNDARY_CONDITIONS_VARIABLE% & - & CONDITION_TYPES(dof_number) - IF(BOUNDARY_CONDITION_CHECK_VARIABLE==BOUNDARY_CONDITION_MOVED_WALL) THEN - !--- Reset boundary condition to the initial normal-velocity boundary condition - CALL FIELD_PARAMETER_SET_UPDATE_LOCAL_DOF(dependentField, & - & FIELD_VAR_TYPE,FIELD_VALUES_SET_TYPE,dof_number, & - & INITIAL_VALUES(dof_number),err,error,*999) - !--- Add the velocity of the moving boundary on top of the initial boundary condition - !! === If we solve in terms of Darcy flow vector, then do not add mesh velocity === !! - !! === The BC is kept to the initial BC, for instance: null-flux === !! -! CALL FIELD_PARAMETER_SET_ADD_LOCAL_DOF(dependentField, & -! & FIELD_VAR_TYPE,FIELD_VALUES_SET_TYPE,dof_number, & -! & MESH_VELOCITY_VALUES(dof_number),err,error,*999) -! ! dependent field ( V_u, V_v, V_w, P_p ) -! ! MESH_VELOCITY_VALUES ( V_u, V_v, V_w ) - - ELSE IF( BOUNDARY_CONDITION_CHECK_VARIABLE==BOUNDARY_CONDITION_FIXED .AND. & - & EQUATIONS_SET%SPECIFICATION(3)==EQUATIONS_SET_ELASTICITY_DARCY_INRIA_MODEL_SUBTYPE) THEN - !\ToDo: Check component number; this way we can also apply it to velocity - !--- Set the time-dependent pressure BC - PRESSURE = INITIAL_VALUES(dof_number) * (1.0_DP - exp(- CURRENT_TIME**2.0_DP / 0.25_DP)) - - CALL FIELD_PARAMETER_SET_UPDATE_LOCAL_DOF(dependentField, & - & FIELD_VAR_TYPE,FIELD_VALUES_SET_TYPE,dof_number, & - & PRESSURE,err,error,*999) - ELSE - ! do nothing - END IF - END DO - CALL FIELD_PARAMETER_SET_UPDATE_START(dependentField, & - & FIELD_VAR_TYPE, FIELD_VALUES_SET_TYPE,err,error,*999) - CALL FIELD_PARAMETER_SET_UPDATE_FINISH(dependentField, & - & FIELD_VAR_TYPE, FIELD_VALUES_SET_TYPE,err,error,*999) - IF(DIAGNOSTICS1) THEN - NDOFS_TO_PRINT = SIZE(MESH_VELOCITY_VALUES,1) - CALL WRITE_STRING_VECTOR(DIAGNOSTIC_OUTPUT_TYPE,1,1,NDOFS_TO_PRINT,NDOFS_TO_PRINT, & - & NDOFS_TO_PRINT,MESH_VELOCITY_VALUES, & - & '(" MESH_VELOCITY_VALUES = ",4(X,E13.6))','4(4(X,E13.6))',err,error,*999) - CALL WRITE_STRING(DIAGNOSTIC_OUTPUT_TYPE," ",err,error,*999) - ! - NDOFS_TO_PRINT = SIZE(INITIAL_VALUES,1) - CALL WRITE_STRING_VECTOR(DIAGNOSTIC_OUTPUT_TYPE,1,1,NDOFS_TO_PRINT,NDOFS_TO_PRINT, & - & NDOFS_TO_PRINT,INITIAL_VALUES, & - & '(" INITIAL_VALUES = ",4(X,E13.6))', & - & '4(4(X,E13.6))',err,error,*999) - ! - NULLIFY( DUMMY_VALUES1 ) - CALL FIELD_PARAMETER_SET_DATA_GET(dependentField,FIELD_VAR_TYPE, & - & FIELD_VALUES_SET_TYPE,DUMMY_VALUES1,err,error,*999) - NDOFS_TO_PRINT = SIZE(DUMMY_VALUES1,1) - CALL WRITE_STRING_VECTOR(DIAGNOSTIC_OUTPUT_TYPE,1,1,NDOFS_TO_PRINT,NDOFS_TO_PRINT, & - & NDOFS_TO_PRINT,DUMMY_VALUES1, & - & '(" dependentField,FIELD_VAR_TYPE,FIELD_VALUES_SET_TYPE (after) = ",4(X,E13.6))', & - & '4(4(X,E13.6))',err,error,*999) - CALL FIELD_PARAMETER_SET_DATA_RESTORE(dependentField,FIELD_VAR_TYPE, & - & FIELD_VALUES_SET_TYPE,DUMMY_VALUES1,err,error,*999) - ENDIF - CALL FIELD_PARAMETER_SET_DATA_RESTORE(geometricField,FIELD_U_VARIABLE_TYPE, & - & FIELD_MESH_VELOCITY_SET_TYPE,MESH_VELOCITY_VALUES,err,error,*999) - CALL FIELD_PARAMETER_SET_DATA_RESTORE(dependentField,FIELD_VAR_TYPE, & - & FIELD_INITIAL_VALUES_SET_TYPE,INITIAL_VALUES,err,error,*999) - ELSE - CALL FlagError("Boundary condition variable is not associated.",err,error,*999) - END IF - - CALL FIELD_PARAMETER_SET_UPDATE_START(EQUATIONS_SET%DEPENDENT%DEPENDENT_FIELD,FIELD_VAR_TYPE, & - & FIELD_VALUES_SET_TYPE,err,error,*999) - CALL FIELD_PARAMETER_SET_UPDATE_FINISH(EQUATIONS_SET%DEPENDENT%DEPENDENT_FIELD,FIELD_VAR_TYPE, & - & FIELD_VALUES_SET_TYPE,err,error,*999) - - ELSE - CALL FlagError("FIELD_VAR_TYPE is not associated.",err,error,*999) - ENDIF - ELSE - CALL FlagError("vectorMapping is not associated.",err,error,*999) - ENDIF - ELSE - CALL FlagError("Boundary conditions are not associated.",err,error,*999) - END IF - ELSE - CALL FlagError("Dependent field and/or geometric field is/are not associated.",err,error,*999) - END IF - CASE DEFAULT - localError="Equations set subtype " & - & //TRIM(NumberToVString(EQUATIONS_SET%SPECIFICATION(3),"*",err,error))// & - & " is not valid for a Darcy equation fluid type of a fluid mechanics problem class." - CALL FlagError(localError,err,error,*999) - END SELECT - ELSE - CALL FlagError("Equations set is not associated.",err,error,*999) - END IF - ELSE - CALL FlagError("Equations are not associated.",err,error,*999) - END IF - ELSE - CALL FlagError("Solver mapping is not associated.",err,error,*999) - ENDIF - ELSE - CALL FlagError("Solver equations are not associated.",err,error,*999) - END IF - CASE DEFAULT - localError="Problem subtype "//TRIM(NumberToVString(CONTROL_LOOP%PROBLEM%SPECIFICATION(3),"*",err,error))// & - & " is not valid for a Darcy equation fluid type of a fluid mechanics problem class." - CALL FlagError(localError,err,error,*999) - END SELECT - ELSE - CALL FlagError("Problem is not associated.",err,error,*999) - ENDIF - ELSE - ! do nothing - ENDIF - ELSE - CALL FlagError("Solver is not associated.",err,error,*999) - ENDIF - ELSE - CALL FlagError("Control loop is not associated.",err,error,*999) - ENDIF - - EXITS("Darcy_PreSolveUpdateBoundaryConditions") - RETURN -999 ERRORS("Darcy_PreSolveUpdateBoundaryConditions",err,error) - EXITS("Darcy_PreSolveUpdateBoundaryConditions") - RETURN 1 - - END SUBROUTINE Darcy_PreSolveUpdateBoundaryConditions - - ! - !================================================================================================================================ - ! - - !>Update materials field for ALE Darcy problem - SUBROUTINE Darcy_PreSolveUpdateMatrixProperties(CONTROL_LOOP,SOLVER,err,error,*) - - !Argument variables - TYPE(CONTROL_LOOP_TYPE), POINTER :: CONTROL_LOOP !=SOLVER_PROGRESS_OUTPUT) THEN - CALL WRITE_STRING(GENERAL_OUTPUT_TYPE,"Darcy update materials ... ",err,error,*999) - ENDIF - CALL SOLVERS_SOLVER_GET(SOLVER%SOLVERS,SOLVER_NUMBER_MAT_PROPERTIES,SOLVER_MAT_PROPERTIES,err,error,*999) - SOLVER_EQUATIONS_MAT_PROPERTIES=>SOLVER_MAT_PROPERTIES%SOLVER_EQUATIONS - IF(ASSOCIATED(SOLVER_EQUATIONS_MAT_PROPERTIES)) THEN - SOLVER_MAPPING_MAT_PROPERTIES=>SOLVER_EQUATIONS_MAT_PROPERTIES%SOLVER_MAPPING - IF(ASSOCIATED(SOLVER_MAPPING_MAT_PROPERTIES)) THEN - EQUATIONS_SET_MAT_PROPERTIES=>SOLVER_MAPPING_MAT_PROPERTIES%EQUATIONS_SETS(1)%ptr - IF(ASSOCIATED(EQUATIONS_SET_MAT_PROPERTIES)) THEN - DEPENDENT_FIELD_MAT_PROPERTIES=>EQUATIONS_SET_MAT_PROPERTIES%DEPENDENT%DEPENDENT_FIELD - IF(ASSOCIATED(DEPENDENT_FIELD_MAT_PROPERTIES)) THEN - CALL FIELD_NUMBER_OF_COMPONENTS_GET(DEPENDENT_FIELD_MAT_PROPERTIES, & - & FIELD_U_VARIABLE_TYPE,NUMBER_OF_COMPONENTS_DEPENDENT_FIELD_MAT_PROPERTIES,err,error,*999) - ELSE - CALL FlagError("DEPENDENT_FIELD_MAT_PROPERTIES is not associated.",err,error,*999) - END IF - ELSE - CALL FlagError("Galerkin Projection equations set is not associated.",err,error,*999) - END IF - ELSE - CALL FlagError("Galerkin Projection solver mapping is not associated.",err,error,*999) - END IF - ELSE - CALL FlagError("Galerkin Projection solver equations are not associated.",err,error,*999) - END IF - - !--- Get the materials field for the ALE Darcy equations - CALL SOLVERS_SOLVER_GET(SOLVER%SOLVERS,SOLVER_NUMBER_DARCY,SOLVER_ALE_DARCY,err,error,*999) - SOLVER_EQUATIONS_ALE_DARCY=>SOLVER_ALE_DARCY%SOLVER_EQUATIONS - IF(ASSOCIATED(SOLVER_EQUATIONS_ALE_DARCY)) THEN - SOLVER_MAPPING_ALE_DARCY=>SOLVER_EQUATIONS_ALE_DARCY%SOLVER_MAPPING - IF(ASSOCIATED(SOLVER_MAPPING_ALE_DARCY)) THEN - EQUATIONS_SET_ALE_DARCY=>SOLVER_MAPPING_ALE_DARCY%EQUATIONS_SETS(1)%ptr - IF(ASSOCIATED(EQUATIONS_SET_ALE_DARCY)) THEN - MATERIALS_FIELD_ALE_DARCY=>EQUATIONS_SET_ALE_DARCY%MATERIALS%MATERIALS_FIELD - IF(ASSOCIATED(MATERIALS_FIELD_ALE_DARCY)) THEN - CALL FIELD_NUMBER_OF_COMPONENTS_GET(MATERIALS_FIELD_ALE_DARCY, & - & FIELD_U_VARIABLE_TYPE,NUMBER_OF_COMPONENTS_MATERIALS_FIELD_ALE_DARCY,err,error,*999) - ELSE - CALL FlagError("MATERIALS_FIELD_ALE_DARCY is not associated.",err,error,*999) - END IF - ELSE - CALL FlagError("ALE Darcy equations set is not associated.",err,error,*999) - END IF - ELSE - CALL FlagError("ALE Darcy solver mapping is not associated.",err,error,*999) - END IF - ELSE - CALL FlagError("ALE Darcy solver equations are not associated.",err,error,*999) - END IF - - !--- Copy the result from Galerkin-Projection's dependent field to ALE Darcy's material field - IF(NUMBER_OF_COMPONENTS_MATERIALS_FIELD_ALE_DARCY==NUMBER_OF_COMPONENTS_DEPENDENT_FIELD_MAT_PROPERTIES) THEN - DO I=1,NUMBER_OF_COMPONENTS_MATERIALS_FIELD_ALE_DARCY - CALL Field_ParametersToFieldParametersCopy(DEPENDENT_FIELD_MAT_PROPERTIES, & - & FIELD_U_VARIABLE_TYPE,FIELD_VALUES_SET_TYPE,I,MATERIALS_FIELD_ALE_DARCY, & - & FIELD_U_VARIABLE_TYPE,FIELD_VALUES_SET_TYPE,I,err,error,*999) - END DO - ELSE -! CALL FlagError("Dimension of Galerkin Projection and ALE Darcy equations set is not consistent",err,error,*999) - localError="Number of components of Galerkin-Projection dependent field "// & - & "is not consistent with ALE-Darcy-equation material field." - CALL FlagError(localError,err,error,*999) - END IF - - IF(DIAGNOSTICS3) THEN - NULLIFY( DUMMY_VALUES2 ) - CALL FIELD_PARAMETER_SET_DATA_GET(DEPENDENT_FIELD_MAT_PROPERTIES,FIELD_U_VARIABLE_TYPE, & - & FIELD_VALUES_SET_TYPE,DUMMY_VALUES2,err,error,*999) - NDOFS_TO_PRINT = SIZE(DUMMY_VALUES2,1) - CALL WRITE_STRING_VECTOR(DIAGNOSTIC_OUTPUT_TYPE,1,1,NDOFS_TO_PRINT,NDOFS_TO_PRINT,NDOFS_TO_PRINT,DUMMY_VALUES2, & - & '(" DEPENDENT_FIELD_MAT_PROPERTIES,FIELD_U_VARIABLE_TYPE,FIELD_VALUES_SET_TYPE = ",4(X,E13.6))',& - & '4(4(X,E13.6))',err,error,*999) - CALL FIELD_PARAMETER_SET_DATA_RESTORE(DEPENDENT_FIELD_MAT_PROPERTIES,FIELD_U_VARIABLE_TYPE, & - & FIELD_VALUES_SET_TYPE,DUMMY_VALUES2,err,error,*999) - ENDIF - - ELSE - ! do nothing - END IF - CASE DEFAULT - localError="The third problem specification of "// & - & TRIM(NumberToVString(CONTROL_LOOP%PROBLEM%SPECIFICATION(3),"*",err,error))// & - & " is not valid for Darcy_PreSolveUpdateMatrixProperties." - CALL FLAG_ERROR(localError,err,error,*999) - END SELECT - ELSE - CALL FlagError("Problem is not associated.",err,error,*999) - ENDIF - ELSE - CALL FlagError("Solver is not associated.",err,error,*999) - ENDIF - ELSE - CALL FlagError("Control loop is not associated.",err,error,*999) - ENDIF - - EXITS("Darcy_PreSolveUpdateMatrixProperties") - RETURN -999 ERRORS("Darcy_PreSolveUpdateMatrixProperties",err,error) - EXITS("Darcy_PreSolveUpdateMatrixProperties") - RETURN 1 - - END SUBROUTINE Darcy_PreSolveUpdateMatrixProperties - - ! - !================================================================================================================================ - ! - - !>Sets up the Darcy problem post solve. - SUBROUTINE DARCY_EQUATION_POST_SOLVE(CONTROL_LOOP,SOLVER,err,error,*) - - !Argument variables - TYPE(CONTROL_LOOP_TYPE), POINTER :: CONTROL_LOOP !Sets up the Darcy problem post solve output data. - SUBROUTINE DARCY_EQUATION_POST_SOLVE_OUTPUT_DATA(CONTROL_LOOP,SOLVER,err,error,*) - - !Argument variables - TYPE(CONTROL_LOOP_TYPE), POINTER :: CONTROL_LOOP !SOLVER%SOLVER_EQUATIONS - IF(ASSOCIATED(SOLVER_EQUATIONS)) THEN - SOLVER_MAPPING=>SOLVER_equations%SOLVER_MAPPING - IF(ASSOCIATED(SOLVER_MAPPING)) THEN - !Make sure the equations sets are up to date - DO equations_set_idx=1,SOLVER_MAPPING%NUMBER_OF_EQUATIONS_SETS - EQUATIONS_SET=>SOLVER_MAPPING%EQUATIONS_SETS(equations_set_idx)%ptr - FILENAME="./output/"//"STATIC_SOLUTION" - METHOD="FORTRAN" - IF(SOLVER%outputType>=SOLVER_PROGRESS_OUTPUT) THEN - CALL WRITE_STRING(GENERAL_OUTPUT_TYPE,"...",err,error,*999) - CALL WRITE_STRING(GENERAL_OUTPUT_TYPE,"Now export fields... ",err,error,*999) - ENDIF - Fields=>EQUATIONS_SET%REGION%FIELDS - CALL FIELD_IO_NODES_EXPORT(Fields,FILENAME,METHOD,err,error,*999) - CALL FIELD_IO_ELEMENTS_EXPORT(Fields,FILENAME,METHOD,err,error,*999) - NULLIFY(Fields) - ENDDO - ENDIF - ENDIF - CASE(PROBLEM_QUASISTATIC_DARCY_SUBTYPE, PROBLEM_ALE_DARCY_SUBTYPE, PROBLEM_PGM_DARCY_SUBTYPE, & - & PROBLEM_TRANSIENT_DARCY_SUBTYPE, PROBLEM_STANDARD_ELASTICITY_DARCY_SUBTYPE, & - & PROBLEM_PGM_ELASTICITY_DARCY_SUBTYPE,PROBLEM_PGM_TRANSIENT_DARCY_SUBTYPE, & - & PROBLEM_QUASISTATIC_ELASTICITY_TRANSIENT_DARCY_SUBTYPE,PROBLEM_QUASISTATIC_ELAST_TRANS_DARCY_MAT_SOLVE_SUBTYPE) - CALL CONTROL_LOOP_CURRENT_TIMES_GET(CONTROL_LOOP,CURRENT_TIME,TIME_INCREMENT,err,error,*999) - SOLVER_EQUATIONS=>SOLVER%SOLVER_EQUATIONS - IF(ASSOCIATED(SOLVER_EQUATIONS)) THEN - SOLVER_MAPPING=>SOLVER_equations%SOLVER_MAPPING - IF(ASSOCIATED(SOLVER_MAPPING)) THEN - !Make sure the equations sets are up to date - DO equations_set_idx=1,SOLVER_MAPPING%NUMBER_OF_EQUATIONS_SETS - EQUATIONS_SET=>SOLVER_MAPPING%EQUATIONS_SETS(equations_set_idx)%ptr - IF(EQUATIONS_SET%SPECIFICATION(2)==EQUATIONS_SET_DARCY_EQUATION_TYPE)THEN - IF(EQUATIONS_SET%SPECIFICATION(3)==EQUATIONS_SET_INCOMPRESSIBLE_ELAST_MULTI_COMP_DARCY_SUBTYPE)THEN - CONTROL_TIME_LOOP=>CONTROL_LOOP - DO loop_idx=1,CONTROL_LOOP%CONTROL_LOOP_LEVEL - IF(CONTROL_TIME_LOOP%LOOP_TYPE==PROBLEM_CONTROL_TIME_LOOP_TYPE) THEN - CURRENT_LOOP_ITERATION=CONTROL_TIME_LOOP%TIME_LOOP%ITERATION_NUMBER - OUTPUT_ITERATION_NUMBER=CONTROL_TIME_LOOP%TIME_LOOP%OUTPUT_NUMBER - EXIT - ENDIF - IF (ASSOCIATED(CONTROL_LOOP%PARENT_LOOP)) THEN - CONTROL_TIME_LOOP=>CONTROL_TIME_LOOP%PARENT_LOOP - ELSE - CURRENT_LOOP_ITERATION=0 - OUTPUT_ITERATION_NUMBER=0 - ENDIF - ENDDO - IF(CONTROL_LOOP%PARENT_LOOP%LOOP_TYPE==PROBLEM_CONTROL_WHILE_LOOP_TYPE) THEN - SUBITERATION_NUMBER=CONTROL_LOOP%PARENT_LOOP%WHILE_LOOP%ITERATION_NUMBER - ENDIF - - IF(OUTPUT_ITERATION_NUMBER/=0) THEN - IF(CONTROL_TIME_LOOP%TIME_LOOP%CURRENT_TIME<=CONTROL_TIME_LOOP%TIME_LOOP%STOP_TIME) THEN - IF(CURRENT_LOOP_ITERATION<10) THEN - WRITE(OUTPUT_FILE,'("TIME_STEP_000",I0)') CURRENT_LOOP_ITERATION - ELSE IF(CURRENT_LOOP_ITERATION<100) THEN - WRITE(OUTPUT_FILE,'("TIME_STEP_00",I0)') CURRENT_LOOP_ITERATION - ELSE IF(CURRENT_LOOP_ITERATION<1000) THEN - WRITE(OUTPUT_FILE,'("TIME_STEP_0",I0)') CURRENT_LOOP_ITERATION - ELSE IF(CURRENT_LOOP_ITERATION<10000) THEN - WRITE(OUTPUT_FILE,'("TIME_STEP_",I0)') CURRENT_LOOP_ITERATION - END IF - - FILENAME="./output/"//"MainTime_"//TRIM(NumberToVString(CURRENT_LOOP_ITERATION,"*",err,error)) - METHOD="FORTRAN" - IF(MOD(CURRENT_LOOP_ITERATION,OUTPUT_ITERATION_NUMBER)==0) THEN - IF(CONTROL_LOOP%outputtype >= CONTROL_LOOP_PROGRESS_OUTPUT) THEN - CALL WRITE_STRING(GENERAL_OUTPUT_TYPE,"...",err,error,*999) - CALL WRITE_STRING(GENERAL_OUTPUT_TYPE,"Now export fields... ",err,error,*999) - ENDIF - Fields=>EQUATIONS_SET%REGION%FIELDS - CALL FIELD_IO_NODES_EXPORT(Fields,FILENAME,METHOD,err,error,*999) - CALL FIELD_IO_ELEMENTS_EXPORT(Fields,FILENAME,METHOD,err,error,*999) - NULLIFY(Fields) - IF(CONTROL_LOOP%outputtype >= CONTROL_LOOP_PROGRESS_OUTPUT) THEN - CALL WRITE_STRING(GENERAL_OUTPUT_TYPE,FILENAME,err,error,*999) - CALL WRITE_STRING(GENERAL_OUTPUT_TYPE,"...",err,error,*999) - ENDIF - END IF - ENDIF - ENDIF - - !Subiteration intermediate solutions / iterates output: -! IF(CONTROL_LOOP%PARENT_LOOP%LOOP_TYPE==PROBLEM_CONTROL_WHILE_LOOP_TYPE) THEN !subiteration exists -! IF(CURRENT_LOOP_ITERATION<10) THEN -! IF(SUBITERATION_NUMBER<10) THEN -! WRITE(OUTPUT_FILE,'("T_00",I0,"_SB_0",I0,"_C",I0)') CURRENT_LOOP_ITERATION,SUBITERATION_NUMBER, & -! & equations_set_idx -! ELSE IF(SUBITERATION_NUMBER<100) THEN -! WRITE(OUTPUT_FILE,'("T_00",I0,"_SB_",I0,"_C",I0)') CURRENT_LOOP_ITERATION,SUBITERATION_NUMBER, & -! & equations_set_idx -! END IF -! FILE=OUTPUT_FILE -! METHOD="FORTRAN" -! EXPORT_FIELD=.TRUE. -! IF(EXPORT_FIELD) THEN -! CALL WRITE_STRING(GENERAL_OUTPUT_TYPE,"Darcy export subiterates ...",err,error,*999) -! CALL FLUID_MECHANICS_IO_WRITE_CMGUI(EQUATIONS_SET%REGION,EQUATIONS_SET%GLOBAL_NUMBER,FILE, & -! & err,error,*999) -! CALL WRITE_STRING(GENERAL_OUTPUT_TYPE,OUTPUT_FILE,err,error,*999) -! ENDIF -! ENDIF -! ENDIF - - ELSE !for single compartment (i.e. standary Darcy flow) equations sets - !Find the time loop - CONTROL_TIME_LOOP=>CONTROL_LOOP - DO loop_idx=1,CONTROL_LOOP%CONTROL_LOOP_LEVEL - IF(CONTROL_TIME_LOOP%LOOP_TYPE==PROBLEM_CONTROL_TIME_LOOP_TYPE) THEN - CURRENT_LOOP_ITERATION=CONTROL_TIME_LOOP%TIME_LOOP%ITERATION_NUMBER - OUTPUT_ITERATION_NUMBER=CONTROL_TIME_LOOP%TIME_LOOP%OUTPUT_NUMBER - EXIT - ENDIF - IF (ASSOCIATED(CONTROL_LOOP%PARENT_LOOP)) THEN - CONTROL_TIME_LOOP=>CONTROL_TIME_LOOP%PARENT_LOOP - ELSE - CURRENT_LOOP_ITERATION=0 - OUTPUT_ITERATION_NUMBER=0 - ENDIF - ENDDO - !If coupled with finite elasticity and using subiterations, get the while loop iteration number - IF (ASSOCIATED(CONTROL_LOOP%PARENT_LOOP)) THEN - IF(CONTROL_LOOP%PARENT_LOOP%LOOP_TYPE==PROBLEM_CONTROL_WHILE_LOOP_TYPE) THEN - SUBITERATION_NUMBER=CONTROL_LOOP%PARENT_LOOP%WHILE_LOOP%ITERATION_NUMBER - ELSE - SUBITERATION_NUMBER=0 - ENDIF - ENDIF - - IF(OUTPUT_ITERATION_NUMBER/=0) THEN - IF(CONTROL_TIME_LOOP%TIME_LOOP%CURRENT_TIME<=CONTROL_TIME_LOOP%TIME_LOOP%STOP_TIME) THEN - IF(CURRENT_LOOP_ITERATION<10) THEN - WRITE(OUTPUT_FILE,'("TIME_STEP_000",I0)') CURRENT_LOOP_ITERATION - ELSE IF(CURRENT_LOOP_ITERATION<100) THEN - WRITE(OUTPUT_FILE,'("TIME_STEP_00",I0)') CURRENT_LOOP_ITERATION - ELSE IF(CURRENT_LOOP_ITERATION<1000) THEN - WRITE(OUTPUT_FILE,'("TIME_STEP_0",I0)') CURRENT_LOOP_ITERATION - ELSE IF(CURRENT_LOOP_ITERATION<10000) THEN - WRITE(OUTPUT_FILE,'("TIME_STEP_",I0)') CURRENT_LOOP_ITERATION - END IF - - FILENAME="./output/"//"MainTime_"//TRIM(NumberToVString(CURRENT_LOOP_ITERATION,"*",err,error)) - METHOD="FORTRAN" - IF(MOD(CURRENT_LOOP_ITERATION,OUTPUT_ITERATION_NUMBER)==0) THEN - IF(CONTROL_LOOP%outputtype >= CONTROL_LOOP_PROGRESS_OUTPUT) THEN - CALL WRITE_STRING(GENERAL_OUTPUT_TYPE,"...",err,error,*999) - CALL WRITE_STRING(GENERAL_OUTPUT_TYPE,"Now export fields... ",err,error,*999) - ENDIF - Fields=>EQUATIONS_SET%REGION%FIELDS - CALL FIELD_IO_NODES_EXPORT(Fields,FILENAME,METHOD,err,error,*999) - CALL FIELD_IO_ELEMENTS_EXPORT(Fields,FILENAME,METHOD,err,error,*999) - NULLIFY(Fields) - IF(CONTROL_LOOP%outputtype >= CONTROL_LOOP_PROGRESS_OUTPUT) THEN - CALL WRITE_STRING(GENERAL_OUTPUT_TYPE,FILENAME,err,error,*999) - CALL WRITE_STRING(GENERAL_OUTPUT_TYPE,"...",err,error,*999) - ENDIF - END IF - ENDIF - ENDIF - - -! !Subiteration intermediate solutions / iterates output: -! IF(CONTROL_LOOP%PARENT_LOOP%LOOP_TYPE==PROBLEM_CONTROL_WHILE_LOOP_TYPE) THEN !subiteration exists -! IF(CURRENT_LOOP_ITERATION<10) THEN -! IF(SUBITERATION_NUMBER<10) THEN -! WRITE(OUTPUT_FILE,'("T_00",I0,"_SUB_000",I0)') CURRENT_LOOP_ITERATION,SUBITERATION_NUMBER -! ELSE IF(SUBITERATION_NUMBER<100) THEN -! WRITE(OUTPUT_FILE,'("T_00",I0,"_SUB_00",I0)') CURRENT_LOOP_ITERATION,SUBITERATION_NUMBER -! END IF -! FILE=OUTPUT_FILE -! METHOD="FORTRAN" -! EXPORT_FIELD=.TRUE. -! IF(EXPORT_FIELD) THEN -! CALL WRITE_STRING(GENERAL_OUTPUT_TYPE,"Darcy export subiterates ...",err,error,*999) -! CALL FLUID_MECHANICS_IO_WRITE_CMGUI(EQUATIONS_SET%REGION,EQUATIONS_SET%GLOBAL_NUMBER,FILE, & -! & err,error,*999) -! CALL WRITE_STRING(GENERAL_OUTPUT_TYPE,OUTPUT_FILE,err,error,*999) -! ENDIF -! ENDIF -! ENDIF - - ENDIF - ENDIF - ENDDO - ENDIF - ENDIF - CASE DEFAULT - localError="Problem subtype "//TRIM(NumberToVString(CONTROL_LOOP%PROBLEM%SPECIFICATION(3),"*",err,error))// & - & " is not valid for a Darcy fluid type of a fluid mechanics problem class." - CALL FlagError(localError,err,error,*999) - END SELECT - ELSE - CALL FlagError("Problem is not associated.",err,error,*999) - ENDIF - ELSE - CALL FlagError("Solver is not associated.",err,error,*999) - ENDIF - ELSE - CALL FlagError("Control loop is not associated.",err,error,*999) - ENDIF - - EXITS("DARCY_EQUATION_POST_SOLVE_OUTPUT_DATA") - RETURN -999 ERRORSEXITS("DARCY_EQUATION_POST_SOLVE_OUTPUT_DATA",err,error) - RETURN 1 - END SUBROUTINE DARCY_EQUATION_POST_SOLVE_OUTPUT_DATA - - ! - !================================================================================================================================ - ! - - !>Calculates the analytic solution and sets the boundary conditions for an analytic problem. - SUBROUTINE Darcy_BoundaryConditionsAnalyticCalculate(EQUATIONS_SET,BOUNDARY_CONDITIONS,err,error,*) - - !Argument variables - TYPE(EQUATIONS_SET_TYPE), POINTER :: equations_SET - TYPE(BOUNDARY_CONDITIONS_TYPE), POINTER :: BOUNDARY_CONDITIONS - INTEGER(INTG), INTENT(OUT) :: ERR !EQUATIONS_SET%DEPENDENT%DEPENDENT_FIELD - IF(ASSOCIATED(DEPENDENT_FIELD)) THEN - geometricField=>EQUATIONS_SET%GEOMETRY%GEOMETRIC_FIELD - IF(ASSOCIATED(geometricField)) THEN - CALL FIELD_NUMBER_OF_COMPONENTS_GET(geometricField,FIELD_U_VARIABLE_TYPE,NUMBER_OF_DIMENSIONS,err,error,*999) - NULLIFY(GEOMETRIC_VARIABLE) - CALL Field_VariableGet(geometricField,FIELD_U_VARIABLE_TYPE,GEOMETRIC_VARIABLE,err,error,*999) - NULLIFY(GEOMETRIC_PARAMETERS) - CALL FIELD_PARAMETER_SET_DATA_GET(geometricField,FIELD_U_VARIABLE_TYPE,FIELD_VALUES_SET_TYPE,GEOMETRIC_PARAMETERS, & - & err,error,*999) - IF(ASSOCIATED(BOUNDARY_CONDITIONS)) THEN - CURRENT_TIME=EQUATIONS_SET%ANALYTIC%ANALYTIC_USER_PARAMS(1) - DO variable_idx=3,DEPENDENT_FIELD%NUMBER_OF_VARIABLES - variable_type=DEPENDENT_FIELD%VARIABLES(variable_idx)%VARIABLE_TYPE - FIELD_VARIABLE=>DEPENDENT_FIELD%VARIABLE_TYPE_MAP(variable_type)%ptr - IF(ASSOCIATED(FIELD_VARIABLE)) THEN - CALL FIELD_PARAMETER_SET_CREATE(DEPENDENT_FIELD,variable_type,FIELD_ANALYTIC_VALUES_SET_TYPE,err,error,*999) - DO component_idx=1,FIELD_VARIABLE%NUMBER_OF_COMPONENTS - IF(FIELD_VARIABLE%COMPONENTS(component_idx)%INTERPOLATION_TYPE==FIELD_NODE_BASED_INTERPOLATION) THEN - DOMAIN=>FIELD_VARIABLE%COMPONENTS(component_idx)%DOMAIN - IF(ASSOCIATED(DOMAIN)) THEN - IF(ASSOCIATED(DOMAIN%TOPOLOGY)) THEN - DOMAIN_NODES=>DOMAIN%TOPOLOGY%NODES - IF(ASSOCIATED(DOMAIN_NODES)) THEN - !Loop over the local nodes excluding the ghosts. - DO node_idx=1,DOMAIN_NODES%NUMBER_OF_NODES - !!TODO \todo We should interpolate the geometric field here and the node position. - DO dim_idx=1,NUMBER_OF_DIMENSIONS - !Default to version 1 of each node derivative - local_ny=GEOMETRIC_VARIABLE%COMPONENTS(dim_idx)%PARAM_TO_DOF_MAP%NODE_PARAM2DOF_MAP% & - & NODES(node_idx)%DERIVATIVES(1)%VERSIONS(1) - X(dim_idx)=GEOMETRIC_PARAMETERS(local_ny) - ENDDO !dim_idx - !Loop over the derivatives - DO deriv_idx=1,DOMAIN_NODES%NODES(node_idx)%NUMBER_OF_DERIVATIVES - ANALYTIC_FUNCTION_TYPE=EQUATIONS_SET%ANALYTIC%ANALYTIC_FUNCTION_TYPE - GLOBAL_DERIV_INDEX=DOMAIN_NODES%NODES(node_idx)%DERIVATIVES(deriv_idx)%GLOBAL_DERIVATIVE_INDEX -! CALL DIFFUSION_EQUATION_ANALYTIC_FUNCTIONS(VALUE,X,CURRENT_TIME,variable_type, & -! & GLOBAL_DERIV_INDEX,ANALYTIC_FUNCTION_TYPE,err,error,*999) -!!!!!!!!!!!!NEED TO SET APPROPRIATE VALUE DEPENDING ON WHETHER IT IS A VELOCITY COMPONENT OR THE MASS INCREASE COMPONENT - VALUE=0.0_DP - !Default to version 1 of each node derivative - local_ny=FIELD_VARIABLE%COMPONENTS(component_idx)%PARAM_TO_DOF_MAP% & - & NODE_PARAM2DOF_MAP%NODES(node_idx)%DERIVATIVES(deriv_idx)%VERSIONS(1) - CALL FIELD_PARAMETER_SET_UPDATE_LOCAL_DOF(DEPENDENT_FIELD,variable_type, & - & FIELD_ANALYTIC_VALUES_SET_TYPE,local_ny,VALUE,err,error,*999) - IF(variable_type==FIELD_V_VARIABLE_TYPE) THEN - IF(DOMAIN_NODES%NODES(node_idx)%BOUNDARY_NODE) THEN - !If we are a boundary node then set the analytic value on the boundary - CALL BOUNDARY_CONDITIONS_SET_LOCAL_DOF(BOUNDARY_CONDITIONS,DEPENDENT_FIELD,variable_type, & - & local_ny,BOUNDARY_CONDITION_FIXED,VALUE,err,error,*999) - ELSE - CALL FIELD_PARAMETER_SET_UPDATE_LOCAL_DOF(DEPENDENT_FIELD,variable_type, & - & FIELD_VALUES_SET_TYPE,local_ny,VALUE,err,error,*999) - ENDIF - ENDIF - ENDDO !deriv_idx - ENDDO !node_idx - ELSE - CALL FlagError("Domain topology nodes is not associated.",err,error,*999) - ENDIF - ELSE - CALL FlagError("Domain topology is not associated.",err,error,*999) - ENDIF - ELSE - CALL FlagError("Domain is not associated.",err,error,*999) - ENDIF - ELSE - CALL FlagError("Only node based interpolation is implemented.",err,error,*999) - ENDIF - ENDDO !component_idx - CALL FIELD_PARAMETER_SET_UPDATE_START(DEPENDENT_FIELD,variable_type,FIELD_ANALYTIC_VALUES_SET_TYPE, & - & err,error,*999) - CALL FIELD_PARAMETER_SET_UPDATE_FINISH(DEPENDENT_FIELD,variable_type,FIELD_ANALYTIC_VALUES_SET_TYPE, & - & err,error,*999) - ELSE - CALL FlagError("Field variable is not associated.",err,error,*999) - ENDIF - ENDDO !variable_idx - CALL FIELD_PARAMETER_SET_DATA_RESTORE(geometricField,FIELD_U_VARIABLE_TYPE,FIELD_VALUES_SET_TYPE, & - & GEOMETRIC_PARAMETERS,err,error,*999) - ELSE - CALL FlagError("Equations set boundary conditions is not associated.",err,error,*999) - ENDIF - ELSE - CALL FlagError("Equations set geometric field is not associated.",err,error,*999) - ENDIF - ELSE - CALL FlagError("Equations set dependent field is not associated.",err,error,*999) - ENDIF - CASE DEFAULT - DEPENDENT_FIELD=>EQUATIONS_SET%DEPENDENT%DEPENDENT_FIELD - IF(ASSOCIATED(DEPENDENT_FIELD)) THEN - geometricField=>EQUATIONS_SET%GEOMETRY%GEOMETRIC_FIELD - IF(ASSOCIATED(geometricField)) THEN - NULLIFY(INTERPOLATION_PARAMETERS) - NULLIFY(INTERPOLATED_POINT) - CALL FIELD_INTERPOLATION_PARAMETERS_INITIALISE(geometricField,INTERPOLATION_PARAMETERS,err,error,*999) - CALL FIELD_INTERPOLATED_POINTS_INITIALISE(INTERPOLATION_PARAMETERS,INTERPOLATED_POINT,err,error,*999) - - CALL FIELD_NUMBER_OF_COMPONENTS_GET(geometricField,FIELD_U_VARIABLE_TYPE,NUMBER_OF_DIMENSIONS,err,error,*999) - - IF(NUMBER_OF_DIMENSIONS==2) THEN - BOUNDARY_X(1,1)=0.0_DP - BOUNDARY_X(1,2)=10.0_DP - BOUNDARY_X(2,1)=0.0_DP - BOUNDARY_X(2,2)=10.0_DP - ELSE IF(NUMBER_OF_DIMENSIONS==3) THEN - BOUNDARY_X(1,1)=-5.0_DP - BOUNDARY_X(1,2)=5.0_DP - BOUNDARY_X(2,1)=-5.0_DP - BOUNDARY_X(2,2)=5.0_DP - BOUNDARY_X(3,1)=-5.0_DP - BOUNDARY_X(3,2)=5.0_DP - ENDIF - - NULLIFY(GEOMETRIC_VARIABLE) - CALL Field_VariableGet(geometricField,FIELD_U_VARIABLE_TYPE,GEOMETRIC_VARIABLE,err,error,*999) - NULLIFY(GEOMETRIC_PARAMETERS) - CALL FIELD_PARAMETER_SET_DATA_GET(geometricField,FIELD_U_VARIABLE_TYPE,FIELD_VALUES_SET_TYPE, & - & GEOMETRIC_PARAMETERS,err,error,*999) - IF(ASSOCIATED(BOUNDARY_CONDITIONS)) THEN - DO variable_idx=1,DEPENDENT_FIELD%NUMBER_OF_VARIABLES - variable_type=DEPENDENT_FIELD%VARIABLES(variable_idx)%VARIABLE_TYPE - FIELD_VARIABLE=>DEPENDENT_FIELD%VARIABLE_TYPE_MAP(variable_type)%ptr - IF(ASSOCIATED(FIELD_VARIABLE)) THEN - CALL FIELD_PARAMETER_SET_CREATE(DEPENDENT_FIELD,variable_type,FIELD_ANALYTIC_VALUES_SET_TYPE,err,error,*999) - DO component_idx=1,FIELD_VARIABLE%NUMBER_OF_COMPONENTS - BOUND_COUNT=0 - IF(FIELD_VARIABLE%COMPONENTS(component_idx)%INTERPOLATION_TYPE==FIELD_NODE_BASED_INTERPOLATION) THEN - DOMAIN=>FIELD_VARIABLE%COMPONENTS(component_idx)%DOMAIN - IF(ASSOCIATED(DOMAIN)) THEN - IF(ASSOCIATED(DOMAIN%TOPOLOGY)) THEN - DOMAIN_NODES=>DOMAIN%TOPOLOGY%NODES - IF(ASSOCIATED(DOMAIN_NODES)) THEN - !Loop over the local nodes excluding the ghosts. - DO node_idx=1,DOMAIN_NODES%NUMBER_OF_NODES - - element_idx=DOMAIN%topology%nodes%nodes(node_idx)%surrounding_elements(1) - CALL FIELD_INTERPOLATION_PARAMETERS_ELEMENT_GET(FIELD_VALUES_SET_TYPE,element_idx, & - & INTERPOLATION_PARAMETERS(FIELD_U_VARIABLE_TYPE)%ptr,err,error,*999) - -! DO I=1,DOMAIN%topology%elements%maximum_number_of_element_parameters -! IF(DOMAIN%topology%elements%elements(element_idx)%element_nodes(I)=node_idx THEN - - en_idx=0 - XI_COORDINATES=0.0_DP - number_of_nodes_xic(1)=DOMAIN%topology%elements%elements(element_idx)%basis%number_of_nodes_xic(1) - number_of_nodes_xic(2)=DOMAIN%topology%elements%elements(element_idx)%basis%number_of_nodes_xic(2) - IF(NUMBER_OF_DIMENSIONS==3) THEN - number_of_nodes_xic(3)=DOMAIN%topology%elements%elements(element_idx)%basis%number_of_nodes_xic(3) - ELSE - number_of_nodes_xic(3)=1 - ENDIF - - IF(DOMAIN%topology%elements%maximum_number_of_element_parameters==4.AND.NUMBER_OF_DIMENSIONS==2 .OR. & - & DOMAIN%topology%elements%maximum_number_of_element_parameters==9.OR. & - & DOMAIN%topology%elements%maximum_number_of_element_parameters==16.OR. & - & DOMAIN%topology%elements%maximum_number_of_element_parameters==8.OR. & - & DOMAIN%topology%elements%maximum_number_of_element_parameters==27.OR. & - & DOMAIN%topology%elements%maximum_number_of_element_parameters==64) THEN - - DO K=1,number_of_nodes_xic(3) - DO J=1,number_of_nodes_xic(2) - DO I=1,number_of_nodes_xic(1) - en_idx=en_idx+1 - IF(DOMAIN%topology%elements%elements(element_idx)%element_nodes(en_idx)==node_idx) EXIT - XI_COORDINATES(1)=XI_COORDINATES(1)+(1.0_DP/(number_of_nodes_xic(1)-1)) - ENDDO - IF(DOMAIN%topology%elements%elements(element_idx)%element_nodes(en_idx)==node_idx) EXIT - XI_COORDINATES(1)=0.0_DP - XI_COORDINATES(2)=XI_COORDINATES(2)+(1.0_DP/(number_of_nodes_xic(2)-1)) - ENDDO - IF(DOMAIN%topology%elements%elements(element_idx)%element_nodes(en_idx)==node_idx) EXIT - XI_COORDINATES(1)=0.0_DP - XI_COORDINATES(2)=0.0_DP - IF(number_of_nodes_xic(3)/=1) THEN - XI_COORDINATES(3)=XI_COORDINATES(3)+(1.0_DP/(number_of_nodes_xic(3)-1)) - ENDIF - ENDDO - CALL FIELD_INTERPOLATE_XI(NO_PART_DERIV,XI_COORDINATES, & - & INTERPOLATED_POINT(FIELD_U_VARIABLE_TYPE)%ptr,err,error,*999) - ELSE - IF(DOMAIN%topology%elements%maximum_number_of_element_parameters==3) THEN - T_COORDINATES(1,1:2)=[0.0_DP,1.0_DP] - T_COORDINATES(2,1:2)=[1.0_DP,0.0_DP] - T_COORDINATES(3,1:2)=[1.0_DP,1.0_DP] - ELSE IF(DOMAIN%topology%elements%maximum_number_of_element_parameters==6) THEN - T_COORDINATES(1,1:2)=[0.0_DP,1.0_DP] - T_COORDINATES(2,1:2)=[1.0_DP,0.0_DP] - T_COORDINATES(3,1:2)=[1.0_DP,1.0_DP] - T_COORDINATES(4,1:2)=[0.5_DP,0.5_DP] - T_COORDINATES(5,1:2)=[1.0_DP,0.5_DP] - T_COORDINATES(6,1:2)=[0.5_DP,1.0_DP] - ELSE IF(DOMAIN%topology%elements%maximum_number_of_element_parameters==10.AND. & - & NUMBER_OF_DIMENSIONS==2) THEN - T_COORDINATES(1,1:2)=[0.0_DP,1.0_DP] - T_COORDINATES(2,1:2)=[1.0_DP,0.0_DP] - T_COORDINATES(3,1:2)=[1.0_DP,1.0_DP] - T_COORDINATES(4,1:2)=[1.0_DP/3.0_DP,2.0_DP/3.0_DP] - T_COORDINATES(5,1:2)=[2.0_DP/3.0_DP,1.0_DP/3.0_DP] - T_COORDINATES(6,1:2)=[1.0_DP,1.0_DP/3.0_DP] - T_COORDINATES(7,1:2)=[1.0_DP,2.0_DP/3.0_DP] - T_COORDINATES(8,1:2)=[2.0_DP/3.0_DP,1.0_DP] - T_COORDINATES(9,1:2)=[1.0_DP/3.0_DP,1.0_DP] - T_COORDINATES(10,1:2)=[2.0_DP/3.0_DP,2.0_DP/3.0_DP] - ELSE IF(DOMAIN%topology%elements%maximum_number_of_element_parameters==4) THEN - T_COORDINATES(1,1:3)=[0.0_DP,1.0_DP,1.0_DP] - T_COORDINATES(2,1:3)=[1.0_DP,0.0_DP,1.0_DP] - T_COORDINATES(3,1:3)=[1.0_DP,1.0_DP,0.0_DP] - T_COORDINATES(4,1:3)=[1.0_DP,1.0_DP,1.0_DP] - ELSE IF(DOMAIN%topology%elements%maximum_number_of_element_parameters==10.AND. & - & NUMBER_OF_DIMENSIONS==3) THEN - T_COORDINATES(1,1:3)=[0.0_DP,1.0_DP,1.0_DP] - T_COORDINATES(2,1:3)=[1.0_DP,0.0_DP,1.0_DP] - T_COORDINATES(3,1:3)=[1.0_DP,1.0_DP,0.0_DP] - T_COORDINATES(4,1:3)=[1.0_DP,1.0_DP,1.0_DP] - T_COORDINATES(5,1:3)=[0.5_DP,0.5_DP,1.0_DP] - T_COORDINATES(6,1:3)=[0.5_DP,1.0_DP,0.5_DP] - T_COORDINATES(7,1:3)=[0.5_DP,1.0_DP,1.0_DP] - T_COORDINATES(8,1:3)=[1.0_DP,0.5_DP,0.5_DP] - T_COORDINATES(9,1:3)=[1.0_DP,1.0_DP,0.5_DP] - T_COORDINATES(10,1:3)=[1.0_DP,0.5_DP,1.0_DP] - ELSE IF(DOMAIN%topology%elements%maximum_number_of_element_parameters==20) THEN - T_COORDINATES(1,1:3)=[0.0_DP,1.0_DP,1.0_DP] - T_COORDINATES(2,1:3)=[1.0_DP,0.0_DP,1.0_DP] - T_COORDINATES(3,1:3)=[1.0_DP,1.0_DP,0.0_DP] - T_COORDINATES(4,1:3)=[1.0_DP,1.0_DP,1.0_DP] - T_COORDINATES(5,1:3)=[1.0_DP/3.0_DP,2.0_DP/3.0_DP,1.0_DP] - T_COORDINATES(6,1:3)=[2.0_DP/3.0_DP,1.0_DP/3.0_DP,1.0_DP] - T_COORDINATES(7,1:3)=[1.0_DP/3.0_DP,1.0_DP,2.0_DP/3.0_DP] - T_COORDINATES(8,1:3)=[2.0_DP/3.0_DP,1.0_DP,1.0_DP/3.0_DP] - T_COORDINATES(9,1:3)=[1.0_DP/3.0_DP,1.0_DP,1.0_DP] - T_COORDINATES(10,1:3)=[2.0_DP/3.0_DP,1.0_DP,1.0_DP] - T_COORDINATES(11,1:3)=[1.0_DP,1.0_DP/3.0_DP,2.0_DP/3.0_DP] - T_COORDINATES(12,1:3)=[1.0_DP,2.0_DP/3.0_DP,1.0_DP/3.0_DP] - T_COORDINATES(13,1:3)=[1.0_DP,1.0_DP,1.0_DP/3.0_DP] - T_COORDINATES(14,1:3)=[1.0_DP,1.0_DP,2.0_DP/3.0_DP] - T_COORDINATES(15,1:3)=[1.0_DP,1.0_DP/3.0_DP,1.0_DP] - T_COORDINATES(16,1:3)=[1.0_DP,2.0_DP/3.0_DP,1.0_DP] - T_COORDINATES(17,1:3)=[2.0_DP/3.0_DP,2.0_DP/3.0_DP,2.0_DP/3.0_DP] - T_COORDINATES(18,1:3)=[2.0_DP/3.0_DP,2.0_DP/3.0_DP,1.0_DP] - T_COORDINATES(19,1:3)=[2.0_DP/3.0_DP,1.0_DP,2.0_DP/3.0_DP] - T_COORDINATES(20,1:3)=[1.0_DP,2.0_DP/3.0_DP,2.0_DP/3.0_DP] - ENDIF - - DO K=1,DOMAIN%topology%elements%maximum_number_of_element_parameters - IF(DOMAIN%topology%elements%elements(element_idx)%element_nodes(K)==node_idx) EXIT - ENDDO - - IF(NUMBER_OF_DIMENSIONS==2) THEN - CALL FIELD_INTERPOLATE_XI(NO_PART_DERIV,T_COORDINATES(K,1:2), & - & INTERPOLATED_POINT(FIELD_U_VARIABLE_TYPE)%ptr,err,error,*999) - ELSE IF(NUMBER_OF_DIMENSIONS==3) THEN - CALL FIELD_INTERPOLATE_XI(NO_PART_DERIV,T_COORDINATES(K,1:3), & - & INTERPOLATED_POINT(FIELD_U_VARIABLE_TYPE)%ptr,err,error,*999) - ENDIF - ENDIF - - X=0.0_DP - DO dim_idx=1,NUMBER_OF_DIMENSIONS - X(dim_idx)=INTERPOLATED_POINT(FIELD_U_VARIABLE_TYPE)%ptr%VALUES(dim_idx,1) - ENDDO !dim_idx - - !Loop over the derivatives - DO deriv_idx=1,DOMAIN_NODES%NODES(node_idx)%NUMBER_OF_DERIVATIVES - SELECT CASE(EQUATIONS_SET%ANALYTIC%ANALYTIC_FUNCTION_TYPE) - CASE(EQUATIONS_SET_DARCY_EQUATION_TWO_DIM_1) - IF(NUMBER_OF_DIMENSIONS==2.AND.FIELD_VARIABLE%NUMBER_OF_COMPONENTS==3) THEN -!POLYNOM - SELECT CASE(variable_type) - CASE(FIELD_U_VARIABLE_TYPE) - SELECT CASE(DOMAIN_NODES%NODES(node_idx)%DERIVATIVES(deriv_idx)%GLOBAL_DERIVATIVE_INDEX) - CASE(NO_GLOBAL_DERIV) - FACT = PERM_OVER_VIS_PARAM - IF(component_idx==1) THEN - !calculate u - VALUE = - FACT * ( 2.0_DP*X(1) + 2.0_DP*X(2) ) - ELSE IF(component_idx==2) THEN - !calculate v - VALUE = - FACT * ( 2.0_DP*X(1) - 2.0_DP*X(2) ) - ELSE IF(component_idx==3) THEN - !calculate p - VALUE = X(1)**2.0_DP + 2.0_DP*X(1)*X(2) - X(2)**2.0_DP - ELSE - CALL FlagError("Not implemented.",err,error,*999) - ENDIF - CASE(GLOBAL_DERIV_S1) - CALL FlagError("Not implemented.",err,error,*999) - CASE(GLOBAL_DERIV_S2) - CALL FlagError("Not implemented.",err,error,*999) - CASE(GLOBAL_DERIV_S1_S2) - CALL FlagError("Not implemented.",err,error,*999) - CASE DEFAULT - localError="The global derivative index of "//TRIM(NumberToVString( & - & DOMAIN_NODES%NODES(node_idx)%DERIVATIVES(deriv_idx)%GLOBAL_DERIVATIVE_INDEX,"*", & - & err,error))//" is invalid." - CALL FlagError(localError,err,error,*999) - END SELECT - CASE(FIELD_DELUDELN_VARIABLE_TYPE) - SELECT CASE(DOMAIN_NODES%NODES(node_idx)%DERIVATIVES(deriv_idx)%GLOBAL_DERIVATIVE_INDEX) - CASE(NO_GLOBAL_DERIV) - VALUE= 0.0_DP - CASE(GLOBAL_DERIV_S1) - CALL FlagError("Not implemented.",err,error,*999) - CASE(GLOBAL_DERIV_S2) - CALL FlagError("Not implemented.",err,error,*999) - CASE(GLOBAL_DERIV_S1_S2) - CALL FlagError("Not implemented.",err,error,*999) - CASE DEFAULT - localError="The global derivative index of "//TRIM(NumberToVString( & - & DOMAIN_NODES%NODES(node_idx)%DERIVATIVES(deriv_idx)%GLOBAL_DERIVATIVE_INDEX,"*", & - & err,error))//" is invalid." - CALL FlagError(localError,err,error,*999) - END SELECT - CASE DEFAULT - localError="The variable type of "//TRIM(NumberToVString(variable_type,"*",err,error))//& - & " is invalid." - CALL FlagError(localError,err,error,*999) - END SELECT - ELSE - localError="The number of components does not correspond to the number of dimensions." - CALL FlagError(localError,err,error,*999) - ENDIF - - - CASE(EQUATIONS_SET_DARCY_EQUATION_TWO_DIM_2) - IF(NUMBER_OF_DIMENSIONS==2.AND.FIELD_VARIABLE%NUMBER_OF_COMPONENTS==3) THEN -!EXPONENTIAL - SELECT CASE(variable_type) - CASE(FIELD_U_VARIABLE_TYPE) - SELECT CASE(DOMAIN_NODES%NODES(node_idx)%DERIVATIVES(deriv_idx)%GLOBAL_DERIVATIVE_INDEX) - CASE(NO_GLOBAL_DERIV) - FACT = PERM_OVER_VIS_PARAM / L - ARG(1) = X(1) / L - ARG(2) = X(2) / L - IF(component_idx==1) THEN - !calculate u - VALUE = - FACT * EXP( ARG(1) ) * EXP( ARG(2) ) - ELSE IF(component_idx==2) THEN - !calculate v - VALUE = - FACT * EXP( ARG(1) ) * EXP( ARG(2) ) - ELSE IF(component_idx==3) THEN - !calculate p - VALUE = EXP( ARG(1) ) * EXP( ARG(2) ) - ELSE - CALL FlagError("Not implemented.",err,error,*999) - ENDIF - CASE(GLOBAL_DERIV_S1) - CALL FlagError("Not implemented.",err,error,*999) - CASE(GLOBAL_DERIV_S2) - CALL FlagError("Not implemented.",err,error,*999) - CASE(GLOBAL_DERIV_S1_S2) - CALL FlagError("Not implemented.",err,error,*999) - CASE DEFAULT - localError="The global derivative index of "//TRIM(NumberToVString( & - & DOMAIN_NODES%NODES(node_idx)%DERIVATIVES(deriv_idx)%GLOBAL_DERIVATIVE_INDEX,"*", & - & err,error))//" is invalid." - CALL FlagError(localError,err,error,*999) - END SELECT - CASE(FIELD_DELUDELN_VARIABLE_TYPE) - SELECT CASE(DOMAIN_NODES%NODES(node_idx)%DERIVATIVES(deriv_idx)%GLOBAL_DERIVATIVE_INDEX) - CASE(NO_GLOBAL_DERIV) - IF(component_idx==1) THEN - !calculate u - VALUE= 0.0_DP - ELSE IF(component_idx==2) THEN - !calculate v - VALUE= 0.0_DP - ELSE IF(component_idx==3) THEN - !calculate p - VALUE= 0.0_DP - ELSE - CALL FlagError("Not implemented.",err,error,*999) - ENDIF - CASE(GLOBAL_DERIV_S1) - CALL FlagError("Not implemented.",err,error,*999) - CASE(GLOBAL_DERIV_S2) - CALL FlagError("Not implemented.",err,error,*999) - CASE(GLOBAL_DERIV_S1_S2) - CALL FlagError("Not implemented.",err,error,*999) - - CASE DEFAULT - localError="The global derivative index of "//TRIM(NumberToVString( & - & DOMAIN_NODES%NODES(node_idx)%DERIVATIVES(deriv_idx)%GLOBAL_DERIVATIVE_INDEX,"*", & - & err,error))//" is invalid." - CALL FlagError(localError,err,error,*999) - END SELECT - - - CASE DEFAULT - localError="The variable type of "//TRIM(NumberToVString(variable_type,"*",err,error))//& - & " is invalid." - CALL FlagError(localError,err,error,*999) - END SELECT - ELSE - localError="The number of components does not correspond to the number of dimensions." - CALL FlagError(localError,err,error,*999) - ENDIF - - - CASE(EQUATIONS_SET_DARCY_EQUATION_TWO_DIM_3) - IF(NUMBER_OF_DIMENSIONS==2.AND.FIELD_VARIABLE%NUMBER_OF_COMPONENTS==3) THEN -!SINUS/COSINUS - SELECT CASE(variable_type) - CASE(FIELD_U_VARIABLE_TYPE) - SELECT CASE(DOMAIN_NODES%NODES(node_idx)%DERIVATIVES(deriv_idx)%GLOBAL_DERIVATIVE_INDEX) - CASE(NO_GLOBAL_DERIV) - FACT = 2.0_DP * PI * PERM_OVER_VIS_PARAM / L - ARG(1) = 2.0_DP * PI * X(1) / L - ARG(2) = 2.0_DP * PI * X(2) / L - IF(component_idx==1) THEN - !calculate u - VALUE = - FACT * COS( ARG(1) ) * SIN( ARG(2) ) - ELSE IF(component_idx==2) THEN - !calculate v - VALUE = - FACT * SIN( ARG(1) ) * COS( ARG(2) ) - ELSE IF(component_idx==3) THEN - !calculate p - VALUE = SIN( ARG(1) ) * SIN( ARG(2) ) - ELSE - CALL FlagError("Not implemented.",err,error,*999) - ENDIF - CASE(GLOBAL_DERIV_S1) - CALL FlagError("Not implemented.",err,error,*999) - CASE(GLOBAL_DERIV_S2) - CALL FlagError("Not implemented.",err,error,*999) - CASE(GLOBAL_DERIV_S1_S2) - CALL FlagError("Not implemented.",err,error,*999) - CASE DEFAULT - localError="The global derivative index of "//TRIM(NumberToVString( & - & DOMAIN_NODES%NODES(node_idx)%DERIVATIVES(deriv_idx)%GLOBAL_DERIVATIVE_INDEX,"*", & - & err,error))//" is invalid." - CALL FlagError(localError,err,error,*999) - END SELECT - CASE(FIELD_DELUDELN_VARIABLE_TYPE) - SELECT CASE(DOMAIN_NODES%NODES(node_idx)%DERIVATIVES(deriv_idx)%GLOBAL_DERIVATIVE_INDEX) - CASE(NO_GLOBAL_DERIV) - IF(component_idx==1) THEN - !calculate u - VALUE=0.0_DP - ELSE IF(component_idx==2) THEN - !calculate v - VALUE=0.0_DP - ELSE IF(component_idx==3) THEN - !calculate p - VALUE=0.0_DP - ELSE - CALL FlagError("Not implemented.",err,error,*999) - ENDIF - CASE(GLOBAL_DERIV_S1) - CALL FlagError("Not implemented.",err,error,*999) - CASE(GLOBAL_DERIV_S2) - CALL FlagError("Not implemented.",err,error,*999) - CASE(GLOBAL_DERIV_S1_S2) - CALL FlagError("Not implemented.",err,error,*999) - CASE DEFAULT - localError="The global derivative index of "//TRIM(NumberToVString( & - & DOMAIN_NODES%NODES(node_idx)%DERIVATIVES(deriv_idx)%GLOBAL_DERIVATIVE_INDEX,"*", & - & err,error))//" is invalid." - CALL FlagError(localError,err,error,*999) - END SELECT - CASE DEFAULT - localError="The variable type of "//TRIM(NumberToVString(variable_type,"*",err,error))//& - & " is invalid." - CALL FlagError(localError,err,error,*999) - END SELECT - ELSE - localError="The number of components does not correspond to the number of dimensions." - CALL FlagError(localError,err,error,*999) - ENDIF - - CASE(EQUATIONS_SET_DARCY_EQUATION_THREE_DIM_1) - IF(NUMBER_OF_DIMENSIONS==3.AND.FIELD_VARIABLE%NUMBER_OF_COMPONENTS==4) THEN -!POLYNOM - SELECT CASE(variable_type) - CASE(FIELD_U_VARIABLE_TYPE) - SELECT CASE(DOMAIN_NODES%NODES(node_idx)%DERIVATIVES(deriv_idx)%GLOBAL_DERIVATIVE_INDEX) - CASE(NO_GLOBAL_DERIV) - FACT = PERM_OVER_VIS_PARAM - IF(component_idx==1) THEN - !calculate u - VALUE = - FACT * ( 2.0_DP*X(1) + 2.0_DP*X(2) + X(3) ) - ELSE IF(component_idx==2) THEN - !calculate v - VALUE = - FACT * ( 2.0_DP*X(1) - 2.0_DP*X(2) + X(3) ) - ELSE IF(component_idx==3) THEN - !calculate w - VALUE = - FACT * ( 3.0_DP + X(1) + X(2) ) - ELSE IF(component_idx==4) THEN - !calculate p - VALUE = X(1)**2.0_DP + 2.0_DP*X(1)*X(2) - X(2)**2.0_DP + & - & 3.0_DP*X(3) + X(3)*X(1) + X(3)*X(2) - ELSE - CALL FlagError("Not implemented.",err,error,*999) - ENDIF - CASE(GLOBAL_DERIV_S1) - CALL FlagError("Not implemented.",err,error,*999) - CASE(GLOBAL_DERIV_S2) - CALL FlagError("Not implemented.",err,error,*999) - CASE(GLOBAL_DERIV_S1_S2) - CALL FlagError("Not implemented.",err,error,*999) - CASE DEFAULT - localError="The global derivative index of "//TRIM(NumberToVString( & - & DOMAIN_NODES%NODES(node_idx)%DERIVATIVES(deriv_idx)%GLOBAL_DERIVATIVE_INDEX,"*", & - & err,error))//" is invalid." - CALL FlagError(localError,err,error,*999) - END SELECT - CASE(FIELD_DELUDELN_VARIABLE_TYPE) - SELECT CASE(DOMAIN_NODES%NODES(node_idx)%DERIVATIVES(deriv_idx)%GLOBAL_DERIVATIVE_INDEX) - CASE(NO_GLOBAL_DERIV) - VALUE=0.0_DP - CASE(GLOBAL_DERIV_S1) - CALL FlagError("Not implemented.",err,error,*999) - CASE(GLOBAL_DERIV_S2) - CALL FlagError("Not implemented.",err,error,*999) - CASE(GLOBAL_DERIV_S1_S2) - CALL FlagError("Not implemented.",err,error,*999) - CASE DEFAULT - localError="The global derivative index of "//TRIM(NumberToVString( & - & DOMAIN_NODES%NODES(node_idx)%DERIVATIVES(deriv_idx)%GLOBAL_DERIVATIVE_INDEX,"*", & - & err,error))//" is invalid." - CALL FlagError(localError,err,error,*999) - END SELECT - CASE DEFAULT - localError="The variable type of "//TRIM(NumberToVString(variable_type,"*",err,error))//& - & " is invalid." - CALL FlagError(localError,err,error,*999) - END SELECT - ELSE - localError="The number of components does not correspond to the number of dimensions." - CALL FlagError(localError,err,error,*999) - ENDIF - - - CASE(EQUATIONS_SET_DARCY_EQUATION_THREE_DIM_2) - IF(NUMBER_OF_DIMENSIONS==3.AND.FIELD_VARIABLE%NUMBER_OF_COMPONENTS==4) THEN -!EXPONENTIAL - SELECT CASE(variable_type) - CASE(FIELD_U_VARIABLE_TYPE) - SELECT CASE(DOMAIN_NODES%NODES(node_idx)%DERIVATIVES(deriv_idx)%GLOBAL_DERIVATIVE_INDEX) - CASE(NO_GLOBAL_DERIV) - FACT = PERM_OVER_VIS_PARAM / L - ARG(1) = X(1) / L - ARG(2) = X(2) / L - ARG(3) = X(3) / L - IF(component_idx==1) THEN - !calculate u - VALUE = - FACT * EXP( ARG(1) ) * EXP( ARG(2) ) * EXP( ARG(3) ) - ELSE IF(component_idx==2) THEN - !calculate v - VALUE = - FACT * EXP( ARG(1) ) * EXP( ARG(2) ) * EXP( ARG(3) ) - ELSE IF(component_idx==3) THEN - !calculate w - VALUE = - FACT * EXP( ARG(1) ) * EXP( ARG(2) ) * EXP( ARG(3) ) - ELSE IF(component_idx==4) THEN - !calculate p - VALUE = EXP( ARG(1) ) * EXP( ARG(2) ) * EXP( ARG(3) ) - ELSE - CALL FlagError("Not implemented.",err,error,*999) - ENDIF - CASE(GLOBAL_DERIV_S1) - CALL FlagError("Not implemented.",err,error,*999) - CASE(GLOBAL_DERIV_S2) - CALL FlagError("Not implemented.",err,error,*999) - CASE(GLOBAL_DERIV_S1_S2) - CALL FlagError("Not implemented.",err,error,*999) - CASE DEFAULT - localError="The global derivative index of "//TRIM(NumberToVString( & - & DOMAIN_NODES%NODES(node_idx)%DERIVATIVES(deriv_idx)%GLOBAL_DERIVATIVE_INDEX,"*", & - & err,error))//" is invalid." - CALL FlagError(localError,err,error,*999) - END SELECT - CASE(FIELD_DELUDELN_VARIABLE_TYPE) - SELECT CASE(DOMAIN_NODES%NODES(node_idx)%DERIVATIVES(deriv_idx)%GLOBAL_DERIVATIVE_INDEX) - CASE(NO_GLOBAL_DERIV) - IF(component_idx==1) THEN - !calculate u - VALUE=0.0_DP - ELSE IF(component_idx==2) THEN - !calculate v - VALUE=0.0_DP - ELSE IF(component_idx==3) THEN - !calculate w - VALUE=0.0_DP - ELSE IF(component_idx==4) THEN - !calculate p - VALUE=0.0_DP - ELSE - CALL FlagError("Not implemented.",err,error,*999) - ENDIF - - CASE(GLOBAL_DERIV_S1) - CALL FlagError("Not implemented.",err,error,*999) - CASE(GLOBAL_DERIV_S2) - CALL FlagError("Not implemented.",err,error,*999) - CASE(GLOBAL_DERIV_S1_S2) - CALL FlagError("Not implemented.",err,error,*999) - CASE DEFAULT - localError="The global derivative index of "//TRIM(NumberToVString( & - & DOMAIN_NODES%NODES(node_idx)%DERIVATIVES(deriv_idx)%GLOBAL_DERIVATIVE_INDEX,"*", & - & err,error))//" is invalid." - CALL FlagError(localError,err,error,*999) - END SELECT - CASE DEFAULT - localError="The variable type of "//TRIM(NumberToVString(variable_type,"*",err,error))//& - & " is invalid." - CALL FlagError(localError,err,error,*999) - END SELECT - ELSE - localError="The number of components does not correspond to the number of dimensions." - CALL FlagError(localError,err,error,*999) - ENDIF - - CASE(EQUATIONS_SET_DARCY_EQUATION_THREE_DIM_3) - IF(NUMBER_OF_DIMENSIONS==3.AND.FIELD_VARIABLE%NUMBER_OF_COMPONENTS==4) THEN - !SINE/COSINE - SELECT CASE(variable_type) - CASE(FIELD_U_VARIABLE_TYPE) - SELECT CASE(DOMAIN_NODES%NODES(node_idx)%DERIVATIVES(deriv_idx)%GLOBAL_DERIVATIVE_INDEX) - CASE(NO_GLOBAL_DERIV) - FACT = 2.0_DP * PI * PERM_OVER_VIS_PARAM / L - ARG(1) = 2.0_DP * PI * X(1) / L - ARG(2) = 2.0_DP * PI * X(2) / L - ARG(3) = 2.0_DP * PI * X(3) / L - IF(component_idx==1) THEN - !calculate u - VALUE = - FACT * COS( ARG(1) ) * SIN( ARG(2) ) * SIN( ARG(3) ) - ELSE IF(component_idx==2) THEN - !calculate v - VALUE = - FACT * SIN( ARG(1) ) * COS( ARG(2) ) * SIN( ARG(3) ) - ELSE IF(component_idx==3) THEN - !calculate w - VALUE = - FACT * SIN( ARG(1) ) * SIN( ARG(2) ) * COS( ARG(3) ) - ELSE IF(component_idx==4) THEN - !calculate p - VALUE = SIN( ARG(1) ) * SIN( ARG(2) ) * SIN( ARG(3) ) - ELSE - CALL FlagError("Not implemented.",err,error,*999) - ENDIF - CASE(GLOBAL_DERIV_S1) - CALL FlagError("Not implemented.",err,error,*999) - CASE(GLOBAL_DERIV_S2) - CALL FlagError("Not implemented.",err,error,*999) - CASE(GLOBAL_DERIV_S1_S2) - CALL FlagError("Not implemented.",err,error,*999) - CASE DEFAULT - localError="The global derivative index of "//TRIM(NumberToVString( & - & DOMAIN_NODES%NODES(node_idx)%DERIVATIVES(deriv_idx)%GLOBAL_DERIVATIVE_INDEX,"*", & - & err,error))//" is invalid." - CALL FlagError(localError,err,error,*999) - END SELECT - CASE(FIELD_DELUDELN_VARIABLE_TYPE) - SELECT CASE(DOMAIN_NODES%NODES(node_idx)%DERIVATIVES(deriv_idx)%GLOBAL_DERIVATIVE_INDEX) - CASE(NO_GLOBAL_DERIV) - IF(component_idx==1) THEN - !calculate u - VALUE=0.0_DP - ELSE IF(component_idx==2) THEN - !calculate v - VALUE=0.0_DP - ELSE IF(component_idx==3) THEN - !calculate w - VALUE=0.0_DP - ELSE IF(component_idx==4) THEN - !calculate p - VALUE=0.0_DP - ELSE - CALL FlagError("Not implemented.",err,error,*999) - ENDIF - CASE(GLOBAL_DERIV_S1) - CALL FlagError("Not implemented.",err,error,*999) - CASE(GLOBAL_DERIV_S2) - CALL FlagError("Not implemented.",err,error,*999) - CASE(GLOBAL_DERIV_S1_S2) - CALL FlagError("Not implemented.",err,error,*999) - CASE DEFAULT - localError="The global derivative index of "//TRIM(NumberToVString( & - & DOMAIN_NODES%NODES(node_idx)%DERIVATIVES(deriv_idx)%GLOBAL_DERIVATIVE_INDEX,"*", & - & err,error))//" is invalid." - CALL FlagError(localError,err,error,*999) - END SELECT - CASE DEFAULT - localError="The variable type of "//TRIM(NumberToVString(variable_type,"*",err,error))//& - & " is invalid." - CALL FlagError(localError,err,error,*999) - END SELECT - ELSE - localError="The number of components does not correspond to the number of dimensions." - CALL FlagError(localError,err,error,*999) - ENDIF - CASE DEFAULT - localError="The analytic function type of "// & - & TRIM(NumberToVString(EQUATIONS_SET%ANALYTIC%ANALYTIC_FUNCTION_TYPE,"*",err,error))// & - & " is invalid." - CALL FlagError(localError,err,error,*999) - END SELECT - !Default to version 1 of each node derivative - local_ny=FIELD_VARIABLE%COMPONENTS(component_idx)%PARAM_TO_DOF_MAP% & - & NODE_PARAM2DOF_MAP%NODES(node_idx)%DERIVATIVES(deriv_idx)%VERSIONS(1) - CALL FIELD_PARAMETER_SET_UPDATE_LOCAL_DOF(DEPENDENT_FIELD,variable_type, & - & FIELD_ANALYTIC_VALUES_SET_TYPE,local_ny,VALUE,err,error,*999) - IF(variable_type==FIELD_U_VARIABLE_TYPE) THEN - - -! ! ! IF(DOMAIN_NODES%NODES(node_idx)%BOUNDARY_NODE) THEN -! ! ! !If we are a boundary node then set the analytic value on the boundary -! ! ! IF(component_idx<=NUMBER_OF_DIMENSIONS) THEN -! ! ! CALL BOUNDARY_CONDITIONS_SET_LOCAL_DOF(BOUNDARY_CONDITIONS,variable_type,local_ny, & -! ! ! & BOUNDARY_CONDITION_FIXED,VALUE,err,error,*999) -! ! ! BOUND_COUNT=BOUND_COUNT+1 -! ! ! ENDIF -! ! ! ELSE -! ! ! IF(component_idx<=NUMBER_OF_DIMENSIONS) THEN -! ! ! CALL FIELD_PARAMETER_SET_UPDATE_LOCAL_DOF(DEPENDENT_FIELD,variable_type, & -! ! ! & FIELD_VALUES_SET_TYPE,local_ny,VALUE,err,error,*999) -! ! ! ENDIF -! ! ! ENDIF - - - - - !If we are a boundary node then set the analytic value on the boundary - IF(NUMBER_OF_DIMENSIONS==2) THEN - IF(ABS(X(1)-BOUNDARY_X(1,1))NUMBER_OF_DIMENSIONS) THEN - IF(DOMAIN%topology%elements%maximum_number_of_element_parameters==3.OR. & - & DOMAIN%topology%elements%maximum_number_of_element_parameters==6.OR. & - & DOMAIN%topology%elements%maximum_number_of_element_parameters==10) THEN - - IF(ABS(X(1)-BOUNDARY_X(1,1))NUMBER_OF_DIMENSIONS) THEN - IF(DOMAIN%topology%elements%maximum_number_of_element_parameters==4.OR. & - & DOMAIN%topology%elements%maximum_number_of_element_parameters==10.OR. & - & DOMAIN%topology%elements%maximum_number_of_element_parameters==20) THEN - IF(ABS(X(1)-BOUNDARY_X(1,1))Update geometric field for ALE Darcy problem - SUBROUTINE Darcy_PreSolveGetSolidDisplacement(CONTROL_LOOP,SOLVER,err,error,*) - - !Argument variables - TYPE(CONTROL_LOOP_TYPE), POINTER :: CONTROL_LOOP !CONTROL_LOOP - DO loop_idx=1,CONTROL_LOOP%CONTROL_LOOP_LEVEL - IF(CONTROL_TIME_LOOP%LOOP_TYPE==PROBLEM_CONTROL_TIME_LOOP_TYPE) THEN - CALL CONTROL_LOOP_CURRENT_TIMES_GET(CONTROL_TIME_LOOP,CURRENT_TIME,TIME_INCREMENT,err,error,*999) - EXIT - ENDIF - IF (ASSOCIATED(CONTROL_LOOP%PARENT_LOOP)) THEN - CONTROL_TIME_LOOP=>CONTROL_TIME_LOOP%PARENT_LOOP - ELSE - CALL FlagError("Could not find a time control loop.",err,error,*999) - ENDIF - ENDDO - - IF(DIAGNOSTICS1) THEN - CALL WRITE_STRING(DIAGNOSTIC_OUTPUT_TYPE, & - & "*******************************************************************************************************", & - & err,error,*999) - CALL WRITE_STRING_VALUE(DIAGNOSTIC_OUTPUT_TYPE,"CURRENT_TIME = ",CURRENT_TIME,err,error,*999) - CALL WRITE_STRING_VALUE(DIAGNOSTIC_OUTPUT_TYPE,"TIME_INCREMENT = ",TIME_INCREMENT,err,error,*999) - CALL WRITE_STRING(DIAGNOSTIC_OUTPUT_TYPE, & - & "*******************************************************************************************************", & - & err,error,*999) - ENDIF - - IF(ASSOCIATED(SOLVER)) THEN - IF(ASSOCIATED(CONTROL_LOOP%PROBLEM)) THEN - ROOT_CONTROL_LOOP=>CONTROL_LOOP%PROBLEM%CONTROL_LOOP - IF(.NOT.ALLOCATED(CONTROL_LOOP%PROBLEM%SPECIFICATION)) THEN - CALL FlagError("Problem specification is not allocated.",err,error,*999) - ELSE IF(SIZE(CONTROL_LOOP%PROBLEM%SPECIFICATION,1)<3) THEN - CALL FlagError("Problem specification must have three entries for a Darcy equation problem.",err,error,*999) - END IF - SELECT CASE(CONTROL_LOOP%PROBLEM%SPECIFICATION(3)) - CASE(PROBLEM_STANDARD_DARCY_SUBTYPE) - ! do nothing - CASE(PROBLEM_QUASISTATIC_DARCY_SUBTYPE) - ! do nothing - CASE(PROBLEM_TRANSIENT_DARCY_SUBTYPE) - ! do nothing - CASE(PROBLEM_ALE_DARCY_SUBTYPE) - !--- Motion: specified - IF(SOLVER%GLOBAL_NUMBER==SOLVER_NUMBER_DARCY) THEN - SOLVER_EQUATIONS_DARCY=>SOLVER%SOLVER_EQUATIONS - IF(ASSOCIATED(SOLVER_EQUATIONS_DARCY)) THEN - SOLVER_MAPPING_DARCY=>SOLVER_EQUATIONS_DARCY%SOLVER_MAPPING - IF(ASSOCIATED(SOLVER_MAPPING_DARCY)) THEN - EQUATIONS_SET_DARCY=>SOLVER_MAPPING_DARCY%EQUATIONS_SETS(1)%ptr - IF(ASSOCIATED(EQUATIONS_SET_DARCY)) THEN - IF(.NOT.ALLOCATED(equations_set_darcy%specification)) THEN - CALL FlagError("Equations set specification is not allocated.",err,error,*999) - ELSE IF(SIZE(equations_set_darcy%specification,1)/=3) THEN - CALL FlagError("Equations set specification must have three entries for a Darcy type equations set.", & - & err,error,*999) - END IF - SELECT CASE(EQUATIONS_SET_DARCY%SPECIFICATION(3)) - CASE(EQUATIONS_SET_STANDARD_DARCY_SUBTYPE) - ! do nothing - CASE(EQUATIONS_SET_QUASISTATIC_DARCY_SUBTYPE) - ! do nothing - CASE(EQUATIONS_SET_ALE_DARCY_SUBTYPE,EQUATIONS_SET_INCOMPRESSIBLE_FINITE_ELASTICITY_DARCY_SUBTYPE, & - & EQUATIONS_SET_TRANSIENT_ALE_DARCY_SUBTYPE,EQUATIONS_SET_ELASTICITY_DARCY_INRIA_MODEL_SUBTYPE, & - & EQUATIONS_SET_INCOMPRESSIBLE_ELASTICITY_DRIVEN_DARCY_SUBTYPE) - CALL WRITE_STRING(GENERAL_OUTPUT_TYPE,"Darcy motion specified ... ",err,error,*999) - GEOMETRIC_FIELD_DARCY=>EQUATIONS_SET_DARCY%GEOMETRY%GEOMETRIC_FIELD - IF(ASSOCIATED(GEOMETRIC_FIELD_DARCY)) THEN - ALPHA = 0.085_DP * sin( 2.0_DP * PI * CURRENT_TIME / 4.0_DP ) - - CALL FIELD_PARAMETER_SETS_COPY(GEOMETRIC_FIELD_DARCY,FIELD_U_VARIABLE_TYPE, & - & FIELD_INITIAL_VALUES_SET_TYPE,FIELD_MESH_DISPLACEMENT_SET_TYPE,ALPHA,err,error,*999) - ELSE - CALL FlagError("Geometric field is not associated.",err,error,*999) - ENDIF - CASE DEFAULT - localError="Equations set subtype " & - & //TRIM(NumberToVString(EQUATIONS_SET_DARCY%SPECIFICATION(3),"*",err,error))// & - & " is not valid for a Darcy equation fluid type of a fluid mechanics problem class." - CALL FlagError(localError,err,error,*999) - END SELECT - ELSE - CALL FlagError("Equations set is not associated.",err,error,*999) - ENDIF - ELSE - CALL FlagError("Solver mapping is not associated.",err,error,*999) - ENDIF - ELSE - CALL FlagError("Solver equations is not associated.",err,error,*999) - ENDIF - ELSE - ! do nothing - ENDIF - CASE(PROBLEM_PGM_DARCY_SUBTYPE,PROBLEM_PGM_TRANSIENT_DARCY_SUBTYPE,PROBLEM_PGM_ELASTICITY_DARCY_SUBTYPE) - !--- Motion: read in from a file - IF(SOLVER%GLOBAL_NUMBER==SOLVER_NUMBER_DARCY) THEN - CALL SOLVERS_SOLVER_GET(SOLVER%SOLVERS,SOLVER_NUMBER_DARCY,SOLVER_DARCY,err,error,*999) - SOLVER_EQUATIONS_DARCY=>SOLVER_DARCY%SOLVER_EQUATIONS - IF(ASSOCIATED(SOLVER_EQUATIONS_DARCY)) THEN - SOLVER_MAPPING_DARCY=>SOLVER_EQUATIONS_DARCY%SOLVER_MAPPING - IF(ASSOCIATED(SOLVER_MAPPING_DARCY)) THEN - EQUATIONS_SET_DARCY=>SOLVER_MAPPING_DARCY%EQUATIONS_SETS(1)%ptr - IF(ASSOCIATED(EQUATIONS_SET_DARCY)) THEN - GEOMETRIC_FIELD_DARCY=>EQUATIONS_SET_DARCY%GEOMETRY%GEOMETRIC_FIELD - ELSE - CALL FlagError("Darcy equations set is not associated.",err,error,*999) - END IF - IF(SOLVER%outputType>=SOLVER_PROGRESS_OUTPUT) THEN - CALL WRITE_STRING(GENERAL_OUTPUT_TYPE,"Darcy motion read from a file ... ",err,error,*999) - ENDIF - - CALL FIELD_NUMBER_OF_COMPONENTS_GET(EQUATIONS_SET_DARCY%GEOMETRY%GEOMETRIC_FIELD, & - & FIELD_U_VARIABLE_TYPE,NUMBER_OF_DIMENSIONS,err,error,*999) - - !Copy input to Darcy' geometric field - INPUT_TYPE=42 - INPUT_OPTION=2 - CALL FIELD_PARAMETER_SET_DATA_GET(EQUATIONS_SET_DARCY%GEOMETRY%GEOMETRIC_FIELD, & - & FIELD_U_VARIABLE_TYPE,FIELD_MESH_DISPLACEMENT_SET_TYPE,MESH_DISPLACEMENT_VALUES,err,error,*999) - CALL FLUID_MECHANICS_IO_READ_DATA(SOLVER_LINEAR_TYPE,MESH_DISPLACEMENT_VALUES, & - & NUMBER_OF_DIMENSIONS,INPUT_TYPE,INPUT_OPTION,CONTROL_LOOP%TIME_LOOP%ITERATION_NUMBER,1.0_DP, & - & err,error,*999) - CALL FIELD_PARAMETER_SET_UPDATE_START(EQUATIONS_SET_DARCY%GEOMETRY%GEOMETRIC_FIELD, & - & FIELD_U_VARIABLE_TYPE,FIELD_MESH_DISPLACEMENT_SET_TYPE,err,error,*999) - CALL FIELD_PARAMETER_SET_UPDATE_FINISH(EQUATIONS_SET_DARCY%GEOMETRY%GEOMETRIC_FIELD, & - & FIELD_U_VARIABLE_TYPE,FIELD_MESH_DISPLACEMENT_SET_TYPE,err,error,*999) - ELSE - CALL FlagError("Darcy solver mapping is not associated.",err,error,*999) - END IF - ELSE - CALL FlagError("Darcy solver equations are not associated.",err,error,*999) - END IF - - IF(DIAGNOSTICS1) THEN - NDOFS_TO_PRINT = SIZE(MESH_DISPLACEMENT_VALUES,1) - CALL WRITE_STRING_VECTOR(DIAGNOSTIC_OUTPUT_TYPE,1,1,NDOFS_TO_PRINT,NDOFS_TO_PRINT,NDOFS_TO_PRINT,& - & MESH_DISPLACEMENT_VALUES,'(" MESH_DISPLACEMENT_VALUES = ",4(X,E13.6))','4(4(X,E13.6))', & - & err,error,*999) - ENDIF - ELSE - ! in case of a solver number different from 2: do nothing - ENDIF - CASE(PROBLEM_STANDARD_ELASTICITY_DARCY_SUBTYPE,PROBLEM_QUASISTATIC_ELASTICITY_TRANSIENT_DARCY_SUBTYPE, & - & PROBLEM_QUASISTATIC_ELAST_TRANS_DARCY_MAT_SOLVE_SUBTYPE) - !--- Motion: defined by fluid-solid interaction (thus read from solid's dependent field) - IF(SOLVER%GLOBAL_NUMBER==SOLVER_NUMBER_DARCY) THEN !It is called with 'SOLVER%GLOBAL_NUMBER=SOLVER_NUMBER_DARCY', otherwise it doesn't work - !--- Get the dependent field of the finite elasticity equations - IF(SOLVER%outputType>=SOLVER_PROGRESS_OUTPUT) THEN - CALL WRITE_STRING(GENERAL_OUTPUT_TYPE,"Darcy motion read from solid's dependent field ... ",err,error,*999) - ENDIF - SELECT CASE(CONTROL_LOOP%PROBLEM%SPECIFICATION(3)) - CASE(PROBLEM_STANDARD_ELASTICITY_DARCY_SUBTYPE) - CALL CONTROL_LOOP_GET(ROOT_CONTROL_LOOP,[1,CONTROL_LOOP_NODE],CONTROL_LOOP_SOLID,err,error,*999) - CASE(PROBLEM_QUASISTATIC_ELASTICITY_TRANSIENT_DARCY_SUBTYPE,PROBLEM_QUASISTATIC_ELAST_TRANS_DARCY_MAT_SOLVE_SUBTYPE) - CALL CONTROL_LOOP_GET(ROOT_CONTROL_LOOP,[1,1,CONTROL_LOOP_NODE],CONTROL_LOOP_SOLID,err,error,*999) - END SELECT - CALL SOLVERS_SOLVER_GET(CONTROL_LOOP_SOLID%SOLVERS,SOLVER_NUMBER_SOLID, & - & SOLVER_FINITE_ELASTICITY,err,error,*999) - SOLVER_EQUATIONS_FINITE_ELASTICITY=>SOLVER_FINITE_ELASTICITY%SOLVER_EQUATIONS - IF(ASSOCIATED(SOLVER_EQUATIONS_FINITE_ELASTICITY)) THEN - SOLVER_MAPPING_FINITE_ELASTICITY=>SOLVER_EQUATIONS_FINITE_ELASTICITY%SOLVER_MAPPING - IF(ASSOCIATED(SOLVER_MAPPING_FINITE_ELASTICITY)) THEN - EQUATIONS_SET_FINITE_ELASTICITY=>SOLVER_MAPPING_FINITE_ELASTICITY%EQUATIONS_SETS(1)%ptr - IF(ASSOCIATED(EQUATIONS_SET_FINITE_ELASTICITY)) THEN - DEPENDENT_FIELD_FINITE_ELASTICITY=>EQUATIONS_SET_FINITE_ELASTICITY%DEPENDENT%DEPENDENT_FIELD - IF(ASSOCIATED(DEPENDENT_FIELD_FINITE_ELASTICITY)) THEN - !No longer needed, since no more 'Field_ParametersToFieldParametersCopy' -! CALL FIELD_NUMBER_OF_COMPONENTS_GET(DEPENDENT_FIELD_FINITE_ELASTICITY, & -! & FIELD_U_VARIABLE_TYPE,NUMBER_OF_COMPONENTS_DEPENDENT_FIELD_FINITE_ELASTICITY,err,error,*999) - ELSE - CALL FlagError("DEPENDENT_FIELD_FINITE_ELASTICITY is not associated.",err,error,*999) - END IF - ELSE - CALL FlagError("Finite elasticity equations set is not associated.",err,error,*999) - END IF - ELSE - CALL FlagError("Finite elasticity solver mapping is not associated.",err,error,*999) - END IF - ELSE - CALL FlagError("Finite elasticity solver equations are not associated.",err,error,*999) - END IF - - !--- Get the geometric field for the ALE Darcy equations - CALL SOLVERS_SOLVER_GET(SOLVER%SOLVERS,SOLVER_NUMBER_DARCY,SOLVER_DARCY,err,error,*999) - SOLVER_EQUATIONS_DARCY=>SOLVER_DARCY%SOLVER_EQUATIONS - IF(ASSOCIATED(SOLVER_EQUATIONS_DARCY)) THEN - SOLVER_MAPPING_DARCY=>SOLVER_EQUATIONS_DARCY%SOLVER_MAPPING - IF(ASSOCIATED(SOLVER_MAPPING_DARCY)) THEN - EQUATIONS_SET_DARCY=>SOLVER_MAPPING_DARCY%EQUATIONS_SETS(1)%ptr - IF(ASSOCIATED(EQUATIONS_SET_DARCY)) THEN - GEOMETRIC_FIELD_DARCY=>EQUATIONS_SET_DARCY%GEOMETRY%GEOMETRIC_FIELD - IF(ASSOCIATED(GEOMETRIC_FIELD_DARCY)) THEN - !No longer needed, since no more 'Field_ParametersToFieldParametersCopy' -! CALL FIELD_NUMBER_OF_COMPONENTS_GET(GEOMETRIC_FIELD_DARCY, & -! & FIELD_U_VARIABLE_TYPE,NUMBER_OF_COMPONENTS_GEOMETRIC_FIELD_DARCY,err,error,*999) - ELSE - CALL FlagError("GEOMETRIC_FIELD_DARCY is not associated.",err,error,*999) - END IF - ELSE - CALL FlagError("Darcy equations set is not associated.",err,error,*999) - END IF - ELSE - CALL FlagError("Darcy solver mapping is not associated.",err,error,*999) - END IF - ELSE - CALL FlagError("Darcy solver equations are not associated.",err,error,*999) - END IF - - !--- Copy the result from Finite-elasticity's dependent field to ALE Darcy's geometric field - !--- First: FIELD_MESH_DISPLACEMENT_SET_TYPE = - FIELD_PREVIOUS_VALUES_SET_TYPE - ALPHA=-1.0_DP - CALL FIELD_PARAMETER_SETS_COPY(GEOMETRIC_FIELD_DARCY,FIELD_U_VARIABLE_TYPE, & - & FIELD_PREVIOUS_VALUES_SET_TYPE,FIELD_MESH_DISPLACEMENT_SET_TYPE,ALPHA,err,error,*999) - - ! Write 'FIELD_PREVIOUS_VALUES_SET_TYPE' - IF(DIAGNOSTICS3) THEN - NULLIFY( DUMMY_VALUES2 ) - CALL FIELD_PARAMETER_SET_DATA_GET(GEOMETRIC_FIELD_DARCY,FIELD_U_VARIABLE_TYPE, & - & FIELD_PREVIOUS_VALUES_SET_TYPE,DUMMY_VALUES2,err,error,*999) - NDOFS_TO_PRINT = SIZE(DUMMY_VALUES2,1) - CALL WRITE_STRING_VECTOR(DIAGNOSTIC_OUTPUT_TYPE,1,1,NDOFS_TO_PRINT,NDOFS_TO_PRINT,NDOFS_TO_PRINT,DUMMY_VALUES2, & - & '(" GEOMETRIC_FIELD_DARCY,FIELD_U_VARIABLE_TYPE,FIELD_PREVIOUS_VALUES_SET_TYPE = ",4(X,E13.6))',& - & '4(4(X,E13.6))',err,error,*999) - CALL FIELD_PARAMETER_SET_DATA_RESTORE(GEOMETRIC_FIELD_DARCY,FIELD_U_VARIABLE_TYPE, & - & FIELD_PREVIOUS_VALUES_SET_TYPE,DUMMY_VALUES2,err,error,*999) - ENDIF - - !--- Second: Get a pointer to the solution values of the solid - ! (deformed absolute positions in x, y, z; possibly solid pressure) - CALL FIELD_PARAMETER_SET_DATA_GET(DEPENDENT_FIELD_FINITE_ELASTICITY,FIELD_U_VARIABLE_TYPE, & - & FIELD_VALUES_SET_TYPE,SOLUTION_VALUES_SOLID,err,error,*999) -! CALL FIELD_PARAMETER_SET_DATA_RESTORE(DEPENDENT_FIELD_FINITE_ELASTICITY,FIELD_U_VARIABLE_TYPE, & -! & FIELD_VALUES_SET_TYPE,SOLUTION_VALUES_SOLID,err,error,*999) ! necessary ??? - - ! Write 'DEPENDENT_FIELD_FINITE_ELASTICITY' - IF(DIAGNOSTICS3) THEN - NULLIFY( DUMMY_VALUES2 ) - CALL FIELD_PARAMETER_SET_DATA_GET(DEPENDENT_FIELD_FINITE_ELASTICITY,FIELD_U_VARIABLE_TYPE, & - & FIELD_VALUES_SET_TYPE,DUMMY_VALUES2,err,error,*999) - NDOFS_TO_PRINT = SIZE(DUMMY_VALUES2,1) - CALL WRITE_STRING_VECTOR(DIAGNOSTIC_OUTPUT_TYPE,1,1,NDOFS_TO_PRINT,NDOFS_TO_PRINT,NDOFS_TO_PRINT,DUMMY_VALUES2, & - & '(" DEPENDENT_FIELD_FINITE_ELASTICITY,FIELD_U_VARIABLE_TYPE,FIELD_VALUES_SET_TYPE = ",4(X,E13.6))',& - & '4(4(X,E13.6))',err,error,*999) - CALL FIELD_PARAMETER_SET_DATA_RESTORE(DEPENDENT_FIELD_FINITE_ELASTICITY,FIELD_U_VARIABLE_TYPE, & - & FIELD_VALUES_SET_TYPE,DUMMY_VALUES2,err,error,*999) - ENDIF - - !--- Third: FIELD_MESH_DISPLACEMENT_SET_TYPE += Deformed absolute position of solid - NUMBER_OF_DOFS = GEOMETRIC_FIELD_DARCY%VARIABLE_TYPE_MAP(FIELD_U_VARIABLE_TYPE)%ptr%NUMBER_OF_DOFS - DO dof_number=1,NUMBER_OF_DOFS - ! assumes fluid-geometry and solid-dependent mesh are identical \todo: introduce check - CALL FIELD_PARAMETER_SET_ADD_LOCAL_DOF(GEOMETRIC_FIELD_DARCY, & - & FIELD_U_VARIABLE_TYPE,FIELD_MESH_DISPLACEMENT_SET_TYPE,dof_number, & - & SOLUTION_VALUES_SOLID(dof_number), & - & err,error,*999) - -!--- !!! Why not directly do the mesh update here ??? !!! - CALL FIELD_PARAMETER_SET_UPDATE_LOCAL_DOF(GEOMETRIC_FIELD_DARCY, & - & FIELD_U_VARIABLE_TYPE,FIELD_VALUES_SET_TYPE,dof_number, & - & SOLUTION_VALUES_SOLID(dof_number), & - & err,error,*999) -!--- - - END DO - CALL FIELD_PARAMETER_SET_UPDATE_START(GEOMETRIC_FIELD_DARCY, & - & FIELD_U_VARIABLE_TYPE, FIELD_MESH_DISPLACEMENT_SET_TYPE,err,error,*999) - CALL FIELD_PARAMETER_SET_UPDATE_FINISH(GEOMETRIC_FIELD_DARCY, & - & FIELD_U_VARIABLE_TYPE, FIELD_MESH_DISPLACEMENT_SET_TYPE,err,error,*999) - ! - CALL FIELD_PARAMETER_SET_UPDATE_START(GEOMETRIC_FIELD_DARCY, & - & FIELD_U_VARIABLE_TYPE, FIELD_VALUES_SET_TYPE,err,error,*999) - CALL FIELD_PARAMETER_SET_UPDATE_FINISH(GEOMETRIC_FIELD_DARCY, & - & FIELD_U_VARIABLE_TYPE, FIELD_VALUES_SET_TYPE,err,error,*999) - - ! Write 'FIELD_MESH_DISPLACEMENT_SET_TYPE' - IF(DIAGNOSTICS3) THEN - NULLIFY( DUMMY_VALUES2 ) - CALL FIELD_PARAMETER_SET_DATA_GET(GEOMETRIC_FIELD_DARCY,FIELD_U_VARIABLE_TYPE, & - & FIELD_MESH_DISPLACEMENT_SET_TYPE,DUMMY_VALUES2,err,error,*999) - NDOFS_TO_PRINT = SIZE(DUMMY_VALUES2,1) - CALL WRITE_STRING_VECTOR(DIAGNOSTIC_OUTPUT_TYPE,1,1,NDOFS_TO_PRINT,NDOFS_TO_PRINT,NDOFS_TO_PRINT,DUMMY_VALUES2, & - & '(" GEOMETRIC_FIELD_DARCY,FIELD_U_VARIABLE_TYPE,FIELD_MESH_DISPLACEMENT_SET_TYPE = ",4(X,E13.6))',& - & '4(4(X,E13.6))',err,error,*999) - CALL FIELD_PARAMETER_SET_DATA_RESTORE(GEOMETRIC_FIELD_DARCY,FIELD_U_VARIABLE_TYPE, & - & FIELD_MESH_DISPLACEMENT_SET_TYPE,DUMMY_VALUES2,err,error,*999) - ENDIF - ELSE - ! do nothing - END IF - CASE DEFAULT - localError="Problem subtype "//TRIM(NumberToVString(CONTROL_LOOP%PROBLEM%SPECIFICATION(3),"*",err,error))// & - & " is not valid for a Darcy equation fluid type of a fluid mechanics problem class." - CALL FlagError(localError,err,error,*999) - END SELECT - ELSE - CALL FlagError("Problem is not associated.",err,error,*999) - ENDIF - ELSE - CALL FlagError("Solver is not associated.",err,error,*999) - ENDIF - ELSE - CALL FlagError("Control loop is not associated.",err,error,*999) - ENDIF - - EXITS("Darcy_PreSolveGetSolidDisplacement") - RETURN -999 ERRORSEXITS("Darcy_PreSolveGetSolidDisplacement",err,error) - RETURN 1 - - END SUBROUTINE Darcy_PreSolveGetSolidDisplacement - - ! - !================================================================================================================================ - - !>Store solution of previous subiteration iterate - SUBROUTINE Darcy_PreSolveStorePreviousIterate(CONTROL_LOOP,SOLVER,err,error,*) - - !Argument variables - TYPE(CONTROL_LOOP_TYPE), POINTER :: CONTROL_LOOP !SOLVER%SOLVER_EQUATIONS - IF(ASSOCIATED(SOLVER_EQUATIONS)) THEN - SOLVER_MAPPING=>SOLVER_equations%SOLVER_MAPPING - IF(ASSOCIATED(SOLVER_MAPPING)) THEN - !loop over the equations sets - DO equations_set_idx=1,SOLVER_MAPPING%NUMBER_OF_EQUATIONS_SETS - EQUATIONS_SET=>SOLVER_MAPPING%EQUATIONS_SETS(equations_set_idx)%ptr - IF(ASSOCIATED(EQUATIONS_SET)) THEN - IF(.NOT.ALLOCATED(EQUATIONS_SET%SPECIFICATION)) THEN - CALL FlagError("Equations set specification is not allocated.",err,error,*999) - ELSE IF(SIZE(EQUATIONS_SET%SPECIFICATION,1)/=3) THEN - CALL FlagError("Equations set specification must have three entries for a Darcy type equations set.", & - & err,error,*999) - END IF - SELECT CASE(EQUATIONS_SET%SPECIFICATION(3)) - CASE(EQUATIONS_SET_STANDARD_DARCY_SUBTYPE) - ! do nothing - CASE(EQUATIONS_SET_QUASISTATIC_DARCY_SUBTYPE) - ! do nothing - CASE(EQUATIONS_SET_ALE_DARCY_SUBTYPE,EQUATIONS_SET_INCOMPRESSIBLE_FINITE_ELASTICITY_DARCY_SUBTYPE, & - & EQUATIONS_SET_TRANSIENT_ALE_DARCY_SUBTYPE,EQUATIONS_SET_ELASTICITY_DARCY_INRIA_MODEL_SUBTYPE, & - & EQUATIONS_SET_INCOMPRESSIBLE_ELASTICITY_DRIVEN_DARCY_SUBTYPE, & - & EQUATIONS_SET_INCOMPRESSIBLE_ELAST_MULTI_COMP_DARCY_SUBTYPE) - DEPENDENT_FIELD=>EQUATIONS_SET%DEPENDENT%DEPENDENT_FIELD - - IF(ASSOCIATED(DEPENDENT_FIELD)) THEN - write(*,*)'-------------------------------------------------------' - write(*,*)'+++ Storing previous subiteration iterate +++' - write(*,*)'-------------------------------------------------------' - !--- Store the DEPENDENT field values of the previous subiteration iterate - vectorMapping=>EQUATIONS_SET%equations%vectorEquations%vectorMapping - IF(ASSOCIATED(vectorMapping)) THEN - SELECT CASE(EQUATIONS_SET%SPECIFICATION(3)) - CASE(EQUATIONS_SET_ALE_DARCY_SUBTYPE,EQUATIONS_SET_INCOMPRESSIBLE_FINITE_ELASTICITY_DARCY_SUBTYPE) - FIELD_VARIABLE=>vectorMapping%linearMapping%equationsMatrixToVarMaps(1)%VARIABLE - ! '1' associated with linear matrix - CASE(EQUATIONS_SET_TRANSIENT_ALE_DARCY_SUBTYPE,EQUATIONS_SET_ELASTICITY_DARCY_INRIA_MODEL_SUBTYPE, & - & EQUATIONS_SET_INCOMPRESSIBLE_ELASTICITY_DRIVEN_DARCY_SUBTYPE, & - & EQUATIONS_SET_INCOMPRESSIBLE_ELAST_MULTI_COMP_DARCY_SUBTYPE) - FIELD_VARIABLE=>vectorMapping%dynamicMapping%equationsMatrixToVarMaps(1)%VARIABLE - END SELECT - IF(ASSOCIATED(FIELD_VARIABLE)) THEN - FIELD_VAR_TYPE=FIELD_VARIABLE%VARIABLE_TYPE - ALPHA = 1.0_DP - CALL FIELD_PARAMETER_SETS_COPY(DEPENDENT_FIELD,FIELD_VAR_TYPE, & - & FIELD_VALUES_SET_TYPE,FIELD_PREVIOUS_ITERATION_VALUES_SET_TYPE,ALPHA,err,error,*999) - ELSE - CALL FlagError("FIELD_VAR_TYPE is not associated.",err,error,*999) - ENDIF - ELSE - CALL FlagError("vectorMapping is not associated.",err,error,*999) - ENDIF - ELSE - CALL FlagError("Dependent field is not associated.",err,error,*999) - ENDIF - CASE DEFAULT - localError="Equations set subtype " & - & //TRIM(NumberToVString(EQUATIONS_SET%SPECIFICATION(3),"*",err,error))// & - & " is not valid for a Darcy equation fluid type of a fluid mechanics problem class." - CALL FlagError(localError,err,error,*999) - END SELECT - ELSE - CALL FlagError("Equations set is not associated.",err,error,*999) - ENDIF - ENDDO - ELSE - CALL FlagError("Solver mapping is not associated.",err,error,*999) - ENDIF - ELSE - CALL FlagError("Solver equations is not associated.",err,error,*999) - ENDIF - CASE DEFAULT - localError="Problem subtype "//TRIM(NumberToVString(CONTROL_LOOP%PROBLEM%SPECIFICATION(3),"*",err,error))// & - & " is not valid for a Darcy equation fluid type of a fluid mechanics problem class." - CALL FlagError(localError,err,error,*999) - END SELECT - ELSE - CALL FlagError("Problem is not associated.",err,error,*999) - ENDIF - ELSE - ! do nothing - ENDIF - ELSE - CALL FlagError("Solver is not associated.",err,error,*999) - ENDIF - ELSE - CALL FlagError("Control loop is not associated.",err,error,*999) - ENDIF - - EXITS("Darcy_PreSolveStorePreviousIterate") - RETURN -999 ERRORSEXITS("Darcy_PreSolveStorePreviousIterate",err,error) - RETURN 1 - - END SUBROUTINE Darcy_PreSolveStorePreviousIterate - - ! - !================================================================================================================================ - ! - !updates the boundary conditions etc to the required analytic values - !for the case EquationsSetIncompElastDarcyAnalyticDarcy the pressure field obtained from the finite elasticity solve is overwritten - !by the appropriate mass increase for that time step - SUBROUTINE Darcy_PreSolveUpdateAnalyticValues(CONTROL_LOOP,SOLVER,err,error,*) - - !Argument variables - TYPE(CONTROL_LOOP_TYPE), POINTER :: CONTROL_LOOP !CONTROL_LOOP - DO loop_idx=1,CONTROL_LOOP%CONTROL_LOOP_LEVEL - IF(CONTROL_TIME_LOOP%LOOP_TYPE==PROBLEM_CONTROL_TIME_LOOP_TYPE) THEN - CALL CONTROL_LOOP_CURRENT_TIMES_GET(CONTROL_TIME_LOOP,CURRENT_TIME,TIME_INCREMENT,err,error,*999) - EXIT - ENDIF - IF (ASSOCIATED(CONTROL_LOOP%PARENT_LOOP)) THEN - CONTROL_TIME_LOOP=>CONTROL_TIME_LOOP%PARENT_LOOP - ELSE - CALL FlagError("Could not find a time control loop.",err,error,*999) - ENDIF - ENDDO - -! IF(ASSOCIATED(CONTROL_LOOP)) THEN -! CALL CONTROL_LOOP_CURRENT_TIMES_GET(CONTROL_LOOP,CURRENT_TIME,TIME_INCREMENT,err,error,*999) - !write(*,*)'CURRENT_TIME = ',CURRENT_TIME - !write(*,*)'TIME_INCREMENT = ',TIME_INCREMENT - IF(ASSOCIATED(SOLVER)) THEN - IF(ASSOCIATED(CONTROL_LOOP%PROBLEM)) THEN - IF(.NOT.ALLOCATED(CONTROL_LOOP%PROBLEM%SPECIFICATION)) THEN - CALL FlagError("Problem specification is not allocated.",err,error,*999) - ELSE IF(SIZE(CONTROL_LOOP%PROBLEM%SPECIFICATION,1)<3) THEN - CALL FlagError("Problem specification must have three entries for a Darcy equation problem.",err,error,*999) - END IF - SELECT CASE(CONTROL_LOOP%PROBLEM%SPECIFICATION(3)) - CASE(PROBLEM_QUASISTATIC_ELASTICITY_TRANSIENT_DARCY_SUBTYPE,PROBLEM_QUASISTATIC_ELAST_TRANS_DARCY_MAT_SOLVE_SUBTYPE) - SOLVER_EQUATIONS=>SOLVER%SOLVER_EQUATIONS - IF(ASSOCIATED(SOLVER_EQUATIONS)) THEN - !loop over all the equation sets and set the appropriate field variable type BCs and - !the source field associated with each equation set - DO eqnset_idx=1,SOLVER_equations%SOLVER_MAPPING%NUMBER_OF_EQUATIONS_SETS - SOLVER_MAPPING=>SOLVER_equations%SOLVER_MAPPING - EQUATIONS=>SOLVER_MAPPING%EQUATIONS_SET_TO_SOLVER_MAP(eqnset_idx)%EQUATIONS - IF(ASSOCIATED(EQUATIONS)) THEN - EQUATIONS_SET=>equations%equationsSet - IF(ASSOCIATED(EQUATIONS_SET)) THEN - IF(ASSOCIATED(EQUATIONS_SET%ANALYTIC)) THEN - IF(EQUATIONS_SET%ANALYTIC%ANALYTIC_FUNCTION_TYPE==EQUATIONS_SET_INCOMP_ELAST_DARCY_ANALYTIC_DARCY)THEN - !for this analytic case we copy the mass variable to the pressure variable - DEPENDENT_FIELD=>EQUATIONS_SET%DEPENDENT%DEPENDENT_FIELD - IF(ASSOCIATED(DEPENDENT_FIELD)) THEN - GEOMETRIC_FIELD=>EQUATIONS_SET%GEOMETRY%GEOMETRIC_FIELD - IF(ASSOCIATED(GEOMETRIC_FIELD)) THEN - CALL FIELD_NUMBER_OF_COMPONENTS_GET(GEOMETRIC_FIELD,FIELD_U_VARIABLE_TYPE,& - & NUMBER_OF_DIMENSIONS,err,error,*999) - NULLIFY(GEOMETRIC_VARIABLE) - NULLIFY(GEOMETRIC_PARAMETERS) - CALL Field_VariableGet(GEOMETRIC_FIELD,FIELD_U_VARIABLE_TYPE,GEOMETRIC_VARIABLE,err,error,*999) - CALL FIELD_PARAMETER_SET_DATA_GET(GEOMETRIC_FIELD,FIELD_U_VARIABLE_TYPE,FIELD_VALUES_SET_TYPE,& - & GEOMETRIC_PARAMETERS,err,error,*999) - EQUATIONS_SET%ANALYTIC%ANALYTIC_USER_PARAMS(1)=CURRENT_TIME -! DO variable_idx=1,DEPENDENT_FIELD%NUMBER_OF_VARIABLES - !variable_type=DEPENDENT_FIELD%VARIABLES(2*eqnset_idx-1)%VARIABLE_TYPE - variable_type=FIELD_V_VARIABLE_TYPE - FIELD_VARIABLE=>DEPENDENT_FIELD%VARIABLE_TYPE_MAP(variable_type)%ptr - IF(ASSOCIATED(FIELD_VARIABLE)) THEN -! DO component_idx=4,FIELD_VARIABLE%NUMBER_OF_COMPONENTS - - - CALL Field_ParametersToFieldParametersCopy(DEPENDENT_FIELD,FIELD_V_VARIABLE_TYPE, & - & FIELD_VALUES_SET_TYPE,4,DEPENDENT_FIELD,FIELD_U_VARIABLE_TYPE, & - & FIELD_VALUES_SET_TYPE,4,err,error,*999) - -! IF(FIELD_VARIABLE%COMPONENTS(component_idx)%INTERPOLATION_TYPE== & -! & FIELD_NODE_BASED_INTERPOLATION) THEN -! DOMAIN=>FIELD_VARIABLE%COMPONENTS(component_idx)%DOMAIN -! IF(ASSOCIATED(DOMAIN)) THEN -! IF(ASSOCIATED(DOMAIN%TOPOLOGY)) THEN -! DOMAIN_NODES=>DOMAIN%TOPOLOGY%NODES -! IF(ASSOCIATED(DOMAIN_NODES)) THEN -! !Loop over the local nodes excluding the ghosts. -! DO node_idx=1,DOMAIN_NODES%NUMBER_OF_NODES -! CALL FIELD_PARAMETER_SET_GET_NODE(DEPENDENT_FIELD,FIELD_V_VARIABLE_TYPE, & -! & FIELD_VALUES_SET_TYPE,1,node_idx,4,MASS_INCREASE,err,error,*999) -! CALL FIELD_PARAMETER_SET_UPDATE_NODE(DEPENDENT_FIELD,FIELD_U_VARIABLE_TYPE, & -! & FIELD_VALUES_SET_TYPE,1,node_idx,4,0.1*MASS_INCREASE,err,error,*999) -! write(*,*) MASS_INCREASE -! -! !!TODO \todo We should interpolate the geometric field here and the node position. -! ! DO dim_idx=1,NUMBER_OF_DIMENSIONS -! ! local_ny= & -! ! & GEOMETRIC_VARIABLE%COMPONENTS(dim_idx)%PARAM_TO_DOF_MAP%NODE_PARAM2DOF_MAP(1,node_idx) -! ! X(dim_idx)=GEOMETRIC_PARAMETERS(local_ny) -! ! ENDDO !dim_idx -! ! !Loop over the derivatives -! ! DO deriv_idx=1,DOMAIN_NODES%NODES(node_idx)%NUMBER_OF_DERIVATIVES -! ! ANALYTIC_FUNCTION_TYPE=EQUATIONS_SET%ANALYTIC%ANALYTIC_FUNCTION_TYPE -! ! GLOBAL_DERIV_INDEX=DOMAIN_NODES%NODES(node_idx)%GLOBAL_DERIVATIVE_INDEX(deriv_idx) -! ! ! CALL DIFFUSION_EQUATION_ANALYTIC_FUNCTIONS(VALUE,X, & -! ! ! & CURRENT_TIME,variable_type,GLOBAL_DERIV_INDEX, & -! ! ! & ANALYTIC_FUNCTION_TYPE,err,error,*999) -! ! local_ny=FIELD_VARIABLE%COMPONENTS(component_idx)%PARAM_TO_DOF_MAP% & -! ! & NODE_PARAM2DOF_MAP(deriv_idx,node_idx) -! ! CALL FIELD_PARAMETER_SET_UPDATE_LOCAL_DOF(DEPENDENT_FIELD,variable_type, & -! ! & FIELD_ANALYTIC_VALUES_SET_TYPE,local_ny,VALUE,err,error,*999) -! ! ! BOUNDARY_CONDITION_CHECK_VARIABLE=SOLVER_equations%BOUNDARY_CONDITIONS% & -! ! ! & BOUNDARY_CONDITIONS_VARIABLE_TYPE_MAP(variable_type)%ptr% & -! ! ! & CONDITION_TYPES(local_ny) -! ! ! IF(BOUNDARY_CONDITION_CHECK_VARIABLE==BOUNDARY_CONDITION_FIXED) THEN -! ! ! CALL FIELD_PARAMETER_SET_UPDATE_LOCAL_DOF(DEPENDENT_FIELD, & -! ! ! & variable_type,FIELD_VALUES_SET_TYPE,local_ny, & -! ! ! & VALUE,err,error,*999) -! ! ! ENDIF -! ! -! ! ! IF(variable_type==FIELD_U_VARIABLE_TYPE) THEN -! ! ! IF(DOMAIN_NODES%NODES(node_idx)%BOUNDARY_NODE) THEN -! ! !If we are a boundary node then set the analytic value on the boundary -! ! ! CALL BOUNDARY_CONDITIONS_SET_LOCAL_DOF(BOUNDARY_CONDITIONS,variable_type,local_ny, & -! ! ! & BOUNDARY_CONDITION_FIXED,VALUE,err,error,*999) -! ! ! ENDIF -! ! ! ENDIF -! ! ENDDO !deriv_idx -! ENDDO !node_idx -! ELSE -! CALL FlagError("Domain topology nodes is not associated.",err,error,*999) -! ENDIF -! ELSE -! CALL FlagError("Domain topology is not associated.",err,error,*999) -! ENDIF -! ELSE -! CALL FlagError("Domain is not associated.",err,error,*999) -! ENDIF -! ELSE -! CALL FlagError("Only node based interpolation is implemented.",err,error,*999) -! ENDIF -! ENDDO !component_idx - CALL FIELD_PARAMETER_SET_UPDATE_START(DEPENDENT_FIELD,variable_type, & - & FIELD_ANALYTIC_VALUES_SET_TYPE,err,error,*999) - CALL FIELD_PARAMETER_SET_UPDATE_FINISH(DEPENDENT_FIELD,variable_type, & - & FIELD_ANALYTIC_VALUES_SET_TYPE,err,error,*999) - CALL FIELD_PARAMETER_SET_UPDATE_START(DEPENDENT_FIELD,variable_type, & - & FIELD_VALUES_SET_TYPE,err,error,*999) - CALL FIELD_PARAMETER_SET_UPDATE_FINISH(DEPENDENT_FIELD,variable_type, & - & FIELD_VALUES_SET_TYPE,err,error,*999) - ELSE - CALL FlagError("Field variable is not associated.",err,error,*999) - ENDIF - -! ENDDO !variable_idx - CALL FIELD_PARAMETER_SET_DATA_RESTORE(GEOMETRIC_FIELD,FIELD_U_VARIABLE_TYPE,& - & FIELD_VALUES_SET_TYPE,GEOMETRIC_PARAMETERS,err,error,*999) - ELSE - CALL FlagError("Equations set geometric field is not associated.",err,error,*999) - ENDIF - ELSE - CALL FlagError("Equations set dependent field is not associated.",err,error,*999) - ENDIF - ENDIF - ELSE - !CALL FlagError("Equations set analytic is not associated.",err,error,*999) - ENDIF - ELSE - CALL FlagError("Equations set is not associated.",err,error,*999) - ENDIF - ELSE - CALL FlagError("Equations are not associated.",err,error,*999) - END IF -! ELSE -! CALL FlagError("Solver equations are not associated.",err,error,*999) -! END IF - CALL FIELD_PARAMETER_SET_UPDATE_START(EQUATIONS_SET%DEPENDENT%DEPENDENT_FIELD,FIELD_V_VARIABLE_TYPE, & - & FIELD_VALUES_SET_TYPE,err,error,*999) - CALL FIELD_PARAMETER_SET_UPDATE_FINISH(EQUATIONS_SET%DEPENDENT%DEPENDENT_FIELD,FIELD_V_VARIABLE_TYPE, & - & FIELD_VALUES_SET_TYPE,err,error,*999) -! IF(CONTROL_LOOP%PROBLEM%SPECIFICATION(3)==PROBLEM_LINEAR_SOURCE_DIFFUSION_SUBTYPE)THEN -! !>Set the source field to a specified analytical function -!MAY NEED TO USE THIS ULTIMATELY - BUT WILL REQUIRE IMPLEMENTING SOURCE FIELD & VECTOR FUNCTIONALITY FOR DARCY EQUATION -! IF(ASSOCIATED(EQUATIONS_SET)) THEN -! IF(ASSOCIATED(EQUATIONS_SET%ANALYTIC)) THEN -! sourceField=>EQUATIONS_SET%SOURCE%SOURCE_FIELD -! IF(ASSOCIATED(sourceField)) THEN -! GEOMETRIC_FIELD=>EQUATIONS_SET%GEOMETRY%GEOMETRIC_FIELD -! IF(ASSOCIATED(GEOMETRIC_FIELD)) THEN -! CALL FIELD_NUMBER_OF_COMPONENTS_GET(GEOMETRIC_FIELD,FIELD_U_VARIABLE_TYPE,NUMBER_OF_DIMENSIONS,err,error,*999) -! NULLIFY(GEOMETRIC_VARIABLE) -! CALL Field_VariableGet(GEOMETRIC_FIELD,FIELD_U_VARIABLE_TYPE,GEOMETRIC_VARIABLE,err,error,*999) -! CALL FIELD_PARAMETER_SET_DATA_GET(GEOMETRIC_FIELD,FIELD_U_VARIABLE_TYPE,FIELD_VALUES_SET_TYPE, & -! & GEOMETRIC_PARAMETERS,err,error,*999) -! variable_type=FIELD_U_VARIABLE_TYPE -! FIELD_VARIABLE=>sourceField%VARIABLE_TYPE_MAP(variable_type)%ptr -! IF(ASSOCIATED(FIELD_VARIABLE)) THEN -! DO component_idx=1,FIELD_VARIABLE%NUMBER_OF_COMPONENTS -! IF(FIELD_VARIABLE%COMPONENTS(component_idx)%INTERPOLATION_TYPE==FIELD_NODE_BASED_INTERPOLATION) THEN -! DOMAIN=>FIELD_VARIABLE%COMPONENTS(component_idx)%DOMAIN -! IF(ASSOCIATED(DOMAIN)) THEN -! IF(ASSOCIATED(DOMAIN%TOPOLOGY)) THEN -! DOMAIN_NODES=>DOMAIN%TOPOLOGY%NODES -! IF(ASSOCIATED(DOMAIN_NODES)) THEN -! !Loop over the local nodes excluding the ghosts. -! DO node_idx=1,DOMAIN_NODES%NUMBER_OF_NODES -! !!TODO \todo We should interpolate the geometric field here and the node position. -! DO dim_idx=1,NUMBER_OF_DIMENSIONS -! local_ny=GEOMETRIC_VARIABLE%COMPONENTS(dim_idx)%PARAM_TO_DOF_MAP%NODE_PARAM2DOF_MAP(1,& -! & node_idx) -! X(dim_idx)=GEOMETRIC_PARAMETERS(local_ny) -! ENDDO !dim_idx -! !Loop over the derivatives -! DO deriv_idx=1,DOMAIN_NODES%NODES(node_idx)%NUMBER_OF_DERIVATIVES -! SELECT CASE(EQUATIONS_SET%ANALYTIC%ANALYTIC_FUNCTION_TYPE) -! CASE(EQUATIONS_SET_DIFFUSION_EQUATION_THREE_DIM_1) -! VALUE_SOURCE=-1*A1*EXP(-1*CURRENT_TIME)*(X(1)*X(1)+X(2)*X(2)+X(3)*X(3)+6) -! CASE DEFAULT -! localError="The analytic function type of "// & -! & TRIM(NumberToVString(EQUATIONS_SET%ANALYTIC%ANALYTIC_FUNCTION_TYPE,"*",err,error))//& -! & " is invalid." -! CALL FlagError(localError,err,error,*999) -! END SELECT -! local_ny=FIELD_VARIABLE%COMPONENTS(component_idx)%PARAM_TO_DOF_MAP% & -! & NODE_PARAM2DOF_MAP(deriv_idx,node_idx) -! CALL FIELD_PARAMETER_SET_UPDATE_LOCAL_DOF(sourceField,FIELD_U_VARIABLE_TYPE, & -! & FIELD_VALUES_SET_TYPE,local_ny,VALUE_SOURCE,err,error,*999) -! ENDDO !deriv_idx -! ENDDO !node_idx -! ELSE -! CALL FlagError("Domain topology nodes is not associated.",err,error,*999) -! ENDIF -! ELSE -! CALL FlagError("Domain topology is not associated.",err,error,*999) -! ENDIF -! ELSE -! CALL FlagError("Domain is not associated.",err,error,*999) -! ENDIF -! ELSE -! CALL FlagError("Only node based interpolation is implemented.",err,error,*999) -! ENDIF -! ENDDO !component_idx -! CALL FIELD_PARAMETER_SET_UPDATE_START(sourceField,FIELD_U_VARIABLE_TYPE,FIELD_VALUES_SET_TYPE, & -! & err,error,*999) -! CALL FIELD_PARAMETER_SET_UPDATE_FINISH(sourceField,FIELD_U_VARIABLE_TYPE,FIELD_VALUES_SET_TYPE, & -! & err,error,*999) -! ELSE -! CALL FlagError("Field variable is not associated.",err,error,*999) -! ENDIF -! CALL FIELD_PARAMETER_SET_DATA_RESTORE(GEOMETRIC_FIELD,FIELD_U_VARIABLE_TYPE,FIELD_VALUES_SET_TYPE, & -! & GEOMETRIC_PARAMETERS,err,error,*999) -! ELSE -! CALL FlagError("Equations set geometric field is not associated.",err,error,*999) -! ENDIF -! ELSE -! CALL FlagError("Equations set source field is not associated.",err,error,*999) -! ENDIF -! ELSE -! CALL FlagError("Equations set analytic is not associated.",err,error,*999) -! ENDIF -! ELSE -! CALL FlagError("Equations set is not associated.",err,error,*999) -! ENDIF -! ENDIF - ENDDO !eqnset_idx - ELSE - CALL FlagError("Solver equations are not associated.",err,error,*999) - END IF - CASE DEFAULT - localError="Problem subtype "//TRIM(NumberToVString(CONTROL_LOOP%PROBLEM%SPECIFICATION(3),"*",err,error))// & - & " is not valid for a Darcy equation type of a fluid mechanics problem class." - CALL FlagError(localError,err,error,*999) - END SELECT - ELSE - CALL FlagError("Problem is not associated.",err,error,*999) - ENDIF - ELSE - CALL FlagError("Solver is not associated.",err,error,*999) - ENDIF - ELSE - CALL FlagError("Control loop is not associated.",err,error,*999) - ENDIF - - EXITS("Darcy_PreSolveUpdateAnalyticValues") - RETURN -999 ERRORSEXITS("Darcy_PreSolveUpdateAnalyticValues",err,error) - RETURN 1 - - END SUBROUTINE Darcy_PreSolveUpdateAnalyticValues - - ! - !================================================================================================================================ - ! - !> Monitor convergence of the Darcy solution - SUBROUTINE DARCY_EQUATION_MONITOR_CONVERGENCE(CONTROL_LOOP,SOLVER,err,error,*) - - !Argument variables - TYPE(CONTROL_LOOP_TYPE), POINTER :: CONTROL_LOOP !SOLVER%SOLVER_EQUATIONS - IF(ASSOCIATED(SOLVER_EQUATIONS)) THEN - SOLVER_MAPPING=>SOLVER_equations%SOLVER_MAPPING - IF(ASSOCIATED(SOLVER_MAPPING)) THEN -! EQUATIONS=>SOLVER_MAPPING%EQUATIONS_SET_TO_SOLVER_MAP(1)%EQUATIONS -! IF(ASSOCIATED(EQUATIONS)) THEN -! EQUATIONS_SET=>equations%equationsSet - DO equations_set_idx=1,SOLVER_MAPPING%NUMBER_OF_EQUATIONS_SETS - EQUATIONS_SET=>SOLVER_MAPPING%EQUATIONS_SETS(equations_set_idx)%ptr - IF(ASSOCIATED(EQUATIONS_SET)) THEN - IF(.NOT.ALLOCATED(EQUATIONS_SET%SPECIFICATION)) THEN - CALL FlagError("Equations set specification is not allocated.",err,error,*999) - ELSE IF(SIZE(EQUATIONS_SET%SPECIFICATION,1)/=3) THEN - CALL FlagError("Equations set specification must have three entries for a Darcy type equations set.", & - & err,error,*999) - END IF - SELECT CASE(EQUATIONS_SET%SPECIFICATION(3)) - CASE(EQUATIONS_SET_STANDARD_DARCY_SUBTYPE,EQUATIONS_SET_QUASISTATIC_DARCY_SUBTYPE, & - & EQUATIONS_SET_ALE_DARCY_SUBTYPE,EQUATIONS_SET_INCOMPRESSIBLE_FINITE_ELASTICITY_DARCY_SUBTYPE, & - & EQUATIONS_SET_TRANSIENT_ALE_DARCY_SUBTYPE) - ! do nothing - CASE(EQUATIONS_SET_ELASTICITY_DARCY_INRIA_MODEL_SUBTYPE, & - & EQUATIONS_SET_INCOMPRESSIBLE_ELASTICITY_DRIVEN_DARCY_SUBTYPE, & - & EQUATIONS_SET_INCOMPRESSIBLE_ELAST_MULTI_COMP_DARCY_SUBTYPE) - CALL WRITE_STRING(GENERAL_OUTPUT_TYPE,"Darcy monitor convergence ... ",err,error,*999) - DEPENDENT_FIELD=>EQUATIONS_SET%DEPENDENT%DEPENDENT_FIELD - IF(ASSOCIATED(DEPENDENT_FIELD)) THEN - vectorMapping=>EQUATIONS_SET%equations%vectorEquations%vectorMapping - IF(ASSOCIATED(vectorMapping)) THEN - SELECT CASE(EQUATIONS_SET%SPECIFICATION(3)) - CASE(EQUATIONS_SET_ALE_DARCY_SUBTYPE,EQUATIONS_SET_INCOMPRESSIBLE_FINITE_ELASTICITY_DARCY_SUBTYPE) - FIELD_VARIABLE=>vectorMapping%linearMapping%equationsMatrixToVarMaps(1)%VARIABLE - ! '1' associated with linear matrix - CASE(EQUATIONS_SET_TRANSIENT_ALE_DARCY_SUBTYPE,EQUATIONS_SET_ELASTICITY_DARCY_INRIA_MODEL_SUBTYPE, & - & EQUATIONS_SET_INCOMPRESSIBLE_ELASTICITY_DRIVEN_DARCY_SUBTYPE, & - & EQUATIONS_SET_INCOMPRESSIBLE_ELAST_MULTI_COMP_DARCY_SUBTYPE) - FIELD_VARIABLE=>vectorMapping%dynamicMapping%equationsMatrixToVarMaps(1)%VARIABLE - END SELECT - IF(ASSOCIATED(FIELD_VARIABLE)) THEN - FIELD_VAR_TYPE=FIELD_VARIABLE%VARIABLE_TYPE - - !iter 1 - NULLIFY(ITERATION_VALUES_N) - CALL FIELD_PARAMETER_SET_DATA_GET(DEPENDENT_FIELD,FIELD_VAR_TYPE, & - & FIELD_PREVIOUS_ITERATION_VALUES_SET_TYPE,ITERATION_VALUES_N,err,error,*999) - - !iter 2 - NULLIFY(ITERATION_VALUES_N1) - CALL FIELD_PARAMETER_SET_DATA_GET(DEPENDENT_FIELD,FIELD_VAR_TYPE, & - & FIELD_VALUES_SET_TYPE,ITERATION_VALUES_N1,err,error,*999) - - RESIDUAL_NORM = 0.0_DP - NUMBER_OF_DOFS = DEPENDENT_FIELD%VARIABLE_TYPE_MAP(FIELD_VAR_TYPE)%ptr%NUMBER_OF_DOFS - DO dof_number=1,NUMBER_OF_DOFS - RESIDUAL_NORM = RESIDUAL_NORM + & - & ( ITERATION_VALUES_N1(dof_number) - ITERATION_VALUES_N(dof_number) )**2.0_DP - END DO - RESIDUAL_NORM = SQRT(RESIDUAL_NORM / NUMBER_OF_DOFS) - - IF(CONTROL_LOOP%LOOP_TYPE==PROBLEM_CONTROL_WHILE_LOOP_TYPE) THEN - IF(CONTROL_LOOP%WHILE_LOOP%ITERATION_NUMBER>=2) THEN !Omit initialised solution - IF(CONTROL_LOOP%WHILE_LOOP%ITERATION_NUMBER==2) THEN - RESIDUAL_NORM_0 = RESIDUAL_NORM - WRITE(23,*) 'RESIDUAL_NORM_0 = ',RESIDUAL_NORM_0 - WRITE(23,*) 'R / R0 :' - ENDIF - write(*,*)'-------------------------------------------------------' - write(*,*)'+++ RESIDUAL_NORM = +++',RESIDUAL_NORM - write(*,*)'+++ RESIDUAL_NORM_0 = +++',RESIDUAL_NORM_0 - write(*,*)'+++ R / R_0 = +++',RESIDUAL_NORM / RESIDUAL_NORM_0 - write(*,*)'-------------------------------------------------------' - WRITE(23,*) RESIDUAL_NORM / RESIDUAL_NORM_0 - - !End subiteration loop if residual is small relative to residual in first step - IF((RESIDUAL_NORM/RESIDUAL_NORM_0)<=RESIDUAL_TOLERANCE_RELATIVE .OR. & - & RESIDUAL_NORM<=RESIDUAL_TOLERANCE_ABSOLUTE ) THEN - write(*,*)'++++++++++++++++++++++++++++++++++++' - write(*,*)'+++ SUBITERATION CONVERGED +++' - write(*,*)'++++++++++++++++++++++++++++++++++++' - CONTROL_LOOP%WHILE_LOOP%CONTINUE_LOOP=.FALSE. - ELSE IF(CONTROL_LOOP%WHILE_LOOP%ITERATION_NUMBER== & - & CONTROL_LOOP%WHILE_LOOP%MAXIMUM_NUMBER_OF_ITERATIONS) THEN - CALL FLAG_WARNING("Subiterations between solid and fluid "// & - & "equations did not converge.",err,error,*999) - ENDIF - ENDIF - ELSE - CALL FlagError("DARCY_EQUATION_MONITOR_CONVERGENCE must be called "// & - & "with a while control loop",err,error,*999) - ENDIF - - -! SUBITERATION_NUMBER = CONTROL_LOOP%WHILE_LOOP%ITERATION_NUMBER -! -! WRITE(FILENAME,'("Darcy_DOFs_N_",I2.2,".dat")') SUBITERATION_NUMBER -! FILEPATH = "./output/"//FILENAME -! FILEUNIT_N = 7777 + 2*SUBITERATION_NUMBER -! OPEN(UNIT=FILEUNIT_N,FILE=CHAR(FILEPATH),STATUS='unknown',ACCESS='append') -! DO dof_number=1,NUMBER_OF_DOFS -! WRITE(FILEUNIT_N,*) ITERATION_VALUES_N(dof_number) -! END DO -! -! -! WRITE(FILENAME,'("Darcy_DOFs_N1_",I2.2,".dat")') SUBITERATION_NUMBER -! FILEPATH = "./output/"//FILENAME -! FILEUNIT_N1 = 7777 + 2*SUBITERATION_NUMBER+1 -! OPEN(UNIT=FILEUNIT_N1,FILE=CHAR(FILEPATH),STATUS='unknown',ACCESS='append') -! DO dof_number=1,NUMBER_OF_DOFS -! WRITE(FILEUNIT_N1,*) ITERATION_VALUES_N1(dof_number) -! END DO - - - CALL FIELD_PARAMETER_SET_DATA_RESTORE(DEPENDENT_FIELD,FIELD_VAR_TYPE, & - & FIELD_PREVIOUS_ITERATION_VALUES_SET_TYPE,ITERATION_VALUES_N,err,error,*999) - CALL FIELD_PARAMETER_SET_DATA_RESTORE(DEPENDENT_FIELD,FIELD_VAR_TYPE, & - & FIELD_VALUES_SET_TYPE,ITERATION_VALUES_N1,err,error,*999) - - ELSE - CALL FlagError("FIELD_VAR_TYPE is not associated.",err,error,*999) - ENDIF - ELSE - CALL FlagError("vectorMapping is not associated.",err,error,*999) - ENDIF - ELSE - CALL FlagError("Dependent field is not associated.",err,error,*999) - END IF - CASE DEFAULT - localError="Equations set subtype " & - & //TRIM(NumberToVString(EQUATIONS_SET%SPECIFICATION(3),"*",err,error))// & - & " is not valid for a Darcy equation fluid type of a fluid mechanics problem class." - CALL FlagError(localError,err,error,*999) - END SELECT - ELSE - CALL FlagError("Equations set is not associated.",err,error,*999) - END IF - ENDDO -! ELSE -! CALL FlagError("Equations are not associated.",err,error,*999) -! END IF - ELSE - CALL FlagError("Solver mapping is not associated.",err,error,*999) - ENDIF - ELSE - CALL FlagError("Solver equations are not associated.",err,error,*999) - END IF - CASE DEFAULT - localError="Problem subtype "//TRIM(NumberToVString(CONTROL_LOOP%PROBLEM%SPECIFICATION(3),"*",err,error))// & - & " is not valid for a Darcy equation fluid type of a fluid mechanics problem class." - CALL FlagError(localError,err,error,*999) - END SELECT - ELSE - CALL FlagError("Problem is not associated.",err,error,*999) - ENDIF - ELSE - ! do nothing - ENDIF - ELSE - CALL FlagError("Solver is not associated.",err,error,*999) - ENDIF - ELSE - CALL FlagError("Control loop is not associated.",err,error,*999) - ENDIF - - CLOSE(23) - CLOSE(FILEUNIT_N) - CLOSE(FILEUNIT_N1) - - EXITS("DARCY_EQUATION_MONITOR_CONVERGENCE") - RETURN -999 ERRORSEXITS("DARCY_EQUATION_MONITOR_CONVERGENCE",err,error) - RETURN 1 - END SUBROUTINE DARCY_EQUATION_MONITOR_CONVERGENCE - - ! - !================================================================================================================================ - ! - - !> Accelerate convergence of the Darcy solution - SUBROUTINE DARCY_EQUATION_ACCELERATE_CONVERGENCE(CONTROL_LOOP,SOLVER,err,error,*) - - !Argument variables - TYPE(CONTROL_LOOP_TYPE), POINTER :: CONTROL_LOOP !SOLVER%SOLVER_EQUATIONS - IF(ASSOCIATED(SOLVER_EQUATIONS)) THEN - SOLVER_MAPPING=>SOLVER_equations%SOLVER_MAPPING - IF(ASSOCIATED(SOLVER_MAPPING)) THEN - DO equations_set_idx=1,SOLVER_MAPPING%NUMBER_OF_EQUATIONS_SETS - EQUATIONS_SET=>SOLVER_MAPPING%EQUATIONS_SETS(equations_set_idx)%ptr -! EQUATIONS=>SOLVER_MAPPING%EQUATIONS_SET_TO_SOLVER_MAP(1)%EQUATIONS -! IF(ASSOCIATED(EQUATIONS)) THEN -! EQUATIONS_SET=>equations%equationsSet - IF(ASSOCIATED(EQUATIONS_SET)) THEN - IF(.NOT.ALLOCATED(EQUATIONS_SET%SPECIFICATION)) THEN - CALL FlagError("Equations set specification is not allocated.",err,error,*999) - ELSE IF(SIZE(EQUATIONS_SET%SPECIFICATION,1)/=3) THEN - CALL FlagError("Equations set specification must have three entries for a Darcy type equations set.", & - & err,error,*999) - END IF - SELECT CASE(EQUATIONS_SET%SPECIFICATION(3)) - CASE(EQUATIONS_SET_STANDARD_DARCY_SUBTYPE,EQUATIONS_SET_QUASISTATIC_DARCY_SUBTYPE, & - & EQUATIONS_SET_ALE_DARCY_SUBTYPE,EQUATIONS_SET_INCOMPRESSIBLE_FINITE_ELASTICITY_DARCY_SUBTYPE, & - & EQUATIONS_SET_TRANSIENT_ALE_DARCY_SUBTYPE) - ! do nothing - CASE(EQUATIONS_SET_ELASTICITY_DARCY_INRIA_MODEL_SUBTYPE, & - & EQUATIONS_SET_INCOMPRESSIBLE_ELASTICITY_DRIVEN_DARCY_SUBTYPE, & - & EQUATIONS_SET_INCOMPRESSIBLE_ELAST_MULTI_COMP_DARCY_SUBTYPE) -! CALL WRITE_STRING(GENERAL_OUTPUT_TYPE,"Darcy accelerate convergence ... ",err,error,*999) - DEPENDENT_FIELD=>EQUATIONS_SET%DEPENDENT%DEPENDENT_FIELD - IF(ASSOCIATED(DEPENDENT_FIELD)) THEN - vectorMapping=>EQUATIONS_SET%equations%vectorEquations%vectorMapping - IF(ASSOCIATED(vectorMapping)) THEN - SELECT CASE(EQUATIONS_SET%SPECIFICATION(3)) - CASE(EQUATIONS_SET_ALE_DARCY_SUBTYPE,EQUATIONS_SET_INCOMPRESSIBLE_FINITE_ELASTICITY_DARCY_SUBTYPE) - FIELD_VARIABLE=>vectorMapping%linearMapping%equationsMatrixToVarMaps(1)%VARIABLE - ! '1' associated with linear matrix - CASE(EQUATIONS_SET_TRANSIENT_ALE_DARCY_SUBTYPE,EQUATIONS_SET_ELASTICITY_DARCY_INRIA_MODEL_SUBTYPE, & - & EQUATIONS_SET_INCOMPRESSIBLE_ELASTICITY_DRIVEN_DARCY_SUBTYPE, & - & EQUATIONS_SET_INCOMPRESSIBLE_ELAST_MULTI_COMP_DARCY_SUBTYPE) - FIELD_VARIABLE=>vectorMapping%dynamicMapping%equationsMatrixToVarMaps(1)%VARIABLE - END SELECT - IF(ASSOCIATED(FIELD_VARIABLE)) THEN - FIELD_VAR_TYPE=FIELD_VARIABLE%VARIABLE_TYPE - - !iter 1 - NULLIFY(ITERATION_VALUES_N) - CALL FIELD_PARAMETER_SET_DATA_GET(DEPENDENT_FIELD,FIELD_VAR_TYPE, & - & FIELD_PREVIOUS_ITERATION_VALUES_SET_TYPE,ITERATION_VALUES_N,err,error,*999) - - !iter 2 - NULLIFY(ITERATION_VALUES_N1) - CALL FIELD_PARAMETER_SET_DATA_GET(DEPENDENT_FIELD,FIELD_VAR_TYPE, & - & FIELD_VALUES_SET_TYPE,ITERATION_VALUES_N1,err,error,*999) - -! RESIDUAL_NORM = 0.0_DP - NUMBER_OF_DOFS = DEPENDENT_FIELD%VARIABLE_TYPE_MAP(FIELD_VAR_TYPE)%ptr%NUMBER_OF_DOFS - -! DO dof_number=1,NUMBER_OF_DOFS -! RESIDUAL_NORM = RESIDUAL_NORM + & -! & ( ITERATION_VALUES_N1(dof_number) - ITERATION_VALUES_N(dof_number) )**2.0_DP -! END DO -! RESIDUAL_NORM = SQRT(RESIDUAL_NORM / NUMBER_OF_DOFS) - - RELAXATION_PARAM = 2.0_DP !\ToDo Devise better way of determining optimal Aitken parameter - - IF( CONTROL_LOOP%WHILE_LOOP%ITERATION_NUMBER>2 )THEN - CALL WRITE_STRING(GENERAL_OUTPUT_TYPE,"Darcy accelerate convergence ... ",err,error,*999) - DO dof_number=1,NUMBER_OF_DOFS - ACCELERATED_VALUE = ITERATION_VALUES_N(dof_number) & - & + RELAXATION_PARAM * ( ITERATION_VALUES_N1(dof_number) - ITERATION_VALUES_N(dof_number) ) - CALL FIELD_PARAMETER_SET_UPDATE_LOCAL_DOF(DEPENDENT_FIELD, & - & FIELD_VAR_TYPE,FIELD_VALUES_SET_TYPE,dof_number, & - & ACCELERATED_VALUE,err,error,*999) - END DO - CALL FIELD_PARAMETER_SET_UPDATE_START(DEPENDENT_FIELD, & - & FIELD_VAR_TYPE, FIELD_VALUES_SET_TYPE,err,error,*999) - CALL FIELD_PARAMETER_SET_UPDATE_FINISH(DEPENDENT_FIELD, & - & FIELD_VAR_TYPE, FIELD_VALUES_SET_TYPE,err,error,*999) - END IF - CALL FIELD_PARAMETER_SET_DATA_RESTORE(DEPENDENT_FIELD,FIELD_VAR_TYPE, & - & FIELD_PREVIOUS_ITERATION_VALUES_SET_TYPE,ITERATION_VALUES_N,err,error,*999) - CALL FIELD_PARAMETER_SET_DATA_RESTORE(DEPENDENT_FIELD,FIELD_VAR_TYPE, & - & FIELD_VALUES_SET_TYPE,ITERATION_VALUES_N1,err,error,*999) - - ELSE - CALL FlagError("FIELD_VAR_TYPE is not associated.",err,error,*999) - ENDIF - ELSE - CALL FlagError("vectorMapping is not associated.",err,error,*999) - ENDIF - ELSE - CALL FlagError("Dependent field is not associated.",err,error,*999) - END IF - CASE DEFAULT - localError="Equations set subtype " & - & //TRIM(NumberToVString(EQUATIONS_SET%SPECIFICATION(3),"*",err,error))// & - & " is not valid for a Darcy equation fluid type of a fluid mechanics problem class." - CALL FlagError(localError,err,error,*999) - END SELECT - ELSE - CALL FlagError("Equations set is not associated.",err,error,*999) - END IF - ENDDO -! ELSE -! CALL FlagError("Equations are not associated.",err,error,*999) -! END IF - ELSE - CALL FlagError("Solver mapping is not associated.",err,error,*999) - ENDIF - ELSE - CALL FlagError("Solver equations are not associated.",err,error,*999) - END IF - CASE DEFAULT - localError="Problem subtype "//TRIM(NumberToVString(CONTROL_LOOP%PROBLEM%SPECIFICATION(3),"*",err,error))// & - & " is not valid for a Darcy equation fluid type of a fluid mechanics problem class." - CALL FlagError(localError,err,error,*999) - END SELECT - ELSE - CALL FlagError("Problem is not associated.",err,error,*999) - ENDIF - ELSE - ! do nothing - ENDIF - ELSE - CALL FlagError("Solver is not associated.",err,error,*999) - ENDIF - ELSE - CALL FlagError("Control loop is not associated.",err,error,*999) - ENDIF - - EXITS("DARCY_EQUATION_ACCELERATE_CONVERGENCE") - RETURN -999 ERRORSEXITS("DARCY_EQUATION_ACCELERATE_CONVERGENCE",err,error) - RETURN 1 - END SUBROUTINE DARCY_EQUATION_ACCELERATE_CONVERGENCE - - ! - !================================================================================================================================ - ! - - - - !================================================================================================================================ - ! - - !> Allows to set an explicit Darcy mass increase to test finite elasticity - !> (and only then this function is called, but not for the coupled problem) - SUBROUTINE DARCY_EQUATION_POST_SOLVE_SET_MASS_INCREASE(CONTROL_LOOP,SOLVER,err,error,*) - - !Argument variables - TYPE(CONTROL_LOOP_TYPE), POINTER :: CONTROL_LOOP !CONTROL_LOOP - DO loop_idx=1,CONTROL_LOOP%CONTROL_LOOP_LEVEL - IF(CONTROL_TIME_LOOP%LOOP_TYPE==PROBLEM_CONTROL_TIME_LOOP_TYPE) THEN - CALL CONTROL_LOOP_CURRENT_TIMES_GET(CONTROL_TIME_LOOP,CURRENT_TIME,TIME_INCREMENT,err,error,*999) - EXIT - ENDIF - IF (ASSOCIATED(CONTROL_LOOP%PARENT_LOOP)) THEN - CONTROL_TIME_LOOP=>CONTROL_TIME_LOOP%PARENT_LOOP - ELSE - CALL FlagError("Could not find a time control loop.",err,error,*999) - ENDIF - ENDDO - - IF(DIAGNOSTICS1) THEN - CALL WRITE_STRING(DIAGNOSTIC_OUTPUT_TYPE, & - & "*******************************************************************************************************", & - & err,error,*999) - CALL WRITE_STRING_VALUE(DIAGNOSTIC_OUTPUT_TYPE,"CURRENT_TIME = ",CURRENT_TIME,err,error,*999) - CALL WRITE_STRING_VALUE(DIAGNOSTIC_OUTPUT_TYPE,"TIME_INCREMENT = ",TIME_INCREMENT,err,error,*999) - CALL WRITE_STRING(DIAGNOSTIC_OUTPUT_TYPE, & - & "*******************************************************************************************************", & - & err,error,*999) - ENDIF - - IF(ASSOCIATED(SOLVER)) THEN - IF(ASSOCIATED(CONTROL_LOOP%PROBLEM)) THEN - ROOT_CONTROL_LOOP=>CONTROL_LOOP%PROBLEM%CONTROL_LOOP - IF(.NOT.ALLOCATED(CONTROL_LOOP%PROBLEM%SPECIFICATION)) THEN - CALL FlagError("Problem specification is not allocated.",err,error,*999) - ELSE IF(SIZE(CONTROL_LOOP%PROBLEM%SPECIFICATION,1)<3) THEN - CALL FlagError("Problem specification must have three entries for a Darcy equation problem.",err,error,*999) - END IF - SELECT CASE(CONTROL_LOOP%PROBLEM%SPECIFICATION(3)) - CASE(PROBLEM_STANDARD_DARCY_SUBTYPE) - ! do nothing - CASE(PROBLEM_QUASISTATIC_DARCY_SUBTYPE) - ! do nothing - CASE(PROBLEM_TRANSIENT_DARCY_SUBTYPE) - ! do nothing - CASE(PROBLEM_ALE_DARCY_SUBTYPE) - ! do nothing - CASE(PROBLEM_STANDARD_ELASTICITY_DARCY_SUBTYPE,PROBLEM_QUASISTATIC_ELASTICITY_TRANSIENT_DARCY_SUBTYPE, & - & PROBLEM_QUASISTATIC_ELAST_TRANS_DARCY_MAT_SOLVE_SUBTYPE) - !--- Mass increase specified - IF(SOLVER%GLOBAL_NUMBER==SOLVER_NUMBER_DARCY) THEN !It is called with 'SOLVER%GLOBAL_NUMBER=SOLVER_NUMBER_DARCY', otherwise it doesn't work - !--- Get the dependent field of the Darcy equations - CALL SOLVERS_SOLVER_GET(SOLVER%SOLVERS,SOLVER_NUMBER_DARCY,SOLVER_DARCY,err,error,*999) - SOLVER_EQUATIONS_DARCY=>SOLVER_DARCY%SOLVER_EQUATIONS - IF(ASSOCIATED(SOLVER_EQUATIONS_DARCY)) THEN - SOLVER_MAPPING_DARCY=>SOLVER_EQUATIONS_DARCY%SOLVER_MAPPING - IF(ASSOCIATED(SOLVER_MAPPING_DARCY)) THEN - EQUATIONS_SET_DARCY=>SOLVER_MAPPING_DARCY%EQUATIONS_SETS(1)%ptr - IF(ASSOCIATED(EQUATIONS_SET_DARCY)) THEN - DEPENDENT_FIELD_DARCY=>EQUATIONS_SET_DARCY%DEPENDENT%DEPENDENT_FIELD - IF(ASSOCIATED(DEPENDENT_FIELD_DARCY)) THEN - ! do nothing - ELSE - CALL FlagError("GEOMETRIC_FIELD_DARCY is not associated.",err,error,*999) - END IF - ELSE - CALL FlagError("Darcy equations set is not associated.",err,error,*999) - END IF - ELSE - CALL FlagError("Darcy solver mapping is not associated.",err,error,*999) - END IF - ELSE - CALL FlagError("Darcy solver equations are not associated.",err,error,*999) - END IF - - ! Set the mass increase for Darcy dependent field (u, v, w; m) - -! ALPHA = 2.0E-03_DP - -! ALPHA = 5.0E-04_DP * CURRENT_TIME / TIME_INCREMENT - - ALPHA = 5.0E-04_DP * SIN(2.0_DP * PI * CURRENT_TIME / TIME_INCREMENT / 20.0_DP) - - write(*,*)'ALPHA = ',ALPHA - - NUMBER_OF_DOFS = DEPENDENT_FIELD_DARCY%VARIABLE_TYPE_MAP(FIELD_V_VARIABLE_TYPE)%ptr%NUMBER_OF_DOFS - - DO dof_number = 3/4*NUMBER_OF_DOFS + 1, NUMBER_OF_DOFS - !'3/4' only works for equal order interpolation in (u,v,w) and p - CALL FIELD_PARAMETER_SET_UPDATE_LOCAL_DOF(DEPENDENT_FIELD_DARCY, & - & FIELD_V_VARIABLE_TYPE,FIELD_VALUES_SET_TYPE,dof_number, & - & ALPHA,err,error,*999) - END DO - CALL FIELD_PARAMETER_SET_UPDATE_START(DEPENDENT_FIELD_DARCY, & - & FIELD_U_VARIABLE_TYPE, FIELD_VALUES_SET_TYPE,err,error,*999) - CALL FIELD_PARAMETER_SET_UPDATE_FINISH(DEPENDENT_FIELD_DARCY, & - & FIELD_U_VARIABLE_TYPE, FIELD_VALUES_SET_TYPE,err,error,*999) - - ELSE - ! do nothing - END IF - CASE DEFAULT - localError="Problem subtype "//TRIM(NumberToVString(CONTROL_LOOP%PROBLEM%SPECIFICATION(3),"*",err,error))// & - & " is not valid for a Darcy equation fluid type of a fluid mechanics problem class." - CALL FlagError(localError,err,error,*999) - END SELECT - ELSE - CALL FlagError("Problem is not associated.",err,error,*999) - ENDIF - ELSE - CALL FlagError("Solver is not associated.",err,error,*999) - ENDIF - ELSE - CALL FlagError("Control loop is not associated.",err,error,*999) - ENDIF - - EXITS("DARCY_EQUATION_POST_SOLVE_SET_MASS_INCREASE") - RETURN -999 ERRORSEXITS("DARCY_EQUATION_POST_SOLVE_SET_MASS_INCREASE",err,error) - RETURN 1 - END SUBROUTINE DARCY_EQUATION_POST_SOLVE_SET_MASS_INCREASE - - ! - !================================================================================================================================ - ! - - !\ToDo: enable this penalty formulation also for (quasi-)static; as made available in solver_routines - - !Adds a penalty term to the equilibrium equations to enforce impermeability at certain boundaries - ! derived from: "FINITE_ELASTICITY_SURFACE_PRESSURE_RESIDUAL_EVALUATE"; same restrictions apply - SUBROUTINE DARCY_EQUATION_IMPERMEABLE_BC_VIA_PENALTY(EQUATIONS_SET,ELEMENT_NUMBER,err,error,*) - !Argument variables - TYPE(EQUATIONS_SET_TYPE), POINTER :: equations_SET !EQUATIONS_SET%EQUATIONS - NULLIFY(vectorEquations) - CALL Equations_VectorEquationsGet(equations,vectorEquations,err,error,*999) - dynamicMatrices=>vectorEquations%vectorMatrices%dynamicMatrices - stiffnessMatrix=>dynamicMatrices%matrices(1)%ptr - dependentField=>equations%interpolation%dependentField - DECOMPOSITION =>dependentField%DECOMPOSITION - DECOMP_ELEMENT=>DECOMPOSITION%TOPOLOGY%ELEMENTS%ELEMENTS(ELEMENT_NUMBER) - - independentField=>equations%interpolation%independentField - -! MESH_COMPONENT_NUMBER=DECOMPOSITION%MESH_COMPONENT_NUMBER - MESH_COMPONENT_NUMBER = vectorEquations%vectorMapping%dynamicMapping%equationsMatrixToVarMaps(1)% & - & VARIABLE%COMPONENTS(1)%MESH_COMPONENT_NUMBER - - DEPENDENT_BASIS=>DECOMPOSITION%DOMAIN(MESH_COMPONENT_NUMBER)%ptr%TOPOLOGY%ELEMENTS%ELEMENTS(ELEMENT_NUMBER)%BASIS - -! write(*,*)'ELEMENT_NUMBER = ',ELEMENT_NUMBER - - !Calculate penalty term to render surfaces impermeable: Loop over all faces - DO element_face_idx=1,DEPENDENT_BASIS%NUMBER_OF_LOCAL_FACES - face_number=DECOMP_ELEMENT%ELEMENT_FACES(element_face_idx) - DECOMP_FACE=>DECOMPOSITION%TOPOLOGY%FACES%FACES(face_number) - - !Check if it's a boundary face - IF(DECOMP_FACE%BOUNDARY_FACE) THEN !!temporary until MESH_FACE (or equivalent) is available (decomp face includes ghost faces?) - - !Grab normal xi direction of the face and the other two xi directions - normal_component_idx=ABS(DECOMP_FACE%XI_DIRECTION) ! if xi=0, this can be a negative number -! FACE_COMPONENTS=OTHER_XI_DIRECTIONS3(normal_component_idx,2:3,1) !Two xi directions for the current face - !\todo: will FACE_COMPONENTS be a problem with sector elements? Check this. - - ! To find out which faces are set impermeable: - FACE_VELOCITY_INTERPOLATION_PARAMETERS=>equations%interpolation%independentInterpParameters(FIELD_U_VARIABLE_TYPE)%ptr - CALL FIELD_INTERPOLATION_PARAMETERS_FACE_GET(FIELD_VALUES_SET_TYPE,face_number, & - & FACE_VELOCITY_INTERPOLATION_PARAMETERS,err,error,*999) - FACE_INTERPOLATED_POINT=>equations%interpolation%independentInterpPoint(FIELD_U_VARIABLE_TYPE)%ptr - - - !Check if impermeable boundary condition is defined on the face - IMPERMEABLE_BC=.FALSE. - IF(ANY(ABS(FACE_VELOCITY_INTERPOLATION_PARAMETERS%PARAMETERS(:,normal_component_idx))>ZERO_TOLERANCE)) THEN - IMPERMEABLE_BC=.TRUE. - ENDIF - - IF(IMPERMEABLE_BC) THEN - -! write(*,*)'element_face_idx = ',element_face_idx -! write(*,*)'DECOMP_FACE%XI_DIRECTION = ',DECOMP_FACE%XI_DIRECTION - - !Grab some other pointers - DOMAIN_FACE=>DECOMPOSITION%DOMAIN(MESH_COMPONENT_NUMBER)%ptr%TOPOLOGY%FACES%FACES(face_number) - FACE_BASIS=>DOMAIN_FACE%BASIS - FACE_QUADRATURE_SCHEME=>FACE_BASIS%QUADRATURE%QUADRATURE_SCHEME_MAP(BASIS_DEFAULT_QUADRATURE_SCHEME)%ptr - FACE_NUMBER_OF_GAUSS_POINTS=FACE_QUADRATURE_SCHEME%NUMBER_OF_GAUSS - - !A single FACE_BASIS and DEPENDENT_BASIS should suffice, since we only deal with terms - ! deriving from velocity test AND trial functions, and moreover use Galerkin, - ! i.e. same basis functions for test and trial functions - - !Start integrating -!\todo: hopefully all quadrature stuff will always match up between face basis and local face stuff. -! Annoying issue here that p(appl) is interpolated using the face_basis, while dZdXI has to be evaluated -! using the 3D face interpolation... many variables are shared, probably supposed to be the same but I -! can't guarantee it and checking every single thing will be a fair bit of overhead - DO gauss_idx=1,FACE_NUMBER_OF_GAUSS_POINTS - GAUSS_WEIGHT=FACE_QUADRATURE_SCHEME%GAUSS_WEIGHTS(gauss_idx) - !What happens with surface Jacobian ? SQRT_G ? - Apparently contained in normal calculation - - !Use (deformed) Geometric field to obtain delx_j/delxi_M = dZdxi at the face gauss point - GEOMETRIC_INTERPOLATION_PARAMETERS=>equations%interpolation%geometricInterpParameters(FIELD_U_VARIABLE_TYPE)%ptr - CALL FIELD_INTERPOLATION_PARAMETERS_ELEMENT_GET(FIELD_VALUES_SET_TYPE,ELEMENT_NUMBER, & - & GEOMETRIC_INTERPOLATION_PARAMETERS,err,error,*999) - GEOMETRIC_INTERPOLATED_POINT=>equations%interpolation%geometricInterpPoint(FIELD_U_VARIABLE_TYPE)%ptr - CALL FIELD_INTERPOLATE_LOCAL_FACE_GAUSS(FIRST_PART_DERIV,BASIS_DEFAULT_QUADRATURE_SCHEME,element_face_idx,gauss_idx, & - & GEOMETRIC_INTERPOLATED_POINT,err,error,*999) - - DZDXI=GEOMETRIC_INTERPOLATED_POINT%VALUES(1:3,PARTIAL_DERIVATIVE_FIRST_DERIVATIVE_MAP(1:3)) !(component,derivative) - -! write(*,*)'gauss_idx = ',gauss_idx -! write(*,*)'GAUSS_COORDS = ',GEOMETRIC_INTERPOLATED_POINT%VALUES(1:3,NO_PART_DERIV) !(component,derivative) - - !Calculate covariant metric tensor - CALL MatrixTranspose(DZDXI,DZDXIT,err,error,*999) - CALL MatrixProduct(DZDXIT,DZDXI,GIJL,err,error,*999) !g_ij = dZdXI' * dZdXI - CALL Invert(GIJL,GIJU,G,err,error,*999) !g^ij = inv(g_ij), G=DET(GIJL) - SQRT_G=SQRT(G) - - !--- L o o p 1 : over element rows (3 velocity components) ----------------------------------- - DO component_idx_1=1,3 - !Calculate g^{normal_component_idx}M*dZ_j/dxi_M; this apparently includes the face Jacobian - CALL DotProduct(GIJU(normal_component_idx,:),DZDXI(component_idx_1,:),NORMAL_PROJECTION_1,err,error,*999) - - IF(DECOMP_FACE%XI_DIRECTION<0) NORMAL_PROJECTION_1=-NORMAL_PROJECTION_1 !always outward normal - - IF(ABS(NORMAL_PROJECTION_1) \file -!> $Id: Stokes_equations_routines.f90 372 2009-04-20 -!> \author Sebastian Krittian -!> \brief This module handles all Stokes fluid routines. -!> -!> \section LICENSE -!> -!> Version: MPL 1.1/GPL 2.0/LGPL 2.1 -!> -!> The contents of this file are subject to the Mozilla Public License -!> Version 1.1 (the "License"); you may not use this file except in -!> compliance with the License. You may obtain a copy of the License at -!> http://www.mozilla.org/MPL/ -!> -!> Software distributed under the License is distributed on an "AS IS" -!> basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -!> License for the specific language governing rights and limitations -!> under the License. -!> -!> The Original Code is OpenCMISS -!> -!> The Initial Developer of the Original Code is University of Auckland, -!> Auckland, New Zealand, the University of Oxford, Oxford, United -!> Kingdom and King's College, London, United Kingdom. Portions created -!> by the University of Auckland, the University of Oxford and King's -!> College, London are Copyright (C) 2007-2010 by the University of -!> Auckland, the University of Oxford and King's College, London. -!> All Rights Reserved. -!> -!> Contributor(s): Sebastian Krittian, Chris Bradley -!> -!> Alternatively, the contents of this file may be used under the terms of -!> either the GNU General Public License Version 2 or later (the "GPL"), or -!> the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), -!> in which case the provisions of the GPL or the LGPL are applicable instead -!> of those above. If you wish to allow use of your version of this file only -!> under the terms of either the GPL or the LGPL, and not to allow others to -!> use your version of this file under the terms of the MPL, indicate your -!> decision by deleting the provisions above and replace them with the notice -!> and other provisions required by the GPL or the LGPL. If you do not delete -!> the provisions above, a recipient may use your version of this file under -!> the terms of any one of the MPL, the GPL or the LGPL. -!> - -!>This module handles all Stokes fluid routines. -MODULE STOKES_EQUATIONS_ROUTINES - - USE ANALYTIC_ANALYSIS_ROUTINES - USE BaseRoutines - USE BASIS_ROUTINES - USE BOUNDARY_CONDITIONS_ROUTINES - USE Constants - USE CONTROL_LOOP_ROUTINES - USE ControlLoopAccessRoutines - USE DISTRIBUTED_MATRIX_VECTOR - USE DOMAIN_MAPPINGS - USE EquationsRoutines - USE EquationsAccessRoutines - USE EquationsMappingRoutines - USE EquationsMatricesRoutines - USE EQUATIONS_SET_CONSTANTS - USE EquationsSetAccessRoutines - USE FIELD_ROUTINES - USE FIELD_IO_ROUTINES - USE FieldAccessRoutines - USE FLUID_MECHANICS_IO_ROUTINES - USE INPUT_OUTPUT - USE ISO_VARYING_STRING - USE Kinds - USE MATRIX_VECTOR - USE NODE_ROUTINES - USE PROBLEM_CONSTANTS - USE Strings - USE SOLVER_ROUTINES - USE SolverAccessRoutines - USE Timer - USE Types - -#include "macros.h" - - IMPLICIT NONE - - PRIVATE - - PUBLIC Stokes_EquationsSetSpecificationSet - - PUBLIC Stokes_EquationsSetSolutionMethodSet - - PUBLIC STOKES_EQUATIONS_SET_SETUP - - PUBLIC Stokes_BoundaryConditionsAnalyticCalculate - - PUBLIC Stokes_ProblemSpecificationSet - - PUBLIC STOKES_PROBLEM_SETUP - - PUBLIC STOKES_FINITE_ELEMENT_CALCULATE - - PUBLIC STOKES_POST_SOLVE - - PUBLIC STOKES_PRE_SOLVE - - PUBLIC STOKES_EQUATION_ANALYTIC_FUNCTIONS - -CONTAINS - -! -!================================================================================================================================ -! - - !>Sets/changes the solution method for a Stokes flow equation type of an fluid mechanics equations set class. - SUBROUTINE Stokes_EquationsSetSolutionMethodSet(EQUATIONS_SET,SOLUTION_METHOD,err,error,*) - - !Argument variables - TYPE(EQUATIONS_SET_TYPE), POINTER :: EQUATIONS_SET !Sets the equation specification for a Stokes flow equation of a fluid mechanics equations set. - SUBROUTINE Stokes_EquationsSetSpecificationSet(equationsSet,specification,err,error,*) - - !Argument variables - TYPE(EQUATIONS_SET_TYPE), POINTER :: equationsSet !Sets up the standard Stokes fluid setup. - SUBROUTINE STOKES_EQUATIONS_SET_SETUP(EQUATIONS_SET,EQUATIONS_SET_SETUP,err,error,*) - - !Argument variables - TYPE(EQUATIONS_SET_TYPE), POINTER :: EQUATIONS_SET != 3 entries for a Stokes flow equations set.", & - & err,error,*999) - END IF - SELECT CASE(EQUATIONS_SET%SPECIFICATION(3)) - !Select Stokes subtypes - CASE(EQUATIONS_SET_STATIC_STOKES_SUBTYPE, & - & EQUATIONS_SET_TRANSIENT_STOKES_SUBTYPE, & - & EQUATIONS_SET_LAPLACE_STOKES_SUBTYPE, & - & EQUATIONS_SET_ALE_STOKES_SUBTYPE, & - & EQUATIONS_SET_PGM_STOKES_SUBTYPE) - SELECT CASE(EQUATIONS_SET_SETUP%SETUP_TYPE) - !Set solution method - CASE(EQUATIONS_SET_SETUP_INITIAL_TYPE) - SELECT CASE(EQUATIONS_SET%SPECIFICATION(3)) - CASE(EQUATIONS_SET_STATIC_STOKES_SUBTYPE,EQUATIONS_SET_LAPLACE_STOKES_SUBTYPE, & - & EQUATIONS_SET_TRANSIENT_STOKES_SUBTYPE,EQUATIONS_SET_ALE_STOKES_SUBTYPE, & - & EQUATIONS_SET_PGM_STOKES_SUBTYPE) - SELECT CASE(EQUATIONS_SET_SETUP%ACTION_TYPE) - CASE(EQUATIONS_SET_SETUP_START_ACTION) - CALL Stokes_EquationsSetSolutionMethodSet(EQUATIONS_SET ,& - & EQUATIONS_SET_FEM_SOLUTION_METHOD,err,error,*999) - EQUATIONS_SET%SOLUTION_METHOD=EQUATIONS_SET_FEM_SOLUTION_METHOD - CASE(EQUATIONS_SET_SETUP_FINISH_ACTION) - !!TODO: Check valid setup - CASE DEFAULT - localError="The action type of "//TRIM(NumberToVString(EQUATIONS_SET_SETUP%ACTION_TYPE, & - & "*",err,error))// " for a setup type of "//TRIM(NumberToVString(EQUATIONS_SET_SETUP% & - & SETUP_TYPE,"*",err,error))// " is invalid for a standard Stokes fluid." - CALL FlagError(localError,err,error,*999) - END SELECT - CASE DEFAULT - localError="The third equations set specification of "// & - & TRIM(NumberToVstring(EQUATIONS_SET%SPECIFICATION(3),"*", & - & err,error))//" is invalid for a Stokes flow equations set." - CALL FlagError(localError,err,error,*999) - END SELECT - CASE(EQUATIONS_SET_SETUP_GEOMETRY_TYPE) - !Set geometric field - SELECT CASE(EQUATIONS_SET%SPECIFICATION(3)) - CASE(EQUATIONS_SET_STATIC_STOKES_SUBTYPE,EQUATIONS_SET_LAPLACE_STOKES_SUBTYPE, & - & EQUATIONS_SET_TRANSIENT_STOKES_SUBTYPE,EQUATIONS_SET_ALE_STOKES_SUBTYPE, & - & EQUATIONS_SET_PGM_STOKES_SUBTYPE) - !Do nothing??? - CASE DEFAULT - localError="The third equations set specification of "// & - & TRIM(NumberToVString(EQUATIONS_SET%SPECIFICATION(3),"*", & - & err,error))//" is invalid for a Stokes flow equations set." - CALL FlagError(localError,err,error,*999) - END SELECT - CASE(EQUATIONS_SET_SETUP_DEPENDENT_TYPE) - !Set dependent field - SELECT CASE(EQUATIONS_SET%SPECIFICATION(3)) - CASE(EQUATIONS_SET_STATIC_STOKES_SUBTYPE,EQUATIONS_SET_LAPLACE_STOKES_SUBTYPE, & - & EQUATIONS_SET_TRANSIENT_STOKES_SUBTYPE,EQUATIONS_SET_ALE_STOKES_SUBTYPE, & - & EQUATIONS_SET_PGM_STOKES_SUBTYPE) - SELECT CASE(EQUATIONS_SET_SETUP%ACTION_TYPE) - !Set start action - CASE(EQUATIONS_SET_SETUP_START_ACTION) - IF(EQUATIONS_SET%DEPENDENT%DEPENDENT_FIELD_AUTO_CREATED) THEN - !Create the auto created dependent field - !start field creation with name 'DEPENDENT_FIELD' - CALL FIELD_CREATE_START(EQUATIONS_SET_SETUP%FIELD_USER_NUMBER,EQUATIONS_SET%REGION, & - & EQUATIONS_SET%DEPENDENT%DEPENDENT_FIELD,err,error,*999) - !start creation of a new field - CALL FIELD_TYPE_SET_AND_LOCK(EQUATIONS_SET%DEPENDENT%DEPENDENT_FIELD,FIELD_GENERAL_TYPE,err,error,*999) - !label the field - CALL FIELD_LABEL_SET_AND_LOCK(EQUATIONS_SET%DEPENDENT%DEPENDENT_FIELD,"U",err,error,*999) - !define new created field to be dependent - CALL FIELD_DEPENDENT_TYPE_SET_AND_LOCK(EQUATIONS_SET%DEPENDENT%DEPENDENT_FIELD, & - & FIELD_DEPENDENT_TYPE,err,error,*999) - !look for decomposition rule already defined - CALL FIELD_MESH_DECOMPOSITION_GET(EQUATIONS_SET%GEOMETRY%GEOMETRIC_FIELD,GEOMETRIC_DECOMPOSITION, & - & err,error,*999) - !apply decomposition rule found on new created field - CALL FIELD_MESH_DECOMPOSITION_SET_AND_LOCK(EQUATIONS_SET%DEPENDENT%DEPENDENT_FIELD, & - & GEOMETRIC_DECOMPOSITION,err,error,*999) - !point new field to geometric field - CALL FIELD_GEOMETRIC_FIELD_SET_AND_LOCK(EQUATIONS_SET%DEPENDENT%DEPENDENT_FIELD,EQUATIONS_SET%GEOMETRY% & - & GEOMETRIC_FIELD,err,error,*999) - !set number of variables to 2 (1 for U and one for DELUDELN) - DEPENDENT_FIELD_NUMBER_OF_VARIABLES=2 - CALL FIELD_NUMBER_OF_VARIABLES_SET_AND_LOCK(EQUATIONS_SET%DEPENDENT%DEPENDENT_FIELD, & - & DEPENDENT_FIELD_NUMBER_OF_VARIABLES,err,error,*999) - CALL FIELD_VARIABLE_TYPES_SET_AND_LOCK(EQUATIONS_SET%DEPENDENT%DEPENDENT_FIELD,[FIELD_U_VARIABLE_TYPE, & - & FIELD_DELUDELN_VARIABLE_TYPE],err,error,*999) - CALL FIELD_DIMENSION_SET_AND_LOCK(EQUATIONS_SET%DEPENDENT%DEPENDENT_FIELD,FIELD_U_VARIABLE_TYPE, & - & FIELD_VECTOR_DIMENSION_TYPE,err,error,*999) - CALL FIELD_DIMENSION_SET_AND_LOCK(EQUATIONS_SET%DEPENDENT%DEPENDENT_FIELD,FIELD_DELUDELN_VARIABLE_TYPE, & - & FIELD_VECTOR_DIMENSION_TYPE,err,error,*999) - CALL FIELD_DATA_TYPE_SET_AND_LOCK(EQUATIONS_SET%DEPENDENT%DEPENDENT_FIELD,FIELD_U_VARIABLE_TYPE, & - & FIELD_DP_TYPE,err,error,*999) - CALL FIELD_DATA_TYPE_SET_AND_LOCK(EQUATIONS_SET%DEPENDENT%DEPENDENT_FIELD,FIELD_DELUDELN_VARIABLE_TYPE, & - & FIELD_DP_TYPE,err,error,*999) - CALL FIELD_NUMBER_OF_COMPONENTS_GET(EQUATIONS_SET%GEOMETRY%GEOMETRIC_FIELD,FIELD_U_VARIABLE_TYPE, & - & NUMBER_OF_DIMENSIONS,err,error,*999) - !calculate number of components with one component for each dimension and one for pressure - DEPENDENT_FIELD_NUMBER_OF_COMPONENTS=NUMBER_OF_DIMENSIONS+1 - CALL FIELD_NUMBER_OF_COMPONENTS_SET_AND_LOCK(EQUATIONS_SET%DEPENDENT%DEPENDENT_FIELD, & - & FIELD_U_VARIABLE_TYPE,DEPENDENT_FIELD_NUMBER_OF_COMPONENTS,err,error,*999) - CALL FIELD_NUMBER_OF_COMPONENTS_SET_AND_LOCK(EQUATIONS_SET%DEPENDENT%DEPENDENT_FIELD, & - & FIELD_DELUDELN_VARIABLE_TYPE,DEPENDENT_FIELD_NUMBER_OF_COMPONENTS,err,error,*999) - CALL FIELD_COMPONENT_MESH_COMPONENT_GET(EQUATIONS_SET%GEOMETRY%GEOMETRIC_FIELD,FIELD_U_VARIABLE_TYPE, & - & 1,GEOMETRIC_MESH_COMPONENT,err,error,*999) - !Default to the geometric interpolation setup - DO I=1,DEPENDENT_FIELD_NUMBER_OF_COMPONENTS - CALL FIELD_COMPONENT_MESH_COMPONENT_SET(EQUATIONS_SET%DEPENDENT%DEPENDENT_FIELD, & - & FIELD_U_VARIABLE_TYPE,I,GEOMETRIC_MESH_COMPONENT,err,error,*999) - CALL FIELD_COMPONENT_MESH_COMPONENT_SET(EQUATIONS_SET%DEPENDENT%DEPENDENT_FIELD, & - & FIELD_DELUDELN_VARIABLE_TYPE,I,GEOMETRIC_MESH_COMPONENT,err,error,*999) - END DO - SELECT CASE(EQUATIONS_SET%SOLUTION_METHOD) - !Specify fem solution method - CASE(EQUATIONS_SET_FEM_SOLUTION_METHOD) - DO I=1,DEPENDENT_FIELD_NUMBER_OF_COMPONENTS - CALL FIELD_COMPONENT_INTERPOLATION_SET_AND_LOCK(EQUATIONS_SET%DEPENDENT%DEPENDENT_FIELD, & - & FIELD_U_VARIABLE_TYPE,I,FIELD_NODE_BASED_INTERPOLATION,err,error,*999) - CALL FIELD_COMPONENT_INTERPOLATION_SET_AND_LOCK(EQUATIONS_SET%DEPENDENT%DEPENDENT_FIELD, & - & FIELD_DELUDELN_VARIABLE_TYPE,I,FIELD_NODE_BASED_INTERPOLATION,err,error,*999) - END DO - CALL FIELD_SCALING_TYPE_GET(EQUATIONS_SET%GEOMETRY%GEOMETRIC_FIELD,GEOMETRIC_SCALING_TYPE, & - & err,error,*999) - CALL FIELD_SCALING_TYPE_SET(EQUATIONS_SET%DEPENDENT%DEPENDENT_FIELD,GEOMETRIC_SCALING_TYPE, & - & err,error,*999) - !Other solutions not defined yet - CASE DEFAULT - localError="The solution method of " & - & //TRIM(NumberToVString(EQUATIONS_SET%SOLUTION_METHOD,"*",err,error))// " is invalid." - CALL FlagError(localError,err,error,*999) - END SELECT - ELSE - !Check the user specified field - CALL FIELD_TYPE_CHECK(EQUATIONS_SET_SETUP%FIELD,FIELD_GENERAL_TYPE,err,error,*999) - CALL FIELD_DEPENDENT_TYPE_CHECK(EQUATIONS_SET_SETUP%FIELD,FIELD_DEPENDENT_TYPE,err,error,*999) - CALL FIELD_NUMBER_OF_VARIABLES_CHECK(EQUATIONS_SET_SETUP%FIELD,2,err,error,*999) - CALL FIELD_VARIABLE_TYPES_CHECK(EQUATIONS_SET_SETUP%FIELD,[FIELD_U_VARIABLE_TYPE, & - & FIELD_DELUDELN_VARIABLE_TYPE],err,error,*999) - CALL FIELD_DIMENSION_CHECK(EQUATIONS_SET_SETUP%FIELD,FIELD_U_VARIABLE_TYPE,FIELD_VECTOR_DIMENSION_TYPE, & - & err,error,*999) - CALL FIELD_DIMENSION_CHECK(EQUATIONS_SET_SETUP%FIELD,FIELD_DELUDELN_VARIABLE_TYPE, & - & FIELD_VECTOR_DIMENSION_TYPE,err,error,*999) - CALL FIELD_DATA_TYPE_CHECK(EQUATIONS_SET_SETUP%FIELD,FIELD_U_VARIABLE_TYPE,FIELD_DP_TYPE,err,error,*999) - CALL FIELD_DATA_TYPE_CHECK(EQUATIONS_SET_SETUP%FIELD,FIELD_DELUDELN_VARIABLE_TYPE,FIELD_DP_TYPE, & - & err,error,*999) - CALL FIELD_NUMBER_OF_COMPONENTS_GET(EQUATIONS_SET%GEOMETRY%GEOMETRIC_FIELD,FIELD_U_VARIABLE_TYPE, & - & NUMBER_OF_DIMENSIONS,err,error,*999) - !calculate number of components with one component for each dimension and one for pressure - DEPENDENT_FIELD_NUMBER_OF_COMPONENTS=NUMBER_OF_DIMENSIONS+1 - CALL FIELD_NUMBER_OF_COMPONENTS_CHECK(EQUATIONS_SET_SETUP%FIELD,FIELD_U_VARIABLE_TYPE, & - & DEPENDENT_FIELD_NUMBER_OF_COMPONENTS,err,error,*999) - CALL FIELD_NUMBER_OF_COMPONENTS_CHECK(EQUATIONS_SET_SETUP%FIELD,FIELD_DELUDELN_VARIABLE_TYPE, & - & DEPENDENT_FIELD_NUMBER_OF_COMPONENTS,err,error,*999) - SELECT CASE(EQUATIONS_SET%SOLUTION_METHOD) - CASE(EQUATIONS_SET_FEM_SOLUTION_METHOD) - CALL FIELD_COMPONENT_INTERPOLATION_CHECK(EQUATIONS_SET_SETUP%FIELD,FIELD_U_VARIABLE_TYPE,1, & - & FIELD_NODE_BASED_INTERPOLATION,err,error,*999) - CALL FIELD_COMPONENT_INTERPOLATION_CHECK(EQUATIONS_SET_SETUP%FIELD,FIELD_DELUDELN_VARIABLE_TYPE,1, & - & FIELD_NODE_BASED_INTERPOLATION,err,error,*999) - CASE DEFAULT - localError="The solution method of "//TRIM(NumberToVString(EQUATIONS_SET%SOLUTION_METHOD, & - &"*",err,error))//" is invalid." - CALL FlagError(localError,err,error,*999) - END SELECT - ENDIF - !Specify finish action - CASE(EQUATIONS_SET_SETUP_FINISH_ACTION) - IF(EQUATIONS_SET%DEPENDENT%DEPENDENT_FIELD_AUTO_CREATED) THEN - CALL FIELD_CREATE_FINISH(EQUATIONS_SET%DEPENDENT%DEPENDENT_FIELD,err,error,*999) - ENDIF - CASE DEFAULT - localError="The action type of "//TRIM(NumberToVString(EQUATIONS_SET_SETUP%ACTION_TYPE,"*",err,error))// & - & " for a setup type of "//TRIM(NumberToVString(EQUATIONS_SET_SETUP%SETUP_TYPE,"*",err,error))// & - & " is invalid for a standard Stokes fluid" - CALL FlagError(localError,err,error,*999) - END SELECT - CASE DEFAULT - localError="The third equations set specification of "// & - & TRIM(NumberToVstring(EQUATIONS_SET%SPECIFICATION(3),"*", & - & err,error))//" is invalid for a Stokes flow equations set." - CALL FLAG_ERROR(localError,err,error,*999) - END SELECT - CASE(EQUATIONS_SET_SETUP_INDEPENDENT_TYPE) - !define an independent field for ALE information - SELECT CASE(EQUATIONS_SET%SPECIFICATION(3)) - CASE(EQUATIONS_SET_ALE_STOKES_SUBTYPE,EQUATIONS_SET_PGM_STOKES_SUBTYPE) - SELECT CASE(EQUATIONS_SET_SETUP%ACTION_TYPE) - !Set start action - CASE(EQUATIONS_SET_SETUP_START_ACTION) - IF(EQUATIONS_SET%INDEPENDENT%INDEPENDENT_FIELD_AUTO_CREATED) THEN - !Create the auto created independent field - !start field creation with name 'INDEPENDENT_FIELD' - CALL FIELD_CREATE_START(EQUATIONS_SET_SETUP%FIELD_USER_NUMBER,EQUATIONS_SET%REGION, & - & EQUATIONS_SET%INDEPENDENT%INDEPENDENT_FIELD,err,error,*999) - !start creation of a new field - CALL FIELD_TYPE_SET_AND_LOCK(EQUATIONS_SET%INDEPENDENT%INDEPENDENT_FIELD,FIELD_GENERAL_TYPE,err,error,*999) - !label the field - CALL FIELD_LABEL_SET_AND_LOCK(EQUATIONS_SET%INDEPENDENT%INDEPENDENT_FIELD,"Independent Field",err,error,*999) - !define new created field to be independent - CALL FIELD_DEPENDENT_TYPE_SET_AND_LOCK(EQUATIONS_SET%INDEPENDENT%INDEPENDENT_FIELD, & - & FIELD_INDEPENDENT_TYPE,err,error,*999) - !look for decomposition rule already defined - CALL FIELD_MESH_DECOMPOSITION_GET(EQUATIONS_SET%GEOMETRY%GEOMETRIC_FIELD,GEOMETRIC_DECOMPOSITION, & - & err,error,*999) - !apply decomposition rule found on new created field - CALL FIELD_MESH_DECOMPOSITION_SET_AND_LOCK(EQUATIONS_SET%INDEPENDENT%INDEPENDENT_FIELD, & - & GEOMETRIC_DECOMPOSITION,err,error,*999) - !point new field to geometric field - CALL FIELD_GEOMETRIC_FIELD_SET_AND_LOCK(EQUATIONS_SET%INDEPENDENT%INDEPENDENT_FIELD,EQUATIONS_SET% & - & GEOMETRY%GEOMETRIC_FIELD,err,error,*999) - !set number of variables to 1 (1 for U) - INDEPENDENT_FIELD_NUMBER_OF_VARIABLES=1 - CALL FIELD_NUMBER_OF_VARIABLES_SET_AND_LOCK(EQUATIONS_SET%INDEPENDENT%INDEPENDENT_FIELD, & - & INDEPENDENT_FIELD_NUMBER_OF_VARIABLES,err,error,*999) - CALL FIELD_VARIABLE_TYPES_SET_AND_LOCK(EQUATIONS_SET%INDEPENDENT%INDEPENDENT_FIELD, & - & [FIELD_U_VARIABLE_TYPE],err,error,*999) - CALL FIELD_DIMENSION_SET_AND_LOCK(EQUATIONS_SET%INDEPENDENT%INDEPENDENT_FIELD,FIELD_U_VARIABLE_TYPE, & - & FIELD_VECTOR_DIMENSION_TYPE,err,error,*999) - CALL FIELD_DATA_TYPE_SET_AND_LOCK(EQUATIONS_SET%INDEPENDENT%INDEPENDENT_FIELD,FIELD_U_VARIABLE_TYPE, & - & FIELD_DP_TYPE,err,error,*999) - CALL FIELD_NUMBER_OF_COMPONENTS_GET(EQUATIONS_SET%GEOMETRY%GEOMETRIC_FIELD,FIELD_U_VARIABLE_TYPE, & - & NUMBER_OF_DIMENSIONS,err,error,*999) - !calculate number of components with one component for each dimension - INDEPENDENT_FIELD_NUMBER_OF_COMPONENTS=NUMBER_OF_DIMENSIONS - CALL FIELD_NUMBER_OF_COMPONENTS_SET_AND_LOCK(EQUATIONS_SET%INDEPENDENT%INDEPENDENT_FIELD, & - & FIELD_U_VARIABLE_TYPE,INDEPENDENT_FIELD_NUMBER_OF_COMPONENTS,err,error,*999) - CALL FIELD_COMPONENT_MESH_COMPONENT_GET(EQUATIONS_SET%GEOMETRY%GEOMETRIC_FIELD,FIELD_U_VARIABLE_TYPE, & - & 1,GEOMETRIC_MESH_COMPONENT,err,error,*999) - !Default to the geometric interpolation setup - DO I=1,INDEPENDENT_FIELD_NUMBER_OF_COMPONENTS - CALL FIELD_COMPONENT_MESH_COMPONENT_SET(EQUATIONS_SET%INDEPENDENT%INDEPENDENT_FIELD, & - & FIELD_U_VARIABLE_TYPE,I,GEOMETRIC_MESH_COMPONENT,err,error,*999) - END DO - SELECT CASE(EQUATIONS_SET%SOLUTION_METHOD) - !Specify fem solution method - CASE(EQUATIONS_SET_FEM_SOLUTION_METHOD) - DO I=1,INDEPENDENT_FIELD_NUMBER_OF_COMPONENTS - CALL FIELD_COMPONENT_INTERPOLATION_SET_AND_LOCK(EQUATIONS_SET%INDEPENDENT%INDEPENDENT_FIELD, & - & FIELD_U_VARIABLE_TYPE,I,FIELD_NODE_BASED_INTERPOLATION,err,error,*999) - END DO - CALL FIELD_SCALING_TYPE_GET(EQUATIONS_SET%GEOMETRY%GEOMETRIC_FIELD,GEOMETRIC_SCALING_TYPE, & - & err,error,*999) - CALL FIELD_SCALING_TYPE_SET(EQUATIONS_SET%INDEPENDENT%INDEPENDENT_FIELD,GEOMETRIC_SCALING_TYPE, & - & err,error,*999) - !Other solutions not defined yet - CASE DEFAULT - localError="The solution method of " & - & //TRIM(NumberToVString(EQUATIONS_SET%SOLUTION_METHOD,"*",err,error))// " is invalid." - CALL FlagError(localError,err,error,*999) - END SELECT - ELSE - !Check the user specified field - CALL FIELD_TYPE_CHECK(EQUATIONS_SET_SETUP%FIELD,FIELD_GENERAL_TYPE,err,error,*999) - CALL FIELD_DEPENDENT_TYPE_CHECK(EQUATIONS_SET_SETUP%FIELD,FIELD_INDEPENDENT_TYPE,err,error,*999) - CALL FIELD_NUMBER_OF_VARIABLES_CHECK(EQUATIONS_SET_SETUP%FIELD,1,err,error,*999) - CALL FIELD_VARIABLE_TYPES_CHECK(EQUATIONS_SET_SETUP%FIELD,[FIELD_U_VARIABLE_TYPE],err,error,*999) - CALL FIELD_DIMENSION_CHECK(EQUATIONS_SET_SETUP%FIELD,FIELD_U_VARIABLE_TYPE,FIELD_VECTOR_DIMENSION_TYPE, & - & err,error,*999) - CALL FIELD_DATA_TYPE_CHECK(EQUATIONS_SET_SETUP%FIELD,FIELD_U_VARIABLE_TYPE,FIELD_DP_TYPE,err,error,*999) - CALL FIELD_NUMBER_OF_COMPONENTS_GET(EQUATIONS_SET%GEOMETRY%GEOMETRIC_FIELD,FIELD_U_VARIABLE_TYPE, & - & NUMBER_OF_DIMENSIONS,err,error,*999) - !calculate number of components with one component for each dimension and one for pressure - INDEPENDENT_FIELD_NUMBER_OF_COMPONENTS=NUMBER_OF_DIMENSIONS - CALL FIELD_NUMBER_OF_COMPONENTS_CHECK(EQUATIONS_SET_SETUP%FIELD,FIELD_U_VARIABLE_TYPE, & - & INDEPENDENT_FIELD_NUMBER_OF_COMPONENTS,err,error,*999) - SELECT CASE(EQUATIONS_SET%SOLUTION_METHOD) - CASE(EQUATIONS_SET_FEM_SOLUTION_METHOD) - CALL FIELD_COMPONENT_INTERPOLATION_CHECK(EQUATIONS_SET_SETUP%FIELD,FIELD_U_VARIABLE_TYPE,1, & - & FIELD_NODE_BASED_INTERPOLATION,err,error,*999) - CALL FIELD_COMPONENT_INTERPOLATION_CHECK(EQUATIONS_SET_SETUP%FIELD,FIELD_DELUDELN_VARIABLE_TYPE,1, & - & FIELD_NODE_BASED_INTERPOLATION,err,error,*999) - CASE DEFAULT - localError="The solution method of "//TRIM(NumberToVString(EQUATIONS_SET%SOLUTION_METHOD, & - &"*",err,error))//" is invalid." - CALL FlagError(localError,err,error,*999) - END SELECT - ENDIF - !Specify finish action - CASE(EQUATIONS_SET_SETUP_FINISH_ACTION) - IF(EQUATIONS_SET%INDEPENDENT%INDEPENDENT_FIELD_AUTO_CREATED) THEN - CALL FIELD_CREATE_FINISH(EQUATIONS_SET%INDEPENDENT%INDEPENDENT_FIELD,err,error,*999) - CALL FIELD_PARAMETER_SET_CREATE(EQUATIONS_SET%INDEPENDENT%INDEPENDENT_FIELD,FIELD_U_VARIABLE_TYPE, & - & FIELD_MESH_DISPLACEMENT_SET_TYPE,err,error,*999) - CALL FIELD_PARAMETER_SET_CREATE(EQUATIONS_SET%INDEPENDENT%INDEPENDENT_FIELD,FIELD_U_VARIABLE_TYPE, & - & FIELD_MESH_VELOCITY_SET_TYPE,err,error,*999) - CALL FIELD_PARAMETER_SET_CREATE(EQUATIONS_SET%INDEPENDENT%INDEPENDENT_FIELD,FIELD_U_VARIABLE_TYPE, & - & FIELD_BOUNDARY_SET_TYPE,err,error,*999) - ENDIF - CASE DEFAULT - localError="The action type of "//TRIM(NumberToVString(EQUATIONS_SET_SETUP%ACTION_TYPE,"*",err,error))// & - & " for a setup type of "//TRIM(NumberToVString(EQUATIONS_SET_SETUP%SETUP_TYPE,"*",err,error))// & - & " is invalid for a standard Stokes fluid" - CALL FlagError(localError,err,error,*999) - END SELECT - CASE DEFAULT - localError="The third equations set specification of "// & - & TRIM(NumberToVstring(EQUATIONS_SET%SPECIFICATION(3),"*", & - & err,error))//" is invalid for a Stokes flow equations set." - CALL FlagError(localError,err,error,*999) - END SELECT - !Define analytic part for Stokes problem - CASE(EQUATIONS_SET_SETUP_ANALYTIC_TYPE) - SELECT CASE(EQUATIONS_SET%SPECIFICATION(3)) - CASE(EQUATIONS_SET_STATIC_STOKES_SUBTYPE,EQUATIONS_SET_LAPLACE_STOKES_SUBTYPE, & - & EQUATIONS_SET_TRANSIENT_STOKES_SUBTYPE) - SELECT CASE(EQUATIONS_SET_SETUP%ACTION_TYPE) - !Set start action - CASE(EQUATIONS_SET_SETUP_START_ACTION) - IF(EQUATIONS_SET%DEPENDENT%DEPENDENT_FINISHED) THEN - IF(ASSOCIATED(EQUATIONS_SET%DEPENDENT%DEPENDENT_FIELD)) THEN - IF(ASSOCIATED(EQUATIONS_SET%GEOMETRY%GEOMETRIC_FIELD)) THEN - CALL FIELD_NUMBER_OF_COMPONENTS_GET(EQUATIONS_SET%GEOMETRY%GEOMETRIC_FIELD,FIELD_U_VARIABLE_TYPE, & - & NUMBER_OF_DIMENSIONS,err,error,*999) - SELECT CASE(EQUATIONS_SET_SETUP%ANALYTIC_FUNCTION_TYPE) - CASE(EQUATIONS_SET_STOKES_EQUATION_TWO_DIM_1) - !Set analtyic function type - EQUATIONS_SET%ANALYTIC%ANALYTIC_FUNCTION_TYPE=EQUATIONS_SET_STOKES_EQUATION_TWO_DIM_1 - CASE(EQUATIONS_SET_STOKES_EQUATION_TWO_DIM_2) - !Set analtyic function type - EQUATIONS_SET%ANALYTIC%ANALYTIC_FUNCTION_TYPE=EQUATIONS_SET_STOKES_EQUATION_TWO_DIM_2 - CASE(EQUATIONS_SET_STOKES_EQUATION_TWO_DIM_3) - !Set analtyic function type - EQUATIONS_SET%ANALYTIC%ANALYTIC_FUNCTION_TYPE=EQUATIONS_SET_STOKES_EQUATION_TWO_DIM_3 - CASE(EQUATIONS_SET_STOKES_EQUATION_TWO_DIM_4) - !Set analtyic function type - EQUATIONS_SET%ANALYTIC%ANALYTIC_FUNCTION_TYPE=EQUATIONS_SET_STOKES_EQUATION_TWO_DIM_4 - CASE(EQUATIONS_SET_STOKES_EQUATION_TWO_DIM_5) - !Set analtyic function type - EQUATIONS_SET%ANALYTIC%ANALYTIC_FUNCTION_TYPE=EQUATIONS_SET_STOKES_EQUATION_TWO_DIM_5 - CASE(EQUATIONS_SET_STOKES_EQUATION_THREE_DIM_1) - !Set analtyic function type - EQUATIONS_SET%ANALYTIC%ANALYTIC_FUNCTION_TYPE=EQUATIONS_SET_STOKES_EQUATION_THREE_DIM_1 - CASE(EQUATIONS_SET_STOKES_EQUATION_THREE_DIM_2) - !Set analtyic function type - EQUATIONS_SET%ANALYTIC%ANALYTIC_FUNCTION_TYPE=EQUATIONS_SET_STOKES_EQUATION_THREE_DIM_2 - CASE(EQUATIONS_SET_STOKES_EQUATION_THREE_DIM_3) - !Set analtyic function type - EQUATIONS_SET%ANALYTIC%ANALYTIC_FUNCTION_TYPE=EQUATIONS_SET_STOKES_EQUATION_THREE_DIM_3 - CASE(EQUATIONS_SET_STOKES_EQUATION_THREE_DIM_4) - !Set analtyic function type - EQUATIONS_SET%ANALYTIC%ANALYTIC_FUNCTION_TYPE=EQUATIONS_SET_STOKES_EQUATION_THREE_DIM_4 - CASE(EQUATIONS_SET_STOKES_EQUATION_THREE_DIM_5) - !Set analtyic function type - EQUATIONS_SET%ANALYTIC%ANALYTIC_FUNCTION_TYPE=EQUATIONS_SET_STOKES_EQUATION_THREE_DIM_5 - CASE DEFAULT - localError="The specified analytic function type of "// & - & TRIM(NumberToVString(EQUATIONS_SET_SETUP%ANALYTIC_FUNCTION_TYPE,"*",err,error))// & - & " is invalid for an analytic Stokes problem." - CALL FlagError(localError,err,error,*999) - END SELECT - ELSE - CALL FlagError("Equations set geometric field is not associated.",err,error,*999) - ENDIF - ELSE - CALL FlagError("Equations set dependent field is not associated.",err,error,*999) - ENDIF - ELSE - CALL FlagError("Equations set dependent field has not been finished.",err,error,*999) - ENDIF - CASE(EQUATIONS_SET_SETUP_FINISH_ACTION) - IF(ASSOCIATED(EQUATIONS_SET%ANALYTIC)) THEN - IF(ASSOCIATED(EQUATIONS_SET%ANALYTIC%ANALYTIC_FIELD)) THEN - IF(EQUATIONS_SET%ANALYTIC%ANALYTIC_FIELD_AUTO_CREATED) THEN - CALL FIELD_CREATE_FINISH(EQUATIONS_SET%DEPENDENT%DEPENDENT_FIELD,err,error,*999) - ENDIF - ENDIF - ELSE - CALL FlagError("Equations set analytic is not associated.",err,error,*999) - ENDIF - CASE DEFAULT - localError="The action type of "//TRIM(NumberToVString(EQUATIONS_SET_SETUP%ACTION_TYPE,"*",err,error))// & - & " for a setup type of "//TRIM(NumberToVString(EQUATIONS_SET_SETUP%SETUP_TYPE,"*",err,error))// & - & " is invalid for an analytic Stokes problem." - CALL FlagError(localError,err,error,*999) - END SELECT - CASE DEFAULT - localError="The third equations set specification of "// & - & TRIM(NumberToVString(EQUATIONS_SET%SPECIFICATION(3),"*",err,error))// & - " is invalid for a Stokes flow equations set." - CALL FLAG_ERROR(localError,err,error,*999) - END SELECT - !Define materials field - CASE(EQUATIONS_SET_SETUP_MATERIALS_TYPE) - SELECT CASE(EQUATIONS_SET%SPECIFICATION(3)) - CASE(EQUATIONS_SET_STATIC_STOKES_SUBTYPE,EQUATIONS_SET_LAPLACE_STOKES_SUBTYPE, & - & EQUATIONS_SET_TRANSIENT_STOKES_SUBTYPE,EQUATIONS_SET_ALE_STOKES_SUBTYPE, & - & EQUATIONS_SET_PGM_STOKES_SUBTYPE) - !variable X with has Y components, here Y represents viscosity only - MATERIAL_FIELD_NUMBER_OF_VARIABLES=1!X - MATERIAL_FIELD_NUMBER_OF_COMPONENTS=2!Y - SELECT CASE(EQUATIONS_SET_SETUP%ACTION_TYPE) - !Specify start action - CASE(EQUATIONS_SET_SETUP_START_ACTION) - EQUATIONS_MATERIALS=>EQUATIONS_SET%MATERIALS - IF(ASSOCIATED(EQUATIONS_MATERIALS)) THEN - IF(EQUATIONS_MATERIALS%MATERIALS_FIELD_AUTO_CREATED) THEN - !Create the auto created materials field - !start field creation with name 'MATERIAL_FIELD' - CALL FIELD_CREATE_START(EQUATIONS_SET_SETUP%FIELD_USER_NUMBER,EQUATIONS_SET%REGION,EQUATIONS_SET% & - & MATERIALS%MATERIALS_FIELD,err,error,*999) - CALL FIELD_TYPE_SET_AND_LOCK(EQUATIONS_MATERIALS%MATERIALS_FIELD,FIELD_MATERIAL_TYPE,err,error,*999) - !label the field - CALL FIELD_LABEL_SET_AND_LOCK(EQUATIONS_MATERIALS%MATERIALS_FIELD,"Materials Field",err,error,*999) - CALL FIELD_DEPENDENT_TYPE_SET_AND_LOCK(EQUATIONS_MATERIALS%MATERIALS_FIELD,FIELD_INDEPENDENT_TYPE, & - & err,error,*999) - CALL FIELD_MESH_DECOMPOSITION_GET(EQUATIONS_SET%GEOMETRY%GEOMETRIC_FIELD,GEOMETRIC_DECOMPOSITION, & - & err,error,*999) - !apply decomposition rule found on new created field - CALL FIELD_MESH_DECOMPOSITION_SET_AND_LOCK(EQUATIONS_SET%MATERIALS%MATERIALS_FIELD, & - & GEOMETRIC_DECOMPOSITION,err,error,*999) - !point new field to geometric field - CALL FIELD_GEOMETRIC_FIELD_SET_AND_LOCK(EQUATIONS_MATERIALS%MATERIALS_FIELD,EQUATIONS_SET%GEOMETRY% & - & GEOMETRIC_FIELD,err,error,*999) - CALL FIELD_NUMBER_OF_VARIABLES_SET(EQUATIONS_MATERIALS%MATERIALS_FIELD, & - & MATERIAL_FIELD_NUMBER_OF_VARIABLES,err,error,*999) - CALL FIELD_VARIABLE_TYPES_SET_AND_LOCK(EQUATIONS_MATERIALS%MATERIALS_FIELD,[FIELD_U_VARIABLE_TYPE], & - & err,error,*999) - CALL FIELD_DIMENSION_SET_AND_LOCK(EQUATIONS_MATERIALS%MATERIALS_FIELD,FIELD_U_VARIABLE_TYPE, & - & FIELD_VECTOR_DIMENSION_TYPE,err,error,*999) - CALL FIELD_DATA_TYPE_SET_AND_LOCK(EQUATIONS_MATERIALS%MATERIALS_FIELD,FIELD_U_VARIABLE_TYPE, & - & FIELD_DP_TYPE,err,error,*999) - CALL FIELD_NUMBER_OF_COMPONENTS_SET_AND_LOCK(EQUATIONS_MATERIALS%MATERIALS_FIELD,FIELD_U_VARIABLE_TYPE, & - & MATERIAL_FIELD_NUMBER_OF_COMPONENTS,err,error,*999) - CALL FIELD_COMPONENT_MESH_COMPONENT_GET(EQUATIONS_SET%GEOMETRY%GEOMETRIC_FIELD,FIELD_U_VARIABLE_TYPE, & - & 1,GEOMETRIC_COMPONENT_NUMBER,err,error,*999) - CALL FIELD_COMPONENT_MESH_COMPONENT_SET(EQUATIONS_MATERIALS%MATERIALS_FIELD,FIELD_U_VARIABLE_TYPE, & - & 1,GEOMETRIC_COMPONENT_NUMBER,err,error,*999) - CALL FIELD_COMPONENT_INTERPOLATION_SET(EQUATIONS_MATERIALS%MATERIALS_FIELD,FIELD_U_VARIABLE_TYPE, & - & 1,FIELD_CONSTANT_INTERPOLATION,err,error,*999) - !Default the field scaling to that of the geometric field - CALL FIELD_SCALING_TYPE_GET(EQUATIONS_SET%GEOMETRY%GEOMETRIC_FIELD,GEOMETRIC_SCALING_TYPE,err,error,*999) - CALL FIELD_SCALING_TYPE_SET(EQUATIONS_MATERIALS%MATERIALS_FIELD,GEOMETRIC_SCALING_TYPE,err,error,*999) - ELSE - !Check the user specified field - CALL FIELD_TYPE_CHECK(EQUATIONS_SET_SETUP%FIELD,FIELD_MATERIAL_TYPE,err,error,*999) - CALL FIELD_DEPENDENT_TYPE_CHECK(EQUATIONS_SET_SETUP%FIELD,FIELD_INDEPENDENT_TYPE,err,error,*999) - CALL FIELD_NUMBER_OF_VARIABLES_CHECK(EQUATIONS_SET_SETUP%FIELD,1,err,error,*999) - CALL FIELD_VARIABLE_TYPES_CHECK(EQUATIONS_SET_SETUP%FIELD,[FIELD_U_VARIABLE_TYPE],err,error,*999) - CALL FIELD_DIMENSION_CHECK(EQUATIONS_SET_SETUP%FIELD,FIELD_U_VARIABLE_TYPE,FIELD_VECTOR_DIMENSION_TYPE, & - & err,error,*999) - CALL FIELD_DATA_TYPE_CHECK(EQUATIONS_SET_SETUP%FIELD,FIELD_U_VARIABLE_TYPE,FIELD_DP_TYPE,err,error,*999) - CALL FIELD_NUMBER_OF_COMPONENTS_GET(EQUATIONS_SET%GEOMETRY%GEOMETRIC_FIELD,FIELD_U_VARIABLE_TYPE, & - & NUMBER_OF_DIMENSIONS,err,error,*999) - CALL FIELD_NUMBER_OF_COMPONENTS_CHECK(EQUATIONS_SET_SETUP%FIELD,FIELD_U_VARIABLE_TYPE,1,err,error,*999) - ENDIF - ELSE - CALL FlagError("Equations set materials is not associated.",err,error,*999) - END IF - !Specify start action - CASE(EQUATIONS_SET_SETUP_FINISH_ACTION) - EQUATIONS_MATERIALS=>EQUATIONS_SET%MATERIALS - IF(ASSOCIATED(EQUATIONS_MATERIALS)) THEN - IF(EQUATIONS_MATERIALS%MATERIALS_FIELD_AUTO_CREATED) THEN - !Finish creating the materials field - CALL FIELD_CREATE_FINISH(EQUATIONS_MATERIALS%MATERIALS_FIELD,err,error,*999) - !Set the default values for the materials field - !First set the mu values to 0.001 - !MATERIAL_FIELD_NUMBER_OF_COMPONENTS - ! viscosity=1 - CALL FIELD_COMPONENT_VALUES_INITIALISE(EQUATIONS_MATERIALS%MATERIALS_FIELD,FIELD_U_VARIABLE_TYPE, & - & FIELD_VALUES_SET_TYPE,1,1.0_DP,err,error,*999) - ! density=2 -!\todo: Initialise fields properly - ! CALL FIELD_COMPONENT_VALUES_INITIALISE(EQUATIONS_MATERIALS%MATERIALS_FIELD,FIELD_U_VARIABLE_TYPE, & - ! & FIELD_VALUES_SET_TYPE,2,100.0_DP,err,error,*999) - ENDIF - ELSE - CALL FlagError("Equations set materials is not associated.",err,error,*999) - ENDIF - CASE DEFAULT - localError="The action type of "//TRIM(NumberToVString(EQUATIONS_SET_SETUP%ACTION_TYPE,"*",err,error))// & - & " for a setup type of "//TRIM(NumberToVString(EQUATIONS_SET_SETUP%SETUP_TYPE,"*",err,error))// & - & " is invalid for Stokes equation." - CALL FlagError(localError,err,error,*999) - END SELECT - CASE DEFAULT - localError="The third equations set specification of "// & - & TRIM(NumberToVString(EQUATIONS_SET%SPECIFICATION(3),"*",err,error))// & - & " is invalid for a Stokes flow equations set." - CALL FlagError(localError,err,error,*999) - END SELECT - !Define the source field - CASE(EQUATIONS_SET_SETUP_SOURCE_TYPE) - SELECT CASE(EQUATIONS_SET%SPECIFICATION(3)) - CASE(EQUATIONS_SET_STATIC_STOKES_SUBTYPE,EQUATIONS_SET_LAPLACE_STOKES_SUBTYPE, & - & EQUATIONS_SET_TRANSIENT_STOKES_SUBTYPE,EQUATIONS_SET_ALE_STOKES_SUBTYPE, & - & EQUATIONS_SET_PGM_STOKES_SUBTYPE) - !TO DO: INCLUDE GRAVITY AS SOURCE TYPE - SELECT CASE(EQUATIONS_SET_SETUP%ACTION_TYPE) - CASE(EQUATIONS_SET_SETUP_START_ACTION) - !Do nothing - CASE(EQUATIONS_SET_SETUP_FINISH_ACTION) - !Do nothing - !? Maybe set finished flag???? - CASE DEFAULT - localError="The action type of "//TRIM(NumberToVString(EQUATIONS_SET_SETUP%ACTION_TYPE,"*",err,error))// & - & " for a setup type of "//TRIM(NumberToVString(EQUATIONS_SET_SETUP%SETUP_TYPE,"*",err,error))// & - & " is invalid for a standard Stokes fluid." - CALL FlagError(localError,err,error,*999) - END SELECT - CASE DEFAULT - localError="The third equations set specification of "// & - & TRIM(NumberToVString(EQUATIONS_SET%SPECIFICATION(3),"*",err,error))// & - & " is invalid for a Stokes flow equations set." - CALL FLAG_ERROR(localError,err,error,*999) - END SELECT - !Define equations type - CASE(EQUATIONS_SET_SETUP_EQUATIONS_TYPE) - SELECT CASE(EQUATIONS_SET%SPECIFICATION(3)) - CASE(EQUATIONS_SET_STATIC_STOKES_SUBTYPE,EQUATIONS_SET_LAPLACE_STOKES_SUBTYPE) - SELECT CASE(EQUATIONS_SET_SETUP%ACTION_TYPE) - CASE(EQUATIONS_SET_SETUP_START_ACTION) - EQUATIONS_MATERIALS=>EQUATIONS_SET%MATERIALS - IF(ASSOCIATED(EQUATIONS_MATERIALS)) THEN - IF(EQUATIONS_MATERIALS%MATERIALS_FINISHED) THEN - CALL Equations_CreateStart(EQUATIONS_SET,equations,err,error,*999) - CALL Equations_LinearityTypeSet(equations,EQUATIONS_LINEAR,err,error,*999) - CALL Equations_TimeDependenceTypeSet(equations,EQUATIONS_STATIC,err,error,*999) - ELSE - CALL FlagError("Equations set materials has not been finished.",err,error,*999) - ENDIF - ELSE - CALL FlagError("Equations materials is not associated.",err,error,*999) - ENDIF - CASE(EQUATIONS_SET_SETUP_FINISH_ACTION) - SELECT CASE(EQUATIONS_SET%SOLUTION_METHOD) - CASE(EQUATIONS_SET_FEM_SOLUTION_METHOD) - !Finish the equations creation - CALL EquationsSet_EquationsGet(EQUATIONS_SET,equations,err,error,*999) - CALL Equations_CreateFinish(equations,err,error,*999) - NULLIFY(vectorEquations) - CALL Equations_VectorEquationsGet(equations,vectorEquations,err,error,*999) - !Create the equations mapping. - CALL EquationsMapping_VectorCreateStart(vectorEquations,FIELD_DELUDELN_VARIABLE_TYPE,vectorMapping, & - & err,error,*999) - CALL EquationsMapping_LinearMatricesNumberSet(vectorMapping,1,err,error,*999) - CALL EquationsMapping_LinearMatricesVariableTypesSet(vectorMapping,[FIELD_U_VARIABLE_TYPE], & - & err,error,*999) - CALL EquationsMapping_RHSVariableTypeSet(vectorMapping,FIELD_DELUDELN_VARIABLE_TYPE, & - & err,error,*999) - CALL EquationsMapping_VectorCreateFinish(vectorMapping,err,error,*999) - !Create the equations matrices - CALL EquationsMatrices_VectorCreateStart(vectorEquations,vectorMatrices,err,error,*999) - SELECT CASE(equations%sparsityType) - CASE(EQUATIONS_MATRICES_FULL_MATRICES) - CALL EquationsMatrices_LinearStorageTypeSet(vectorMatrices,[MATRIX_BLOCK_STORAGE_TYPE], & - & err,error,*999) - CASE(EQUATIONS_MATRICES_SPARSE_MATRICES) - CALL EquationsMatrices_LinearStorageTypeSet(vectorMatrices, & - & [MATRIX_COMPRESSED_ROW_STORAGE_TYPE],err,error,*999) - CALL EquationsMatrices_LinearStructureTypeSet(vectorMatrices, & - & [EQUATIONS_MATRIX_FEM_STRUCTURE],err,error,*999) - CASE DEFAULT - localError="The equations matrices sparsity type of "// & - & TRIM(NumberToVString(equations%sparsityType,"*",err,error))//" is invalid." - CALL FlagError(localError,err,error,*999) - END SELECT - CALL EquationsMatrices_VectorCreateFinish(vectorMatrices,err,error,*999) - CASE DEFAULT - localError="The solution method of "//TRIM(NumberToVString(EQUATIONS_SET%SOLUTION_METHOD, & - & "*",err,error))//" is invalid." - CALL FlagError(localError,err,error,*999) - END SELECT - CASE DEFAULT - localError="The action type of "//TRIM(NumberToVString(EQUATIONS_SET_SETUP%ACTION_TYPE,"*",err,error))// & - & " for a setup type of "//TRIM(NumberToVString(EQUATIONS_SET_SETUP%SETUP_TYPE,"*",err,error))// & - & " is invalid for a steady Laplace equation." - CALL FlagError(localError,err,error,*999) - END SELECT - CASE(EQUATIONS_SET_TRANSIENT_STOKES_SUBTYPE,EQUATIONS_SET_ALE_STOKES_SUBTYPE,EQUATIONS_SET_PGM_STOKES_SUBTYPE) - SELECT CASE(EQUATIONS_SET_SETUP%ACTION_TYPE) - CASE(EQUATIONS_SET_SETUP_START_ACTION) - EQUATIONS_MATERIALS=>EQUATIONS_SET%MATERIALS - IF(ASSOCIATED(EQUATIONS_MATERIALS)) THEN - IF(EQUATIONS_MATERIALS%MATERIALS_FINISHED) THEN - CALL Equations_CreateStart(EQUATIONS_SET,equations,err,error,*999) - CALL Equations_EquationTypeSet(equations,EQUATIONS_VECTOR_TYPE,err,error,*999) - CALL Equations_LinearityTypeSet(equations,EQUATIONS_LINEAR,err,error,*999) - CALL Equations_TimeDependenceTypeSet(equations,EQUATIONS_FIRST_ORDER_DYNAMIC,err,error,*999) - ELSE - CALL FlagError("Equations set materials has not been finished.",err,error,*999) - ENDIF - ELSE - CALL FlagError("Equations materials is not associated.",err,error,*999) - ENDIF - CASE(EQUATIONS_SET_SETUP_FINISH_ACTION) - SELECT CASE(EQUATIONS_SET%SOLUTION_METHOD) - CASE(EQUATIONS_SET_FEM_SOLUTION_METHOD) - !Finish the equations creation - CALL EquationsSet_EquationsGet(EQUATIONS_SET,equations,err,error,*999) - CALL Equations_CreateFinish(equations,err,error,*999) - NULLIFY(vectorEquations) - CALL Equations_VectorEquationsGet(equations,vectorEquations,err,error,*999) - !Create the equations mapping. - CALL EquationsMapping_VectorCreateStart(vectorEquations,FIELD_DELUDELN_VARIABLE_TYPE,vectorMapping, & - & err,error,*999) - CALL EquationsMapping_DynamicMatricesSet(vectorMapping,.TRUE.,.TRUE.,err,error,*999) - CALL EquationsMapping_DynamicVariableTypeSet(vectorMapping,FIELD_U_VARIABLE_TYPE,err,error,*999) - CALL EquationsMapping_RHSVariableTypeSet(vectorMapping,FIELD_DELUDELN_VARIABLE_TYPE, & - & err,error,*999) - CALL EquationsMapping_VectorCreateFinish(vectorMapping,err,error,*999) - !Create the equations matrices - CALL EquationsMatrices_VectorCreateStart(vectorEquations,vectorMatrices,err,error,*999) - !Set up matrix storage and structure - IF(equations%lumpingType==EQUATIONS_LUMPED_MATRICES) THEN - !Set up lumping - CALL EquationsMatrices_DynamicLumpingTypeSet(vectorMatrices, & - & [EQUATIONS_MATRIX_UNLUMPED,EQUATIONS_MATRIX_LUMPED],err,error,*999) - CALL EquationsMatrices_DynamicStorageTypeSet(vectorMatrices, & - & [DISTRIBUTED_MATRIX_COMPRESSED_ROW_STORAGE_TYPE,DISTRIBUTED_MATRIX_DIAGONAL_STORAGE_TYPE] & - & ,err,error,*999) - CALL EquationsMatrices_DynamicStructureTypeSet(vectorMatrices, & - & [EQUATIONS_MATRIX_FEM_STRUCTURE,EQUATIONS_MATRIX_DIAGONAL_STRUCTURE],err,error,*999) - ELSE - SELECT CASE(equations%sparsityType) - CASE(EQUATIONS_MATRICES_FULL_MATRICES) - CALL EquationsMatrices_LinearStorageTypeSet(vectorMatrices, & - & [DISTRIBUTED_MATRIX_BLOCK_STORAGE_TYPE,DISTRIBUTED_MATRIX_BLOCK_STORAGE_TYPE],err,error,*999) - CASE(EQUATIONS_MATRICES_SPARSE_MATRICES) - CALL EquationsMatrices_DynamicStorageTypeSet(vectorMatrices, & - & [DISTRIBUTED_MATRIX_COMPRESSED_ROW_STORAGE_TYPE, & - & DISTRIBUTED_MATRIX_COMPRESSED_ROW_STORAGE_TYPE],err,error,*999) - CALL EquationsMatrices_DynamicStructureTypeSet(vectorMatrices, & - & [EQUATIONS_MATRIX_FEM_STRUCTURE,EQUATIONS_MATRIX_FEM_STRUCTURE],err,error,*999) - CASE DEFAULT - localError="The equations matrices sparsity type of "// & - & TRIM(NumberToVString(equations%sparsityType,"*",err,error))//" is invalid." - CALL FlagError(localError,err,error,*999) - END SELECT - ENDIF - CALL EquationsMatrices_VectorCreateFinish(vectorMatrices,err,error,*999) - CASE DEFAULT - localError="The solution method of "//TRIM(NumberToVString(EQUATIONS_SET%SOLUTION_METHOD,"*", & - & err,error))//" is invalid." - CALL FlagError(localError,err,error,*999) - END SELECT - CASE DEFAULT - localError="The action type of "//TRIM(NumberToVString(EQUATIONS_SET_SETUP%ACTION_TYPE,"*",err,error))// & - & " for a setup type of "//TRIM(NumberToVString(EQUATIONS_SET_SETUP%SETUP_TYPE,"*",err,error))// & - & " is invalid for a Stokes equation." - CALL FlagError(localError,err,error,*999) - END SELECT - CASE DEFAULT - localError="The third equations set specification of "// & - & TRIM(NumberToVString(EQUATIONS_SET%SPECIFICATION(3),"*",err,error))// & - & " is invalid for a Stokes flow equations set." - CALL FlagError(localError,err,error,*999) - END SELECT - CASE DEFAULT - localError="The setup type of "//TRIM(NumberToVString(EQUATIONS_SET_SETUP%SETUP_TYPE,"*",err,error))// & - & " is invalid for a standard Stokes fluid." - CALL FlagError(localError,err,error,*999) - END SELECT - CASE DEFAULT - localError="The equations set subtype of "//TRIM(NumberToVString(EQUATIONS_SET%SPECIFICATION(3),"*",err,error))// & - & " does not equal a standard Stokes fluid subtype." - CALL FlagError(localError,err,error,*999) - END SELECT - ELSE - CALL FlagError("Equations set is not associated.",err,error,*999) - ENDIF - - EXITS("STOKES_EQUATIONS_SET_SETUP") - RETURN -999 ERRORSEXITS("STOKES_EQUATIONS_SET_SETUP",err,error) - RETURN 1 - END SUBROUTINE STOKES_EQUATIONS_SET_SETUP - -! -!================================================================================================================================ -! - - !>Sets the problem specification for a Stokes fluid problem. - SUBROUTINE Stokes_ProblemSpecificationSet(problem,problemSpecification,err,error,*) - - !Argument variables - TYPE(PROBLEM_TYPE), POINTER :: problem != 3 entries.",err,error,*999) - ENDIF - ELSE - CALL FlagError("Problem is not associated.",err,error,*999) - ENDIF - - EXITS("Stokes_ProblemSpecificationSet") - RETURN -999 ERRORSEXITS("Stokes_ProblemSpecificationSet",err,error) - RETURN 1 - - END SUBROUTINE Stokes_ProblemSpecificationSet - -! -!================================================================================================================================ -! - - !>Sets up the Stokes problem. - SUBROUTINE STOKES_PROBLEM_SETUP(PROBLEM,PROBLEM_SETUP,err,error,*) - - !Argument variables - TYPE(PROBLEM_TYPE), POINTER :: PROBLEM !PROBLEM%CONTROL_LOOP - CALL CONTROL_LOOP_GET(CONTROL_LOOP_ROOT,CONTROL_LOOP_NODE,CONTROL_LOOP,err,error,*999) - CALL CONTROL_LOOP_CREATE_FINISH(CONTROL_LOOP,err,error,*999) - CASE DEFAULT - localError="The action type of "//TRIM(NumberToVString(PROBLEM_SETUP%ACTION_TYPE,"*",err,error))// & - & " for a setup type of "//TRIM(NumberToVString(PROBLEM_SETUP%SETUP_TYPE,"*",err,error))// & - & " is invalid for a standard Stokes fluid." - CALL FlagError(localError,err,error,*999) - END SELECT - CASE(PROBLEM_SETUP_SOLVERS_TYPE) - !Get the control loop - CONTROL_LOOP_ROOT=>PROBLEM%CONTROL_LOOP - CALL CONTROL_LOOP_GET(CONTROL_LOOP_ROOT,CONTROL_LOOP_NODE,CONTROL_LOOP,err,error,*999) - SELECT CASE(PROBLEM_SETUP%ACTION_TYPE) - CASE(PROBLEM_SETUP_START_ACTION) - !Start the solvers creation - CALL SOLVERS_CREATE_START(CONTROL_LOOP,SOLVERS,err,error,*999) - CALL SOLVERS_NUMBER_SET(SOLVERS,1,err,error,*999) - !Set the solver to be a linear solver - CALL SOLVERS_SOLVER_GET(SOLVERS,1,SOLVER,err,error,*999) - CALL SOLVER_TYPE_SET(SOLVER,SOLVER_LINEAR_TYPE,err,error,*999) - !Set solver defaults - CALL SOLVER_LIBRARY_TYPE_SET(SOLVER,SOLVER_PETSC_LIBRARY,err,error,*999) - CASE(PROBLEM_SETUP_FINISH_ACTION) - !Get the solvers - CALL CONTROL_LOOP_SOLVERS_GET(CONTROL_LOOP,SOLVERS,err,error,*999) - !Finish the solvers creation - CALL SOLVERS_CREATE_FINISH(SOLVERS,err,error,*999) - CASE DEFAULT - localError="The action type of "//TRIM(NumberToVString(PROBLEM_SETUP%ACTION_TYPE,"*",err,error))// & - & " for a setup type of "//TRIM(NumberToVString(PROBLEM_SETUP%SETUP_TYPE,"*",err,error))// & - & " is invalid for a standard Stokes fluid." - CALL FlagError(localError,err,error,*999) - END SELECT - CASE(PROBLEM_SETUP_SOLVER_EQUATIONS_TYPE) - SELECT CASE(PROBLEM_SETUP%ACTION_TYPE) - CASE(PROBLEM_SETUP_START_ACTION) - !Get the control loop - CONTROL_LOOP_ROOT=>PROBLEM%CONTROL_LOOP - CALL CONTROL_LOOP_GET(CONTROL_LOOP_ROOT,CONTROL_LOOP_NODE,CONTROL_LOOP,err,error,*999) - !Get the solver - CALL CONTROL_LOOP_SOLVERS_GET(CONTROL_LOOP,SOLVERS,err,error,*999) - CALL SOLVERS_SOLVER_GET(SOLVERS,1,SOLVER,err,error,*999) - !Create the solver equations - CALL SOLVER_EQUATIONS_CREATE_START(SOLVER,SOLVER_EQUATIONS,err,error,*999) - CALL SOLVER_EQUATIONS_LINEARITY_TYPE_SET(SOLVER_EQUATIONS,SOLVER_EQUATIONS_LINEAR,err,error,*999) - CALL SOLVER_EQUATIONS_TIME_DEPENDENCE_TYPE_SET(SOLVER_EQUATIONS,SOLVER_EQUATIONS_STATIC,err,error,*999) - CALL SOLVER_EQUATIONS_SPARSITY_TYPE_SET(SOLVER_EQUATIONS,SOLVER_SPARSE_MATRICES,err,error,*999) - CASE(PROBLEM_SETUP_FINISH_ACTION) - !Get the control loop - CONTROL_LOOP_ROOT=>PROBLEM%CONTROL_LOOP - CALL CONTROL_LOOP_GET(CONTROL_LOOP_ROOT,CONTROL_LOOP_NODE,CONTROL_LOOP,err,error,*999) - !Get the solver equations - CALL CONTROL_LOOP_SOLVERS_GET(CONTROL_LOOP,SOLVERS,err,error,*999) - CALL SOLVERS_SOLVER_GET(SOLVERS,1,SOLVER,err,error,*999) - CALL SOLVER_SOLVER_EQUATIONS_GET(SOLVER,SOLVER_EQUATIONS,err,error,*999) - !Finish the solver equations creation - CALL SOLVER_EQUATIONS_CREATE_FINISH(SOLVER_EQUATIONS,err,error,*999) - CASE DEFAULT - localError="The action type of "//TRIM(NumberToVString(PROBLEM_SETUP%ACTION_TYPE,"*",err,error))// & - & " for a setup type of "//TRIM(NumberToVString(PROBLEM_SETUP%SETUP_TYPE,"*",err,error))// & - & " is invalid for a standard Stokes fluid." - CALL FlagError(localError,err,error,*999) - END SELECT - CASE DEFAULT - localError="The setup type of "//TRIM(NumberToVString(PROBLEM_SETUP%SETUP_TYPE,"*",err,error))// & - & " is invalid for a standard Stokes fluid." - CALL FlagError(localError,err,error,*999) - END SELECT - !Set problem subtype for transient Stokes problems - CASE(PROBLEM_TRANSIENT_STOKES_SUBTYPE,PROBLEM_PGM_STOKES_SUBTYPE) - SELECT CASE(PROBLEM_SETUP%SETUP_TYPE) - CASE(PROBLEM_SETUP_INITIAL_TYPE) - SELECT CASE(PROBLEM_SETUP%ACTION_TYPE) - CASE(PROBLEM_SETUP_START_ACTION) - !Do nothing???? - CASE(PROBLEM_SETUP_FINISH_ACTION) - !Do nothing???? - CASE DEFAULT - localError="The action type of "//TRIM(NumberToVString(PROBLEM_SETUP%ACTION_TYPE,"*",err,error))// & - & " for a setup type of "//TRIM(NumberToVString(PROBLEM_SETUP%SETUP_TYPE,"*",err,error))// & - & " is invalid for a transient Stokes fluid." - CALL FlagError(localError,err,error,*999) - END SELECT - CASE(PROBLEM_SETUP_CONTROL_TYPE) - SELECT CASE(PROBLEM_SETUP%ACTION_TYPE) - CASE(PROBLEM_SETUP_START_ACTION) - !Set up a time control loop - CALL CONTROL_LOOP_CREATE_START(PROBLEM,CONTROL_LOOP,err,error,*999) - CALL CONTROL_LOOP_TYPE_SET(CONTROL_LOOP,PROBLEM_CONTROL_TIME_LOOP_TYPE,err,error,*999) - CASE(PROBLEM_SETUP_FINISH_ACTION) - !Finish the control loops - CONTROL_LOOP_ROOT=>PROBLEM%CONTROL_LOOP - CALL CONTROL_LOOP_GET(CONTROL_LOOP_ROOT,CONTROL_LOOP_NODE,CONTROL_LOOP,err,error,*999) - CALL CONTROL_LOOP_CREATE_FINISH(CONTROL_LOOP,err,error,*999) - CASE DEFAULT - localError="The action type of "//TRIM(NumberToVString(PROBLEM_SETUP%ACTION_TYPE,"*",err,error))// & - & " for a setup type of "//TRIM(NumberToVString(PROBLEM_SETUP%SETUP_TYPE,"*",err,error))// & - & " is invalid for a transient Stokes fluid." - CALL FlagError(localError,err,error,*999) - END SELECT - CASE(PROBLEM_SETUP_SOLVERS_TYPE) - !Get the control loop - CONTROL_LOOP_ROOT=>PROBLEM%CONTROL_LOOP - CALL CONTROL_LOOP_GET(CONTROL_LOOP_ROOT,CONTROL_LOOP_NODE,CONTROL_LOOP,err,error,*999) - SELECT CASE(PROBLEM_SETUP%ACTION_TYPE) - CASE(PROBLEM_SETUP_START_ACTION) - !Start the solvers creation - CALL SOLVERS_CREATE_START(CONTROL_LOOP,SOLVERS,err,error,*999) - CALL SOLVERS_NUMBER_SET(SOLVERS,1,err,error,*999) - !Set the solver to be a first order dynamic solver - CALL SOLVERS_SOLVER_GET(SOLVERS,1,SOLVER,err,error,*999) - CALL SOLVER_TYPE_SET(SOLVER,SOLVER_DYNAMIC_TYPE,err,error,*999) - CALL SOLVER_DYNAMIC_ORDER_SET(SOLVER,SOLVER_DYNAMIC_FIRST_ORDER,err,error,*999) - !Set solver defaults - CALL SOLVER_DYNAMIC_DEGREE_SET(SOLVER,SOLVER_DYNAMIC_FIRST_DEGREE,err,error,*999) - CALL SOLVER_DYNAMIC_SCHEME_SET(SOLVER,SOLVER_DYNAMIC_CRANK_NICOLSON_SCHEME,err,error,*999) - CALL SOLVER_LIBRARY_TYPE_SET(SOLVER,SOLVER_CMISS_LIBRARY,err,error,*999) - CASE(PROBLEM_SETUP_FINISH_ACTION) - !Get the solvers - CALL CONTROL_LOOP_SOLVERS_GET(CONTROL_LOOP,SOLVERS,err,error,*999) - !Finish the solvers creation - CALL SOLVERS_CREATE_FINISH(SOLVERS,err,error,*999) - CASE DEFAULT - localError="The action type of "//TRIM(NumberToVString(PROBLEM_SETUP%ACTION_TYPE,"*",err,error))// & - & " for a setup type of "//TRIM(NumberToVString(PROBLEM_SETUP%SETUP_TYPE,"*",err,error))// & - & " is invalid for a transient Stokes fluid." - CALL FlagError(localError,err,error,*999) - END SELECT - CASE(PROBLEM_SETUP_SOLVER_EQUATIONS_TYPE) - SELECT CASE(PROBLEM_SETUP%ACTION_TYPE) - CASE(PROBLEM_SETUP_START_ACTION) - !Get the control loop - CONTROL_LOOP_ROOT=>PROBLEM%CONTROL_LOOP - CALL CONTROL_LOOP_GET(CONTROL_LOOP_ROOT,CONTROL_LOOP_NODE,CONTROL_LOOP,err,error,*999) - !Get the solver - CALL CONTROL_LOOP_SOLVERS_GET(CONTROL_LOOP,SOLVERS,err,error,*999) - CALL SOLVERS_SOLVER_GET(SOLVERS,1,SOLVER,err,error,*999) - !Create the solver equations - CALL SOLVER_EQUATIONS_CREATE_START(SOLVER,SOLVER_EQUATIONS,err,error,*999) - CALL SOLVER_EQUATIONS_LINEARITY_TYPE_SET(SOLVER_EQUATIONS,SOLVER_EQUATIONS_LINEAR,err,error,*999) - CALL SOLVER_EQUATIONS_TIME_DEPENDENCE_TYPE_SET(SOLVER_EQUATIONS,SOLVER_EQUATIONS_FIRST_ORDER_DYNAMIC,& - & err,error,*999) - CALL SOLVER_EQUATIONS_SPARSITY_TYPE_SET(SOLVER_EQUATIONS,SOLVER_SPARSE_MATRICES,err,error,*999) - CASE(PROBLEM_SETUP_FINISH_ACTION) - !Get the control loop - CONTROL_LOOP_ROOT=>PROBLEM%CONTROL_LOOP - CALL CONTROL_LOOP_GET(CONTROL_LOOP_ROOT,CONTROL_LOOP_NODE,CONTROL_LOOP,err,error,*999) - !Get the solver equations - CALL CONTROL_LOOP_SOLVERS_GET(CONTROL_LOOP,SOLVERS,err,error,*999) - CALL SOLVERS_SOLVER_GET(SOLVERS,1,SOLVER,err,error,*999) - CALL SOLVER_SOLVER_EQUATIONS_GET(SOLVER,SOLVER_EQUATIONS,err,error,*999) - !Finish the solver equations creation - CALL SOLVER_EQUATIONS_CREATE_FINISH(SOLVER_EQUATIONS,err,error,*999) - CASE DEFAULT - localError="The action type of "//TRIM(NumberToVString(PROBLEM_SETUP%ACTION_TYPE,"*",err,error))// & - & " for a setup type of "//TRIM(NumberToVString(PROBLEM_SETUP%SETUP_TYPE,"*",err,error))// & - & " is invalid for a transient Stokes fluid." - CALL FlagError(localError,err,error,*999) - END SELECT - CASE DEFAULT - localError="The setup type of "//TRIM(NumberToVString(PROBLEM_SETUP%SETUP_TYPE,"*",err,error))// & - & " is invalid for a transient Stokes fluid." - CALL FlagError(localError,err,error,*999) - END SELECT - !Set problem subtype for ALE Stokes problems - CASE(PROBLEM_ALE_STOKES_SUBTYPE) - SELECT CASE(PROBLEM_SETUP%SETUP_TYPE) - CASE(PROBLEM_SETUP_INITIAL_TYPE) - SELECT CASE(PROBLEM_SETUP%ACTION_TYPE) - CASE(PROBLEM_SETUP_START_ACTION) - !Do nothing???? - CASE(PROBLEM_SETUP_FINISH_ACTION) - !Do nothing???? - CASE DEFAULT - localError="The action type of "//TRIM(NumberToVString(PROBLEM_SETUP%ACTION_TYPE,"*",err,error))// & - & " for a setup type of "//TRIM(NumberToVString(PROBLEM_SETUP%SETUP_TYPE,"*",err,error))// & - & " is invalid for a ALE Stokes fluid." - CALL FlagError(localError,err,error,*999) - END SELECT - CASE(PROBLEM_SETUP_CONTROL_TYPE) - SELECT CASE(PROBLEM_SETUP%ACTION_TYPE) - CASE(PROBLEM_SETUP_START_ACTION) - !Set up a time control loop - CALL CONTROL_LOOP_CREATE_START(PROBLEM,CONTROL_LOOP,err,error,*999) - CALL CONTROL_LOOP_TYPE_SET(CONTROL_LOOP,PROBLEM_CONTROL_TIME_LOOP_TYPE,err,error,*999) - CASE(PROBLEM_SETUP_FINISH_ACTION) - !Finish the control loops - CONTROL_LOOP_ROOT=>PROBLEM%CONTROL_LOOP - CALL CONTROL_LOOP_GET(CONTROL_LOOP_ROOT,CONTROL_LOOP_NODE,CONTROL_LOOP,err,error,*999) - CALL CONTROL_LOOP_CREATE_FINISH(CONTROL_LOOP,err,error,*999) - CASE DEFAULT - localError="The action type of "//TRIM(NumberToVString(PROBLEM_SETUP%ACTION_TYPE,"*",err,error))// & - & " for a setup type of "//TRIM(NumberToVString(PROBLEM_SETUP%SETUP_TYPE,"*",err,error))// & - & " is invalid for a ALE Stokes fluid." - CALL FlagError(localError,err,error,*999) - END SELECT - CASE(PROBLEM_SETUP_SOLVERS_TYPE) - !Get the control loop - CONTROL_LOOP_ROOT=>PROBLEM%CONTROL_LOOP - CALL CONTROL_LOOP_GET(CONTROL_LOOP_ROOT,CONTROL_LOOP_NODE,CONTROL_LOOP,err,error,*999) - SELECT CASE(PROBLEM_SETUP%ACTION_TYPE) - CASE(PROBLEM_SETUP_START_ACTION) - !Start the solvers creation - CALL SOLVERS_CREATE_START(CONTROL_LOOP,SOLVERS,err,error,*999) - CALL SOLVERS_NUMBER_SET(SOLVERS,2,err,error,*999) - !Set the first solver to be a linear solver for the Laplace mesh movement problem - CALL SOLVERS_SOLVER_GET(SOLVERS,1,MESH_SOLVER,err,error,*999) - CALL SOLVER_TYPE_SET(MESH_SOLVER,SOLVER_LINEAR_TYPE,err,error,*999) - !Set solver defaults - CALL SOLVER_LIBRARY_TYPE_SET(MESH_SOLVER,SOLVER_PETSC_LIBRARY,err,error,*999) - !Set the solver to be a first order dynamic solver - CALL SOLVERS_SOLVER_GET(SOLVERS,2,SOLVER,err,error,*999) - CALL SOLVER_TYPE_SET(SOLVER,SOLVER_DYNAMIC_TYPE,err,error,*999) - CALL SOLVER_DYNAMIC_ORDER_SET(SOLVER,SOLVER_DYNAMIC_FIRST_ORDER,err,error,*999) - !Set solver defaults - CALL SOLVER_DYNAMIC_DEGREE_SET(SOLVER,SOLVER_DYNAMIC_FIRST_DEGREE,err,error,*999) - CALL SOLVER_DYNAMIC_SCHEME_SET(SOLVER,SOLVER_DYNAMIC_CRANK_NICOLSON_SCHEME,err,error,*999) - CALL SOLVER_LIBRARY_TYPE_SET(SOLVER,SOLVER_CMISS_LIBRARY,err,error,*999) - CASE(PROBLEM_SETUP_FINISH_ACTION) - !Get the solvers - CALL CONTROL_LOOP_SOLVERS_GET(CONTROL_LOOP,SOLVERS,err,error,*999) - !Finish the solvers creation - CALL SOLVERS_CREATE_FINISH(SOLVERS,err,error,*999) - CASE DEFAULT - localError="The action type of "//TRIM(NumberToVString(PROBLEM_SETUP%ACTION_TYPE,"*",err,error))// & - & " for a setup type of "//TRIM(NumberToVString(PROBLEM_SETUP%SETUP_TYPE,"*",err,error))// & - & " is invalid for a ALE Stokes fluid." - CALL FlagError(localError,err,error,*999) - END SELECT - CASE(PROBLEM_SETUP_SOLVER_EQUATIONS_TYPE) - SELECT CASE(PROBLEM_SETUP%ACTION_TYPE) - CASE(PROBLEM_SETUP_START_ACTION) - !Get the control loop - CONTROL_LOOP_ROOT=>PROBLEM%CONTROL_LOOP - CALL CONTROL_LOOP_GET(CONTROL_LOOP_ROOT,CONTROL_LOOP_NODE,CONTROL_LOOP,err,error,*999) - !Get the solver - CALL CONTROL_LOOP_SOLVERS_GET(CONTROL_LOOP,SOLVERS,err,error,*999) - CALL SOLVERS_SOLVER_GET(SOLVERS,1,MESH_SOLVER,err,error,*999) - !Create the solver equations - CALL SOLVER_EQUATIONS_CREATE_START(MESH_SOLVER,MESH_SOLVER_EQUATIONS,err,error,*999) - CALL SOLVER_EQUATIONS_LINEARITY_TYPE_SET(MESH_SOLVER_EQUATIONS,SOLVER_EQUATIONS_LINEAR,err,error,*999) - CALL SOLVER_EQUATIONS_TIME_DEPENDENCE_TYPE_SET(MESH_SOLVER_EQUATIONS,SOLVER_EQUATIONS_STATIC,err,error,*999) - CALL SOLVER_EQUATIONS_SPARSITY_TYPE_SET(MESH_SOLVER_EQUATIONS,SOLVER_SPARSE_MATRICES,err,error,*999) - CALL SOLVERS_SOLVER_GET(SOLVERS,2,SOLVER,err,error,*999) - !Create the solver equations - CALL SOLVER_EQUATIONS_CREATE_START(SOLVER,SOLVER_EQUATIONS,err,error,*999) - CALL SOLVER_EQUATIONS_LINEARITY_TYPE_SET(SOLVER_EQUATIONS,SOLVER_EQUATIONS_LINEAR,err,error,*999) - CALL SOLVER_EQUATIONS_TIME_DEPENDENCE_TYPE_SET(SOLVER_EQUATIONS,SOLVER_EQUATIONS_FIRST_ORDER_DYNAMIC,& - & err,error,*999) - CALL SOLVER_EQUATIONS_SPARSITY_TYPE_SET(SOLVER_EQUATIONS,SOLVER_SPARSE_MATRICES,err,error,*999) - CASE(PROBLEM_SETUP_FINISH_ACTION) - !Get the control loop - CONTROL_LOOP_ROOT=>PROBLEM%CONTROL_LOOP - CALL CONTROL_LOOP_GET(CONTROL_LOOP_ROOT,CONTROL_LOOP_NODE,CONTROL_LOOP,err,error,*999) - !Get the solver equations - CALL CONTROL_LOOP_SOLVERS_GET(CONTROL_LOOP,SOLVERS,err,error,*999) - CALL SOLVERS_SOLVER_GET(SOLVERS,1,MESH_SOLVER,err,error,*999) - CALL SOLVER_SOLVER_EQUATIONS_GET(MESH_SOLVER,MESH_SOLVER_EQUATIONS,err,error,*999) - !Finish the solver equations creation - CALL SOLVER_EQUATIONS_CREATE_FINISH(MESH_SOLVER_EQUATIONS,err,error,*999) - CALL SOLVERS_SOLVER_GET(SOLVERS,2,SOLVER,err,error,*999) - CALL SOLVER_SOLVER_EQUATIONS_GET(SOLVER,SOLVER_EQUATIONS,err,error,*999) - !Finish the solver equations creation - CALL SOLVER_EQUATIONS_CREATE_FINISH(SOLVER_EQUATIONS,err,error,*999) - CASE DEFAULT - localError="The action type of "//TRIM(NumberToVString(PROBLEM_SETUP%ACTION_TYPE,"*",err,error))// & - & " for a setup type of "//TRIM(NumberToVString(PROBLEM_SETUP%SETUP_TYPE,"*",err,error))// & - & " is invalid for a ALE Stokes fluid." - CALL FlagError(localError,err,error,*999) - END SELECT - CASE DEFAULT - localError="The setup type of "//TRIM(NumberToVString(PROBLEM_SETUP%SETUP_TYPE,"*",err,error))// & - & " is invalid for a ALE Stokes fluid." - CALL FlagError(localError,err,error,*999) - END SELECT - CASE DEFAULT - localError="Problem subtype "//TRIM(NumberToVString(PROBLEM%SPECIFICATION(3),"*",err,error))// & - & " is not valid for a Stokes fluid type of a fluid mechanics problem class." - CALL FlagError(localError,err,error,*999) - END SELECT - ELSE - CALL FlagError("Problem is not associated.",err,error,*999) - ENDIF - - EXITS("STOKES_PROBLEM_SETUP") - RETURN -999 ERRORSEXITS("STOKES_PROBLEM_SETUP",err,error) - RETURN 1 - END SUBROUTINE STOKES_PROBLEM_SETUP - -! -!================================================================================================================================ -! - - !>Calculates the element stiffness matrices and RHS for a Stokes fluid finite element equations set. - SUBROUTINE STOKES_FINITE_ELEMENT_CALCULATE(EQUATIONS_SET,ELEMENT_NUMBER,err,error,*) - - !Argument variables - TYPE(EQUATIONS_SET_TYPE), POINTER :: EQUATIONS_SET !EQUATIONS_SET%EQUATIONS - IF(ASSOCIATED(EQUATIONS)) THEN - NULLIFY(vectorEquations) - CALL Equations_VectorEquationsGet(equations,vectorEquations,err,error,*999) - SELECT CASE(EQUATIONS_SET%SPECIFICATION(3)) - CASE(EQUATIONS_SET_STATIC_STOKES_SUBTYPE,EQUATIONS_SET_LAPLACE_STOKES_SUBTYPE, & - & EQUATIONS_SET_TRANSIENT_STOKES_SUBTYPE,PROBLEM_ALE_STOKES_SUBTYPE,PROBLEM_PGM_STOKES_SUBTYPE) - !Set Pointers - dependentField=>equations%interpolation%dependentField - independentField=>equations%interpolation%independentField - geometricField=>equations%interpolation%geometricField - materialsField=>equations%interpolation%materialsField - vectorMatrices=>vectorEquations%vectorMatrices - GEOMETRIC_BASIS=>geometricField%DECOMPOSITION%DOMAIN(geometricField%DECOMPOSITION%MESH_COMPONENT_NUMBER)%ptr% & - & TOPOLOGY%ELEMENTS%ELEMENTS(ELEMENT_NUMBER)%BASIS - DEPENDENT_BASIS=>dependentField%DECOMPOSITION%DOMAIN(dependentField%DECOMPOSITION%MESH_COMPONENT_NUMBER)%ptr% & - & TOPOLOGY%ELEMENTS%ELEMENTS(ELEMENT_NUMBER)%BASIS - QUADRATURE_SCHEME=>DEPENDENT_BASIS%QUADRATURE%QUADRATURE_SCHEME_MAP(BASIS_DEFAULT_QUADRATURE_SCHEME)%ptr - rhsVector=>vectorMatrices%rhsVector - vectorMapping=>vectorEquations%vectorMapping - SELECT CASE(EQUATIONS_SET%SPECIFICATION(3)) - CASE(EQUATIONS_SET_STATIC_STOKES_SUBTYPE,EQUATIONS_SET_LAPLACE_STOKES_SUBTYPE) - linearMatrices=>vectorMatrices%linearMatrices - stiffnessMatrix=>linearMatrices%matrices(1)%ptr - linearMapping=>vectorMapping%linearMapping - FIELD_VARIABLE=>linearMapping%equationsMatrixToVarMaps(1)%variable - stiffnessMatrix%elementMatrix%matrix=0.0_DP - IF(ASSOCIATED(stiffnessMatrix)) updateStiffnessMatrix=stiffnessMatrix%updateMatrix - IF(ASSOCIATED(rhsVector)) updateRHSVector=rhsVector%updateVector - CASE(EQUATIONS_SET_TRANSIENT_STOKES_SUBTYPE) - dynamicMatrices=>vectorMatrices%dynamicMatrices - stiffnessMatrix=>dynamicMatrices%matrices(1)%ptr - dampingMatrix=>dynamicMatrices%matrices(2)%ptr - dynamicMapping=>vectorMapping%dynamicMapping - FIELD_VARIABLE=>dynamicMapping%equationsMatrixToVarMaps(1)%variable - FIELD_VAR_TYPE=FIELD_VARIABLE%VARIABLE_TYPE - stiffnessMatrix%elementMatrix%matrix=0.0_DP - dampingMatrix%elementMatrix%matrix=0.0_DP - IF(ASSOCIATED(stiffnessMatrix)) updateStiffnessMatrix=stiffnessMatrix%updateMatrix - IF(ASSOCIATED(dampingMatrix)) updateDampingMatrix=dampingMatrix%updateMatrix - IF(ASSOCIATED(rhsVector)) updateRHSVector=rhsVector%updateVector - CASE(EQUATIONS_SET_ALE_STOKES_SUBTYPE,EQUATIONS_SET_PGM_STOKES_SUBTYPE) - independentField=>equations%interpolation%independentField - INDEPENDENT_BASIS=>independentField%DECOMPOSITION%DOMAIN(independentField%DECOMPOSITION%MESH_COMPONENT_NUMBER)% & - & PTR%TOPOLOGY%ELEMENTS%ELEMENTS(ELEMENT_NUMBER)%BASIS - dynamicMatrices=>vectorMatrices%dynamicMatrices - stiffnessMatrix=>dynamicMatrices%matrices(1)%ptr - dampingMatrix=>dynamicMatrices%matrices(2)%ptr - dynamicMapping=>vectorMapping%dynamicMapping - FIELD_VARIABLE=>dynamicMapping%equationsMatrixToVarMaps(1)%variable - FIELD_VAR_TYPE=FIELD_VARIABLE%VARIABLE_TYPE - stiffnessMatrix%elementMatrix%matrix=0.0_DP - dampingMatrix%elementMatrix%matrix=0.0_DP - IF(ASSOCIATED(stiffnessMatrix)) updateStiffnessMatrix=stiffnessMatrix%updateMatrix - IF(ASSOCIATED(dampingMatrix)) updateDampingMatrix=dampingMatrix%updateMatrix - IF(ASSOCIATED(rhsVector)) updateRHSVector=rhsVector%updateVector - CALL FIELD_INTERPOLATION_PARAMETERS_ELEMENT_GET(FIELD_MESH_VELOCITY_SET_TYPE,ELEMENT_NUMBER, & - & equations%interpolation%independentInterpParameters(FIELD_U_VARIABLE_TYPE)%ptr,err,error,*999) - CASE DEFAULT - localError="Equations set subtype "//TRIM(NumberToVString(EQUATIONS_SET%SPECIFICATION(3),"*",err,error))// & - & " is not valid for a Stokes fluid type of a fluid mechanics equations set class." - CALL FlagError(localError,err,error,*999) - END SELECT - CALL FIELD_INTERPOLATION_PARAMETERS_ELEMENT_GET(FIELD_VALUES_SET_TYPE,ELEMENT_NUMBER,equations%interpolation% & - & geometricInterpParameters(FIELD_U_VARIABLE_TYPE)%ptr,err,error,*999) - CALL FIELD_INTERPOLATION_PARAMETERS_ELEMENT_GET(FIELD_VALUES_SET_TYPE,ELEMENT_NUMBER,equations%interpolation% & - & materialsInterpParameters(FIELD_U_VARIABLE_TYPE)%ptr,err,error,*999) - - !Start looping over Gauss points - DO ng=1,QUADRATURE_SCHEME%NUMBER_OF_GAUSS - CALL FIELD_INTERPOLATE_GAUSS(FIRST_PART_DERIV,BASIS_DEFAULT_QUADRATURE_SCHEME,ng,equations%interpolation% & - & geometricInterpPoint(FIELD_U_VARIABLE_TYPE)%ptr,err,error,*999) - CALL FIELD_INTERPOLATED_POINT_METRICS_CALCULATE(GEOMETRIC_BASIS%NUMBER_OF_XI,equations%interpolation% & - & geometricInterpPointMetrics(FIELD_U_VARIABLE_TYPE)%ptr,err,error,*999) - CALL FIELD_INTERPOLATE_GAUSS(NO_PART_DERIV,BASIS_DEFAULT_QUADRATURE_SCHEME,ng,equations%interpolation% & - & materialsInterpPoint(FIELD_U_VARIABLE_TYPE)%ptr,err,error,*999) - IF(EQUATIONS_SET%SPECIFICATION(3)==EQUATIONS_SET_ALE_STOKES_SUBTYPE.OR. & - & EQUATIONS_SET%SPECIFICATION(3)==EQUATIONS_SET_PGM_STOKES_SUBTYPE) THEN - CALL FIELD_INTERPOLATE_GAUSS(FIRST_PART_DERIV,BASIS_DEFAULT_QUADRATURE_SCHEME,ng,equations%interpolation% & - & independentInterpPoint(FIELD_U_VARIABLE_TYPE)%ptr,err,error,*999) - W_VALUE(1)=equations%interpolation%independentInterpPoint(FIELD_U_VARIABLE_TYPE)%ptr%VALUES(1,NO_PART_DERIV) - W_VALUE(2)=equations%interpolation%independentInterpPoint(FIELD_U_VARIABLE_TYPE)%ptr%VALUES(2,NO_PART_DERIV) - IF(FIELD_VARIABLE%NUMBER_OF_COMPONENTS==4) THEN - W_VALUE(3)=equations%interpolation%independentInterpPoint(FIELD_U_VARIABLE_TYPE)%ptr%VALUES(3,NO_PART_DERIV) - END IF - ELSE - W_VALUE=0.0_DP - END IF - !Define MU_PARAM, viscosity=1 - MU_PARAM=equations%interpolation%materialsInterpPoint(FIELD_U_VARIABLE_TYPE)%ptr%VALUES(1,NO_PART_DERIV) - !Define RHO_PARAM, density=2 - RHO_PARAM=equations%interpolation%materialsInterpPoint(FIELD_U_VARIABLE_TYPE)%ptr%VALUES(2,NO_PART_DERIV) - !Calculate partial matrices -!\todo: Check time spent here - IF(EQUATIONS_SET%SPECIFICATION(3)==EQUATIONS_SET_STATIC_STOKES_SUBTYPE.OR. & - & EQUATIONS_SET%SPECIFICATION(3)==EQUATIONS_SET_LAPLACE_STOKES_SUBTYPE.OR. & - & EQUATIONS_SET%SPECIFICATION(3)==EQUATIONS_SET_ALE_STOKES_SUBTYPE.OR. & - & EQUATIONS_SET%SPECIFICATION(3)==EQUATIONS_SET_PGM_STOKES_SUBTYPE.OR. & - & EQUATIONS_SET%SPECIFICATION(3)==EQUATIONS_SET_TRANSIENT_STOKES_SUBTYPE) THEN - !Loop over field components - mhs=0 - DO mh=1,(FIELD_VARIABLE%NUMBER_OF_COMPONENTS-1) - MESH_COMPONENT1=FIELD_VARIABLE%COMPONENTS(mh)%MESH_COMPONENT_NUMBER - DEPENDENT_BASIS1=>dependentField%DECOMPOSITION%DOMAIN(MESH_COMPONENT1)%ptr% & - & TOPOLOGY%ELEMENTS%ELEMENTS(ELEMENT_NUMBER)%BASIS - QUADRATURE_SCHEME1=>DEPENDENT_BASIS1%QUADRATURE%QUADRATURE_SCHEME_MAP(BASIS_DEFAULT_QUADRATURE_SCHEME)%ptr - JGW=equations%interpolation%geometricInterpPointMetrics(FIELD_U_VARIABLE_TYPE)%ptr%JACOBIAN* & - & QUADRATURE_SCHEME1%GAUSS_WEIGHTS(ng) - DO ms=1,DEPENDENT_BASIS1%NUMBER_OF_ELEMENT_PARAMETERS - mhs=mhs+1 - nhs=0 - IF(updateStiffnessMatrix.OR.updateDampingMatrix) THEN - !Loop over element columns - DO nh=1,(FIELD_VARIABLE%NUMBER_OF_COMPONENTS) - - MESH_COMPONENT2=FIELD_VARIABLE%COMPONENTS(nh)%MESH_COMPONENT_NUMBER - DEPENDENT_BASIS2=>dependentField%DECOMPOSITION%DOMAIN(MESH_COMPONENT2)%ptr% & - & TOPOLOGY%ELEMENTS%ELEMENTS(ELEMENT_NUMBER)%BASIS - QUADRATURE_SCHEME2=>DEPENDENT_BASIS2%QUADRATURE%QUADRATURE_SCHEME_MAP & - & (BASIS_DEFAULT_QUADRATURE_SCHEME)%ptr - ! JGW=equations%interpolation%geometricInterpPointMetrics%JACOBIAN*QUADRATURE_SCHEME2%& - ! &GAUSS_WEIGHTS(ng) - DO ns=1,DEPENDENT_BASIS2%NUMBER_OF_ELEMENT_PARAMETERS - nhs=nhs+1 - !Calculate some variables used later on - DO ni=1,DEPENDENT_BASIS2%NUMBER_OF_XI - DO mi=1,DEPENDENT_BASIS1%NUMBER_OF_XI - DXI_DX(mi,ni)=equations%interpolation%geometricInterpPointMetrics(FIELD_U_VARIABLE_TYPE)%ptr% & - & DXI_DX(mi,ni) - END DO - DPHIMS_DXI(ni)=QUADRATURE_SCHEME1%GAUSS_BASIS_FNS(ms,PARTIAL_DERIVATIVE_FIRST_DERIVATIVE_MAP(ni),ng) - DPHINS_DXI(ni)=QUADRATURE_SCHEME2%GAUSS_BASIS_FNS(ns,PARTIAL_DERIVATIVE_FIRST_DERIVATIVE_MAP(ni),ng) - END DO !ni - PHIMS=QUADRATURE_SCHEME1%GAUSS_BASIS_FNS(ms,NO_PART_DERIV,ng) - PHINS=QUADRATURE_SCHEME2%GAUSS_BASIS_FNS(ns,NO_PART_DERIV,ng) - ! DO mi=1,DEPENDENT_BASIS1%NUMBER_OF_XI - ! DO ni=1,DEPENDENT_BASIS2%NUMBER_OF_XI - ! SUM=SUM-MU_PARAM*DPHIMSS_DXI(mi)*DPHINSS_DXI(ni)*equations%interpolation%geometricInterpPointMetrics%GU(mi,ni) - ! ENDDO !ni - ! ENDDO !mi - IF(updateStiffnessMatrix) THEN - - !LAPLACE TYPE - IF(nh==mh) THEN - SUM=0.0_DP - !Calculate SUM - DO xv=1,DEPENDENT_BASIS1%NUMBER_OF_XI - DO mi=1,DEPENDENT_BASIS1%NUMBER_OF_XI - DO ni=1,DEPENDENT_BASIS2%NUMBER_OF_XI - SUM=SUM+MU_PARAM*DPHINS_DXI(ni)*DXI_DX(ni,xv)*DPHIMS_DXI(mi)*DXI_DX(mi,xv) - ENDDO !ni - ENDDO !mi - ENDDO !x - !Calculate MATRIX - AL_MATRIX(mhs,nhs)=AL_MATRIX(mhs,nhs)+SUM*JGW - END IF - - END IF - !Calculate standard matrix (gradient transpose type) - IF(updateStiffnessMatrix) THEN - - IF(EQUATIONS_SET%SPECIFICATION(3)/=EQUATIONS_SET_LAPLACE_STOKES_SUBTYPE) THEN - IF(nhdependentField%DECOMPOSITION%DOMAIN(MESH_COMPONENT1)%ptr% & - & TOPOLOGY%ELEMENTS%ELEMENTS(ELEMENT_NUMBER)%BASIS - QUADRATURE_SCHEME1=>DEPENDENT_BASIS1%QUADRATURE%QUADRATURE_SCHEME_MAP(BASIS_DEFAULT_QUADRATURE_SCHEME)%ptr - JGW=equations%interpolation%geometricInterpPointMetrics(FIELD_U_VARIABLE_TYPE)%ptr%JACOBIAN* & - & QUADRATURE_SCHEME1%GAUSS_WEIGHTS(ng) - DO ms=1,DEPENDENT_BASIS1%NUMBER_OF_ELEMENT_PARAMETERS - mhs=mhs+1 - PHIMS=QUADRATURE_SCHEME1%GAUSS_BASIS_FNS(ms,NO_PART_DERIV,ng) - !note mh value derivative - SUM=0.0_DP - X(1) = equations%interpolation%geometricInterpPoint(FIELD_U_VARIABLE_TYPE)%ptr%VALUES(1,1) - X(2) = equations%interpolation%geometricInterpPoint(FIELD_U_VARIABLE_TYPE)%ptr%VALUES(2,1) - IF(DEPENDENT_BASIS1%NUMBER_OF_XI==3) THEN - X(3) = equations%interpolation%geometricInterpPoint(FIELD_U_VARIABLE_TYPE)%ptr%VALUES(3,1) - END IF - IF(EQUATIONS_SET%ANALYTIC%ANALYTIC_FUNCTION_TYPE==EQUATIONS_SET_STOKES_EQUATION_TWO_DIM_1) THEN - IF(mh==1) THEN - !Calculate SUM - SUM=0.0_DP - ELSE IF(mh==2) THEN - !Calculate SUM - SUM=PHIMS*(-2.0_DP*MU_PARAM/10.0_DP**2) - ENDIF - ELSE IF(EQUATIONS_SET%ANALYTIC%ANALYTIC_FUNCTION_TYPE==EQUATIONS_SET_STOKES_EQUATION_TWO_DIM_2) THEN - IF(mh==1) THEN - !Calculate SUM - SUM=0.0_DP - ELSE IF(mh==2) THEN - !Calculate SUM - SUM=PHIMS*(-4.0_DP*MU_PARAM/100.0_DP*EXP((X(1)-X(2))/10.0_DP)) - ENDIF - ELSE IF(EQUATIONS_SET%ANALYTIC%ANALYTIC_FUNCTION_TYPE==EQUATIONS_SET_STOKES_EQUATION_TWO_DIM_3) THEN - IF(mh==1) THEN - !Calculate SUM - SUM=0.0_DP - ELSE IF(mh==2) THEN - !Calculate SUM - SUM=PHIMS*(16.0_DP*MU_PARAM*PI*PI/100.0_DP*COS(2.0_DP*PI*X(2)/10.0_DP)*COS(2.0_DP*PI*X(1)/10.0_DP)) - ENDIF - ELSE IF(EQUATIONS_SET%ANALYTIC%ANALYTIC_FUNCTION_TYPE==EQUATIONS_SET_STOKES_EQUATION_TWO_DIM_4) THEN -! do nothing! - ELSE IF(EQUATIONS_SET%ANALYTIC%ANALYTIC_FUNCTION_TYPE==EQUATIONS_SET_STOKES_EQUATION_TWO_DIM_5) THEN -! do nothing! - ELSE IF(EQUATIONS_SET%ANALYTIC%ANALYTIC_FUNCTION_TYPE==EQUATIONS_SET_STOKES_EQUATION_THREE_DIM_4) THEN -! do nothing! - ELSE IF(EQUATIONS_SET%ANALYTIC%ANALYTIC_FUNCTION_TYPE==EQUATIONS_SET_STOKES_EQUATION_THREE_DIM_5) THEN -! do nothing! - ELSE IF(EQUATIONS_SET%ANALYTIC%ANALYTIC_FUNCTION_TYPE==EQUATIONS_SET_STOKES_EQUATION_THREE_DIM_1) THEN - IF(mh==1) THEN - !Calculate SUM - SUM=0.0_DP - ELSE IF(mh==2) THEN - !Calculate SUM - SUM=PHIMS*(-4.0_DP*MU_PARAM/100.0_DP) - ELSE IF(mh==3) THEN - !Calculate SUM - SUM=PHIMS*(-4.0_DP*MU_PARAM/100.0_DP) - ENDIF - ELSE IF(EQUATIONS_SET%ANALYTIC%ANALYTIC_FUNCTION_TYPE==EQUATIONS_SET_STOKES_EQUATION_THREE_DIM_2) THEN - IF(mh==1) THEN - !Calculate SUM - SUM=0.0_DP - ELSE IF(mh==2) THEN - !Calculate SUM - SUM=PHIMS*(-2.0_DP*MU_PARAM/100.0_DP*(2.0_DP*EXP((X(1)-X(2))/10.0_DP)+EXP((X(2)-X(3))/10.0_DP))) - ELSE IF(mh==3) THEN - !Calculate SUM - SUM=PHIMS*(-2.0_DP*MU_PARAM/100.0_DP*(2.0_DP*EXP((X(3)-X(1))/10.0_DP)+EXP((X(2)-X(3))/10.0_DP))) - ENDIF - ELSE IF(EQUATIONS_SET%ANALYTIC%ANALYTIC_FUNCTION_TYPE==EQUATIONS_SET_STOKES_EQUATION_THREE_DIM_3) THEN - IF(mh==1) THEN - !Calculate SUM - SUM=0.0_DP - ELSE IF(mh==2) THEN - !Calculate SUM - SUM=PHIMS*(36*MU_PARAM*PI**2/100.0_DP*COS(2.0_DP*PI*X(2)/10.0_DP)*SIN(2.0_DP*PI*X(3)/10.0_DP)* & - & COS(2.0_DP*PI*X(1)/10.0_DP)) - ELSE IF(mh==3) THEN - !Calculate SUM - SUM=0.0_DP - ENDIF - ENDIF - !Calculate RH VECTOR - RH_VECTOR(mhs)=RH_VECTOR(mhs)+SUM*JGW - ENDDO !ms - ENDDO !mh - ELSE - RH_VECTOR(mhs)=0.0_DP - ENDIF - ENDIF - END IF - ENDDO !ng - !Assemble matrices calculated above - mhs_min=mhs - mhs_max=nhs - nhs_min=mhs - nhs_max=nhs - IF(EQUATIONS_SET%SPECIFICATION(3)==EQUATIONS_SET_STATIC_STOKES_SUBTYPE.OR. & - & EQUATIONS_SET%SPECIFICATION(3)==EQUATIONS_SET_LAPLACE_STOKES_SUBTYPE.OR. & - & EQUATIONS_SET%SPECIFICATION(3)==EQUATIONS_SET_ALE_STOKES_SUBTYPE.OR. & - & EQUATIONS_SET%SPECIFICATION(3)==EQUATIONS_SET_PGM_STOKES_SUBTYPE.OR. & - & EQUATIONS_SET%SPECIFICATION(3)==EQUATIONS_SET_TRANSIENT_STOKES_SUBTYPE) THEN - IF(updateStiffnessMatrix) THEN - stiffnessMatrix%elementMatrix%matrix(1:mhs_min,1:nhs_min)=AL_MATRIX(1:mhs_min,1:nhs_min)+AG_MATRIX(1:mhs_min, & - & 1:nhs_min)+ALE_MATRIX(1:mhs_min,1:nhs_min) - stiffnessMatrix%elementMatrix%matrix(1:mhs_min,nhs_min+1:nhs_max)=BT_MATRIX(1:mhs_min,nhs_min+1:nhs_max) - DO mhs=mhs_min+1,mhs_max - DO nhs=1,nhs_min - !Transpose pressure type entries for mass equation - stiffnessMatrix%elementMatrix%matrix(mhs,nhs)=stiffnessMatrix%elementMatrix%matrix(nhs,mhs) - END DO - END DO - END IF - END IF - IF(EQUATIONS_SET%SPECIFICATION(3)==EQUATIONS_SET_TRANSIENT_STOKES_SUBTYPE.OR. & - & EQUATIONS_SET%SPECIFICATION(3)==EQUATIONS_SET_ALE_STOKES_SUBTYPE.OR. & - & EQUATIONS_SET%SPECIFICATION(3)==EQUATIONS_SET_PGM_STOKES_SUBTYPE) THEN - IF(updateDampingMatrix) THEN - dampingMatrix%elementMatrix%matrix(1:mhs_min,1:nhs_min)=MT_MATRIX(1:mhs_min,1:nhs_min) - END IF - END IF - !Assemble RHS vector - IF(rhsVector%firstAssembly) THEN - IF(updateRHSVector) THEN - rhsVector%elementVector%vector(1:mhs_max)=RH_VECTOR(1:mhs_max) - ENDIF - ENDIF - !Scale factor adjustment - IF(dependentField%SCALINGS%SCALING_TYPE/=FIELD_NO_SCALING) THEN - CALL Field_InterpolationParametersScaleFactorsElementGet(ELEMENT_NUMBER,equations%interpolation% & - & dependentInterpParameters(FIELD_VAR_TYPE)%ptr,err,error,*999) - mhs=0 - DO mh=1,FIELD_VARIABLE%NUMBER_OF_COMPONENTS - !Loop over element rows - MESH_COMPONENT1=FIELD_VARIABLE%COMPONENTS(mh)%MESH_COMPONENT_NUMBER - DEPENDENT_BASIS1=>dependentField%DECOMPOSITION%DOMAIN(MESH_COMPONENT1)%ptr% & - & TOPOLOGY%ELEMENTS%ELEMENTS(ELEMENT_NUMBER)%BASIS - DO ms=1,DEPENDENT_BASIS1%NUMBER_OF_ELEMENT_PARAMETERS - mhs=mhs+1 - nhs=0 - IF(updateStiffnessMatrix.OR.updateDampingMatrix) THEN - !Loop over element columns - DO nh=1,FIELD_VARIABLE%NUMBER_OF_COMPONENTS - MESH_COMPONENT2=FIELD_VARIABLE%COMPONENTS(nh)%MESH_COMPONENT_NUMBER - DEPENDENT_BASIS2=>dependentField%DECOMPOSITION%DOMAIN(MESH_COMPONENT2)%ptr% & - & TOPOLOGY%ELEMENTS%ELEMENTS(ELEMENT_NUMBER)%BASIS - DO ns=1,DEPENDENT_BASIS2%NUMBER_OF_ELEMENT_PARAMETERS - nhs=nhs+1 - IF(updateStiffnessMatrix)THEN - stiffnessMatrix%elementMatrix%matrix(mhs,nhs)=stiffnessMatrix%elementMatrix%matrix(mhs,nhs)* & - & equations%interpolation%dependentInterpParameters(FIELD_VAR_TYPE)%ptr%SCALE_FACTORS(ms,mh)* & - & equations%interpolation%dependentInterpParameters(FIELD_VAR_TYPE)%ptr%SCALE_FACTORS(ns,nh) - END IF - IF(updateDampingMatrix)THEN - dampingMatrix%elementMatrix%matrix(mhs,nhs)=dampingMatrix%elementMatrix%matrix(mhs,nhs)* & - & equations%interpolation%dependentInterpParameters(FIELD_VAR_TYPE)%ptr%SCALE_FACTORS(ms,mh)* & - & equations%interpolation%dependentInterpParameters(FIELD_VAR_TYPE)%ptr%SCALE_FACTORS(ns,nh) - END IF - ENDDO !ns - ENDDO !nh - ENDIF - IF(updateRHSVector) rhsVector%elementVector%vector(mhs)=rhsVector%elementVector%vector(mhs)* & - & equations%interpolation%dependentInterpParameters(FIELD_VAR_TYPE)%ptr%SCALE_FACTORS(ms,mh) - ENDDO !ms - ENDDO !mh - ENDIF - CASE DEFAULT - localError="Equations set subtype "//TRIM(NumberToVString(EQUATIONS_SET%SPECIFICATION(3),"*",err,error))// & - & " is not valid for a Stokes fluid type of a fluid mechanics equations set class." - CALL FlagError(localError,err,error,*999) - END SELECT - ELSE - CALL FlagError("Equations set equations is not associated.",err,error,*999) - ENDIF - ELSE - CALL FlagError("Equations set is not associated.",err,error,*999) - ENDIF - - EXITS("STOKES_FINITE_ELEMENT_CALCULATE") - RETURN -999 ERRORSEXITS("STOKES_FINITE_ELEMENT_CALCULATE",err,error) - RETURN 1 - END SUBROUTINE STOKES_FINITE_ELEMENT_CALCULATE - - ! - !================================================================================================================================ - ! - - !>Sets up the Stokes problem post solve. - SUBROUTINE STOKES_POST_SOLVE(CONTROL_LOOP,SOLVER,err,error,*) - - !Argument variables - TYPE(CONTROL_LOOP_TYPE), POINTER :: CONTROL_LOOP !Sets up the Stokes problem pre solve. - SUBROUTINE STOKES_PRE_SOLVE(CONTROL_LOOP,SOLVER,err,error,*) - - !Argument variables - TYPE(CONTROL_LOOP_TYPE), POINTER :: CONTROL_LOOP !Update boundary conditions for Stokes flow pre solve - SUBROUTINE STOKES_PRE_SOLVE_UPDATE_BOUNDARY_CONDITIONS(CONTROL_LOOP,SOLVER,err,error,*) - - !Argument variables - TYPE(CONTROL_LOOP_TYPE), POINTER :: CONTROL_LOOP !SOLVER_MAPPING_ALE_STOKES%EQUATIONS_SET_TO_SOLVER_MAP(1)%EQUATIONS - IF(ASSOCIATED(EQUATIONS)) THEN - NULLIFY(vectorEquations) - CALL Equations_VectorEquationsGet(equations,vectorEquations,err,error,*999) - vectorMapping=>vectorEquations%vectorMapping - IF(ASSOCIATED(vectorMapping)) THEN - DO variable_idx=1,EQUATIONS_SET_ALE_STOKES%DEPENDENT%DEPENDENT_FIELD%NUMBER_OF_VARIABLES - variable_type=EQUATIONS_SET_ALE_STOKES%DEPENDENT%DEPENDENT_FIELD%VARIABLES(variable_idx)%variable_TYPE - FIELD_VARIABLE=>EQUATIONS_SET_ALE_STOKES%GEOMETRY%GEOMETRIC_FIELD%VARIABLE_TYPE_MAP(variable_type)%ptr - IF(ASSOCIATED(FIELD_VARIABLE)) THEN - DO component_idx=1,FIELD_VARIABLE%NUMBER_OF_COMPONENTS - DOMAIN=>FIELD_VARIABLE%COMPONENTS(component_idx)%DOMAIN - IF(ASSOCIATED(DOMAIN)) THEN - IF(ASSOCIATED(DOMAIN%TOPOLOGY)) THEN - DOMAIN_NODES=>DOMAIN%TOPOLOGY%NODES - IF(ASSOCIATED(DOMAIN_NODES)) THEN - !Loop over the local nodes excluding the ghosts. - DO node_idx=1,DOMAIN_NODES%NUMBER_OF_NODES - DO deriv_idx=1,DOMAIN_NODES%NODES(node_idx)%NUMBER_OF_DERIVATIVES - !Default to version 1 of each node derivative - local_ny=FIELD_VARIABLE%COMPONENTS(component_idx)%PARAM_TO_DOF_MAP% & - & NODE_PARAM2DOF_MAP%NODES(node_idx)%DERIVATIVES(deriv_idx)%VERSIONS(1) - CALL FIELD_PARAMETER_SET_ADD_LOCAL_DOF(EQUATIONS_SET_ALE_STOKES%GEOMETRY%GEOMETRIC_FIELD, & - & FIELD_U_VARIABLE_TYPE,FIELD_VALUES_SET_TYPE,local_ny, & - & MESH_DISPLACEMENT_VALUES(local_ny),err,error,*999) - ENDDO !deriv_idx - ENDDO !node_idx - ENDIF - ENDIF - ENDIF - ENDDO !component_idx - ENDIF - ENDDO !variable_idx - ELSE - CALL FlagError("Equations mapping is not associated.",err,error,*999) - END IF - ELSE - CALL FlagError("Equations are not associated.",err,error,*999) - END IF - CALL FIELD_PARAMETER_SET_UPDATE_START(EQUATIONS_SET_ALE_STOKES%GEOMETRY%GEOMETRIC_FIELD, & - & FIELD_U_VARIABLE_TYPE,FIELD_VALUES_SET_TYPE,err,error,*999) - CALL FIELD_PARAMETER_SET_UPDATE_FINISH(EQUATIONS_SET_ALE_STOKES%GEOMETRY%GEOMETRIC_FIELD, & - & FIELD_U_VARIABLE_TYPE,FIELD_VALUES_SET_TYPE,err,error,*999) - !Now use displacement values to calculate velocity values - TIME_INCREMENT=CONTROL_LOOP%TIME_LOOP%TIME_INCREMENT - ALPHA=1.0_DP/TIME_INCREMENT - CALL FIELD_PARAMETER_SETS_COPY(INDEPENDENT_FIELD_ALE_STOKES,FIELD_U_VARIABLE_TYPE, & - & FIELD_MESH_DISPLACEMENT_SET_TYPE,FIELD_MESH_VELOCITY_SET_TYPE,ALPHA,err,error,*999) - ELSE - CALL FlagError("Mesh motion calculation not successful for ALE problem.",err,error,*999) - END IF - CASE(PROBLEM_ALE_STOKES_SUBTYPE) - !Update mesh within the dynamic solver - IF(SOLVER%SOLVE_TYPE==SOLVER_DYNAMIC_TYPE) THEN - IF(SOLVER%DYNAMIC_SOLVER%ALE) THEN - !Get the dependent field for the three component Laplace problem - CALL SOLVERS_SOLVER_GET(SOLVER%SOLVERS,1,SOLVER_LAPLACE,err,error,*999) - SOLVER_EQUATIONS_LAPLACE=>SOLVER_LAPLACE%SOLVER_EQUATIONS - IF(ASSOCIATED(SOLVER_EQUATIONS_LAPLACE)) THEN - SOLVER_MAPPING_LAPLACE=>SOLVER_EQUATIONS_LAPLACE%SOLVER_MAPPING - IF(ASSOCIATED(SOLVER_MAPPING_LAPLACE)) THEN - EQUATIONS_SET_LAPLACE=>SOLVER_MAPPING_LAPLACE%EQUATIONS_SETS(1)%ptr - IF(ASSOCIATED(EQUATIONS_SET_LAPLACE)) THEN - DEPENDENT_FIELD_LAPLACE=>EQUATIONS_SET_LAPLACE%DEPENDENT%DEPENDENT_FIELD - ELSE - CALL FlagError("Laplace equations set is not associated.",err,error,*999) - END IF - CALL FIELD_NUMBER_OF_COMPONENTS_GET(EQUATIONS_SET_LAPLACE%GEOMETRY%GEOMETRIC_FIELD,FIELD_U_VARIABLE_TYPE, & - & NUMBER_OF_DIMENSIONS_LAPLACE,err,error,*999) - ELSE - CALL FlagError("Laplace solver mapping is not associated.",err,error,*999) - END IF - ELSE - CALL FlagError("Laplace solver equations are not associated.",err,error,*999) - END IF - !Get the independent field for the ALE Stokes problem - CALL SOLVERS_SOLVER_GET(SOLVER%SOLVERS,2,SOLVER_ALE_STOKES,err,error,*999) - SOLVER_EQUATIONS_ALE_STOKES=>SOLVER_ALE_STOKES%SOLVER_EQUATIONS - IF(ASSOCIATED(SOLVER_EQUATIONS_ALE_STOKES)) THEN - SOLVER_MAPPING_ALE_STOKES=>SOLVER_EQUATIONS_ALE_STOKES%SOLVER_MAPPING - IF(ASSOCIATED(SOLVER_MAPPING_ALE_STOKES)) THEN - EQUATIONS_SET_ALE_STOKES=>SOLVER_MAPPING_ALE_STOKES%EQUATIONS_SETS(1)%ptr - IF(ASSOCIATED(EQUATIONS_SET_ALE_STOKES)) THEN - INDEPENDENT_FIELD_ALE_STOKES=>EQUATIONS_SET_ALE_STOKES%INDEPENDENT%INDEPENDENT_FIELD - ELSE - CALL FlagError("ALE Stokes equations set is not associated.",err,error,*999) - END IF - CALL FIELD_NUMBER_OF_COMPONENTS_GET(EQUATIONS_SET_ALE_STOKES%GEOMETRY%GEOMETRIC_FIELD, & - & FIELD_U_VARIABLE_TYPE,NUMBER_OF_DIMENSIONS_ALE_STOKES,err,error,*999) - ELSE - CALL FlagError("ALE Stokes solver mapping is not associated.",err,error,*999) - END IF - ELSE - CALL FlagError("ALE Stokes solver equations are not associated.",err,error,*999) - END IF - !Copy result from Laplace mesh movement to Stokes' independent field - IF(NUMBER_OF_DIMENSIONS_ALE_STOKES==NUMBER_OF_DIMENSIONS_LAPLACE) THEN - DO I=1,NUMBER_OF_DIMENSIONS_ALE_STOKES - CALL Field_ParametersToFieldParametersCopy(DEPENDENT_FIELD_LAPLACE, & - & FIELD_U_VARIABLE_TYPE,FIELD_VALUES_SET_TYPE,I,INDEPENDENT_FIELD_ALE_STOKES, & - & FIELD_U_VARIABLE_TYPE,FIELD_MESH_DISPLACEMENT_SET_TYPE,I,err,error,*999) - END DO - ELSE - CALL FlagError("Dimension of Laplace and ALE Stokes equations set is not consistent.",err,error,*999) - END IF - !Use calculated values to update mesh - CALL FIELD_COMPONENT_MESH_COMPONENT_GET(EQUATIONS_SET_ALE_STOKES%GEOMETRY%GEOMETRIC_FIELD, & - & FIELD_U_VARIABLE_TYPE,1,GEOMETRIC_MESH_COMPONENT,err,error,*999) - NULLIFY(MESH_DISPLACEMENT_VALUES) - CALL FIELD_PARAMETER_SET_DATA_GET(INDEPENDENT_FIELD_ALE_STOKES,FIELD_U_VARIABLE_TYPE, & - & FIELD_MESH_DISPLACEMENT_SET_TYPE,MESH_DISPLACEMENT_VALUES,err,error,*999) - EQUATIONS=>SOLVER_MAPPING_LAPLACE%EQUATIONS_SET_TO_SOLVER_MAP(1)%EQUATIONS - IF(ASSOCIATED(EQUATIONS)) THEN - NULLIFY(vectorEquations) - CALL Equations_VectorEquationsGet(equations,vectorEquations,err,error,*999) - vectorMapping=>vectorEquations%vectorMapping - IF(ASSOCIATED(vectorMapping)) THEN - DO variable_idx=1,EQUATIONS_SET_ALE_STOKES%DEPENDENT%DEPENDENT_FIELD%NUMBER_OF_VARIABLES - variable_type=EQUATIONS_SET_ALE_STOKES%DEPENDENT%DEPENDENT_FIELD%VARIABLES(variable_idx)%variable_TYPE - FIELD_VARIABLE=>EQUATIONS_SET_ALE_STOKES%GEOMETRY%GEOMETRIC_FIELD%VARIABLE_TYPE_MAP(variable_type)%ptr - IF(ASSOCIATED(FIELD_VARIABLE)) THEN - DO component_idx=1,FIELD_VARIABLE%NUMBER_OF_COMPONENTS - DOMAIN=>FIELD_VARIABLE%COMPONENTS(component_idx)%DOMAIN - IF(ASSOCIATED(DOMAIN)) THEN - IF(ASSOCIATED(DOMAIN%TOPOLOGY)) THEN - DOMAIN_NODES=>DOMAIN%TOPOLOGY%NODES - IF(ASSOCIATED(DOMAIN_NODES)) THEN - !Loop over the local nodes excluding the ghosts. - DO node_idx=1,DOMAIN_NODES%NUMBER_OF_NODES - DO deriv_idx=1,DOMAIN_NODES%NODES(node_idx)%NUMBER_OF_DERIVATIVES - !Default to version 1 of each node derivative - local_ny=FIELD_VARIABLE%COMPONENTS(component_idx)%PARAM_TO_DOF_MAP% & - & NODE_PARAM2DOF_MAP%NODES(node_idx)%DERIVATIVES(deriv_idx)%VERSIONS(1) - CALL FIELD_PARAMETER_SET_ADD_LOCAL_DOF(EQUATIONS_SET_ALE_STOKES%GEOMETRY%GEOMETRIC_FIELD, & - & FIELD_U_VARIABLE_TYPE,FIELD_VALUES_SET_TYPE,local_ny, & - & MESH_DISPLACEMENT_VALUES(local_ny),err,error,*999) - ENDDO !deriv_idx - ENDDO !node_idx - ENDIF - ENDIF - ENDIF - ENDDO !component_idx - ENDIF - ENDDO !variable_idx - ELSE - CALL FlagError("Equations mapping is not associated.",err,error,*999) - ENDIF - CALL FIELD_PARAMETER_SET_DATA_RESTORE(INDEPENDENT_FIELD_ALE_STOKES,FIELD_U_VARIABLE_TYPE, & - & FIELD_MESH_DISPLACEMENT_SET_TYPE,MESH_DISPLACEMENT_VALUES,err,error,*999) - ELSE - CALL FlagError("Equations are not associated.",err,error,*999) - END IF - CALL FIELD_PARAMETER_SET_UPDATE_START(EQUATIONS_SET_ALE_STOKES%GEOMETRY%GEOMETRIC_FIELD,FIELD_U_VARIABLE_TYPE, & - & FIELD_VALUES_SET_TYPE,err,error,*999) - CALL FIELD_PARAMETER_SET_UPDATE_FINISH(EQUATIONS_SET_ALE_STOKES%GEOMETRY%GEOMETRIC_FIELD,FIELD_U_VARIABLE_TYPE, & - & FIELD_VALUES_SET_TYPE,err,error,*999) - !Now use displacement values to calculate velocity values - TIME_INCREMENT=CONTROL_LOOP%TIME_LOOP%TIME_INCREMENT - ALPHA=1.0_DP/TIME_INCREMENT - CALL FIELD_PARAMETER_SETS_COPY(INDEPENDENT_FIELD_ALE_STOKES,FIELD_U_VARIABLE_TYPE, & - & FIELD_MESH_DISPLACEMENT_SET_TYPE,FIELD_MESH_VELOCITY_SET_TYPE,ALPHA,err,error,*999) - ELSE - CALL FlagError("Mesh motion calculation not successful for ALE problem.",err,error,*999) - END IF - ELSE - CALL FlagError("Mesh update is not defined for non-dynamic problems.",err,error,*999) - END IF - CASE DEFAULT - localError="Problem subtype "//TRIM(NumberToVString(CONTROL_LOOP%PROBLEM%SPECIFICATION(3),"*",err,error))// & - & " is not valid for a Stokes equation fluid type of a fluid mechanics problem class." - CALL FlagError(localError,err,error,*999) - END SELECT - ELSE - CALL FlagError("Problem is not associated.",err,error,*999) - ENDIF - ELSE - CALL FlagError("Solver is not associated.",err,error,*999) - ENDIF - ELSE - CALL FlagError("Control loop is not associated.",err,error,*999) - ENDIF - EXITS("STOKES_PRE_SOLVE_ALE_UPDATE_MESH") - RETURN -999 ERRORSEXITS("STOKES_PRE_SOLVE_ALE_UPDATE_MESH",err,error) - RETURN 1 - END SUBROUTINE STOKES_PRE_SOLVE_ALE_UPDATE_MESH - - ! - !================================================================================================================================ - ! - !>Update mesh parameters for three component Laplace problem - SUBROUTINE STOKES_PRE_SOLVE_ALE_UPDATE_PARAMETERS(CONTROL_LOOP,SOLVER,err,error,*) - - !Argument variables - TYPE(CONTROL_LOOP_TYPE), POINTER :: CONTROL_LOOP !SOLVER%SOLVER_EQUATIONS - IF(ASSOCIATED(SOLVER_EQUATIONS)) THEN - SOLVER_MAPPING=>SOLVER_equations%SOLVER_MAPPING - IF(ASSOCIATED(SOLVER_MAPPING)) THEN - EQUATIONS_SET=>SOLVER_MAPPING%EQUATIONS_SETS(1)%ptr - NULLIFY(MESH_STIFF_VALUES) - CALL FIELD_PARAMETER_SET_DATA_GET(EQUATIONS_SET%INDEPENDENT%INDEPENDENT_FIELD,FIELD_U_VARIABLE_TYPE, & - & FIELD_VALUES_SET_TYPE,MESH_STIFF_VALUES,err,error,*999) - IF(ASSOCIATED(EQUATIONS_SET)) THEN - EQUATIONS=>SOLVER_MAPPING%EQUATIONS_SET_TO_SOLVER_MAP(1)%EQUATIONS - IF(ASSOCIATED(EQUATIONS)) THEN - independentField=>EQUATIONS_SET%INDEPENDENT%INDEPENDENT_FIELD - IF(ASSOCIATED(independentField)) THEN - DO variable_idx=1,EQUATIONS_SET%DEPENDENT%DEPENDENT_FIELD%NUMBER_OF_VARIABLES - variable_type=EQUATIONS_SET%DEPENDENT%DEPENDENT_FIELD%VARIABLES(variable_idx)%variable_TYPE - FIELD_VARIABLE=>EQUATIONS_SET%DEPENDENT%DEPENDENT_FIELD%VARIABLE_TYPE_MAP(variable_type)%ptr - IF(ASSOCIATED(FIELD_VARIABLE)) THEN - DO component_idx=1,FIELD_VARIABLE%NUMBER_OF_COMPONENTS - DOMAIN=>FIELD_VARIABLE%COMPONENTS(component_idx)%DOMAIN - IF(ASSOCIATED(DOMAIN)) THEN - IF(ASSOCIATED(DOMAIN%TOPOLOGY)) THEN - DOMAIN_NODES=>DOMAIN%TOPOLOGY%NODES - IF(ASSOCIATED(DOMAIN_NODES)) THEN - !Loop over the local nodes excluding the ghosts. - DO node_idx=1,DOMAIN_NODES%NUMBER_OF_NODES - DO deriv_idx=1,DOMAIN_NODES%NODES(node_idx)%NUMBER_OF_DERIVATIVES - !Default to version 1 of each node derivative - local_ny=FIELD_VARIABLE%COMPONENTS(component_idx)%PARAM_TO_DOF_MAP% & - & NODE_PARAM2DOF_MAP%NODES(node_idx)%DERIVATIVES(deriv_idx)%VERSIONS(1) - ! !Calculation of K values dependent on current mesh topology - MESH_STIFF_VALUES(local_ny)=1.0_DP - CALL FIELD_PARAMETER_SET_UPDATE_LOCAL_DOF(EQUATIONS_SET%INDEPENDENT% & - & INDEPENDENT_FIELD,FIELD_U_VARIABLE_TYPE,FIELD_VALUES_SET_TYPE,local_ny, & - & MESH_STIFF_VALUES(local_ny),err,error,*999) - ENDDO !deriv_idx - ENDDO !node_idx - ENDIF - ENDIF - ENDIF - ENDDO !component_idx - ENDIF - ENDDO !variable_idx - ELSE - CALL FlagError("Independent field is not associated.",err,error,*999) - END IF - ELSE - CALL FlagError("Equations are not associated.",err,error,*999) - END IF - ELSE - CALL FlagError("Equations set is not associated.",err,error,*999) - ENDIF - CALL FIELD_PARAMETER_SET_DATA_RESTORE(EQUATIONS_SET%INDEPENDENT%INDEPENDENT_FIELD,FIELD_U_VARIABLE_TYPE, & - & FIELD_VALUES_SET_TYPE,MESH_STIFF_VALUES,err,error,*999) - ELSE - CALL FlagError("Solver mapping is not associated.",err,error,*999) - END IF - ELSE - CALL FlagError("Solver equations are not associated.",err,error,*999) - END IF - ELSE IF(SOLVER%SOLVE_TYPE==SOLVER_DYNAMIC_TYPE) THEN - CALL FlagError("Mesh motion calculation not successful for ALE problem.",err,error,*999) - END IF - CASE DEFAULT - localError="Problem subtype "//TRIM(NumberToVString(CONTROL_LOOP%PROBLEM%SPECIFICATION(3),"*",err,error))// & - & " is not valid for a Stokes equation fluid type of a fluid mechanics problem class." - CALL FlagError(localError,err,error,*999) - END SELECT - ELSE - CALL FlagError("Problem is not associated.",err,error,*999) - ENDIF - ELSE - CALL FlagError("Solver is not associated.",err,error,*999) - ENDIF - ELSE - CALL FlagError("Control loop is not associated.",err,error,*999) - ENDIF - EXITS("STOKES_PRE_SOLVE_ALE_UPDATE_PARAMETERS") - RETURN -999 ERRORSEXITS("STOKES_PRE_SOLVE_ALE_UPDATE_PARAMETERS",err,error) - RETURN 1 - END SUBROUTINE STOKES_PRE_SOLVE_ALE_UPDATE_PARAMETERS - - ! - !================================================================================================================================ - ! - - !>Output data post solve - SUBROUTINE STOKES_POST_SOLVE_OUTPUT_DATA(CONTROL_LOOP,SOLVER,err,error,*) - - !Argument variables - TYPE(CONTROL_LOOP_TYPE), POINTER :: CONTROL_LOOP !SOLVER%SOLVER_EQUATIONS - IF(ASSOCIATED(SOLVER_EQUATIONS)) THEN - SOLVER_MAPPING=>SOLVER_equations%SOLVER_MAPPING - IF(ASSOCIATED(SOLVER_MAPPING)) THEN - !Make sure the equations sets are up to date - DO equations_set_idx=1,SOLVER_MAPPING%NUMBER_OF_EQUATIONS_SETS - EQUATIONS_SET=>SOLVER_MAPPING%EQUATIONS_SETS(equations_set_idx)%ptr - FILENAME="./output/"//"STATIC_SOLUTION" - METHOD="FORTRAN" - IF(SOLVER%outputType>=SOLVER_PROGRESS_OUTPUT) THEN - CALL WRITE_STRING(GENERAL_OUTPUT_TYPE,"...",err,error,*999) - CALL WRITE_STRING(GENERAL_OUTPUT_TYPE,"Now export fields... ",err,error,*999) - ENDIF - Fields=>EQUATIONS_SET%REGION%FIELDS - CALL FIELD_IO_NODES_EXPORT(Fields,FILENAME,METHOD,err,error,*999) - CALL FIELD_IO_ELEMENTS_EXPORT(Fields,FILENAME,METHOD,err,error,*999) - NULLIFY(Fields) - ENDDO - ENDIF - ENDIF - CASE(PROBLEM_TRANSIENT_STOKES_SUBTYPE,PROBLEM_ALE_STOKES_SUBTYPE,PROBLEM_PGM_STOKES_SUBTYPE) - CALL CONTROL_LOOP_CURRENT_TIMES_GET(CONTROL_LOOP,CURRENT_TIME,TIME_INCREMENT,err,error,*999) - SOLVER_EQUATIONS=>SOLVER%SOLVER_EQUATIONS - IF(ASSOCIATED(SOLVER_EQUATIONS)) THEN - SOLVER_MAPPING=>SOLVER_equations%SOLVER_MAPPING - IF(ASSOCIATED(SOLVER_MAPPING)) THEN - !Make sure the equations sets are up to date - DO equations_set_idx=1,SOLVER_MAPPING%NUMBER_OF_EQUATIONS_SETS - EQUATIONS_SET=>SOLVER_MAPPING%EQUATIONS_SETS(equations_set_idx)%ptr - CURRENT_LOOP_ITERATION=CONTROL_LOOP%TIME_LOOP%ITERATION_NUMBER - OUTPUT_ITERATION_NUMBER=CONTROL_LOOP%TIME_LOOP%OUTPUT_NUMBER - IF(OUTPUT_ITERATION_NUMBER/=0) THEN - IF(CONTROL_LOOP%TIME_LOOP%CURRENT_TIME<=CONTROL_LOOP%TIME_LOOP%STOP_TIME) THEN - IF(CURRENT_LOOP_ITERATION<10) THEN - WRITE(OUTPUT_FILE,'("TIME_STEP_000",I0)') CURRENT_LOOP_ITERATION - ELSE IF(CURRENT_LOOP_ITERATION<100) THEN - WRITE(OUTPUT_FILE,'("TIME_STEP_00",I0)') CURRENT_LOOP_ITERATION - ELSE IF(CURRENT_LOOP_ITERATION<1000) THEN - WRITE(OUTPUT_FILE,'("TIME_STEP_0",I0)') CURRENT_LOOP_ITERATION - ELSE IF(CURRENT_LOOP_ITERATION<10000) THEN - WRITE(OUTPUT_FILE,'("TIME_STEP_",I0)') CURRENT_LOOP_ITERATION - END IF - FILENAME="./output/"//"MainTime_"//TRIM(NumberToVString(CURRENT_LOOP_ITERATION,"*",err,error)) - METHOD="FORTRAN" - IF(MOD(CURRENT_LOOP_ITERATION,OUTPUT_ITERATION_NUMBER)==0) THEN - IF(CONTROL_LOOP%outputtype >= CONTROL_LOOP_PROGRESS_OUTPUT) THEN - CALL WRITE_STRING(GENERAL_OUTPUT_TYPE,"...",err,error,*999) - CALL WRITE_STRING(GENERAL_OUTPUT_TYPE,"Now export fields... ",err,error,*999) - ENDIF - Fields=>EQUATIONS_SET%REGION%FIELDS - CALL FIELD_IO_NODES_EXPORT(Fields,FILENAME,METHOD,err,error,*999) - CALL FIELD_IO_ELEMENTS_EXPORT(Fields,FILENAME,METHOD,err,error,*999) - NULLIFY(Fields) - IF(CONTROL_LOOP%outputtype >= CONTROL_LOOP_PROGRESS_OUTPUT) THEN - CALL WRITE_STRING(GENERAL_OUTPUT_TYPE,FILENAME,err,error,*999) - CALL WRITE_STRING(GENERAL_OUTPUT_TYPE,"...",err,error,*999) - ENDIF - END IF - IF(ASSOCIATED(EQUATIONS_SET%ANALYTIC)) THEN - IF(EQUATIONS_SET%ANALYTIC%ANALYTIC_FUNCTION_TYPE==EQUATIONS_SET_NAVIER_STOKES_EQUATION_TWO_DIM_4.OR. & - & EQUATIONS_SET%ANALYTIC%ANALYTIC_FUNCTION_TYPE==EQUATIONS_SET_NAVIER_STOKES_EQUATION_TWO_DIM_5.OR. & - & EQUATIONS_SET%ANALYTIC%ANALYTIC_FUNCTION_TYPE==EQUATIONS_SET_NAVIER_STOKES_EQUATION_THREE_DIM_4.OR. & - & EQUATIONS_SET%ANALYTIC%ANALYTIC_FUNCTION_TYPE==EQUATIONS_SET_NAVIER_STOKES_EQUATION_THREE_DIM_5.OR. & - & EQUATIONS_SET%ANALYTIC%ANALYTIC_FUNCTION_TYPE==EQUATIONS_SET_NAVIER_STOKES_EQUATION_THREE_DIM_1) THEN - CALL AnalyticAnalysis_Output(EQUATIONS_SET%DEPENDENT%DEPENDENT_FIELD,OUTPUT_FILE,err,error,*999) - ENDIF - ENDIF - ENDIF - ENDIF - ENDDO - ENDIF - ENDIF - CASE DEFAULT - localError="Problem subtype "//TRIM(NumberToVString(CONTROL_LOOP%PROBLEM%SPECIFICATION(3),"*",err,error))// & - & " is not valid for a Stokes equation fluid type of a fluid mechanics problem class." - CALL FlagError(localError,err,error,*999) - END SELECT - ELSE - CALL FlagError("Problem is not associated.",err,error,*999) - ENDIF - ELSE - CALL FlagError("Solver is not associated.",err,error,*999) - ENDIF - ELSE - CALL FlagError("Control loop is not associated.",err,error,*999) - ENDIF - EXITS("STOKES_POST_SOLVE_OUTPUT_DATA") - RETURN -999 ERRORSEXITS("STOKES_POST_SOLVE_OUTPUT_DATA",err,error) - RETURN 1 - END SUBROUTINE STOKES_POST_SOLVE_OUTPUT_DATA - - ! - !================================================================================================================================ - ! - - !>Calculates the analytic solution and sets the boundary conditions for an analytic problem. - SUBROUTINE Stokes_BoundaryConditionsAnalyticCalculate(EQUATIONS_SET,BOUNDARY_CONDITIONS,err,error,*) - - !Argument variables - TYPE(EQUATIONS_SET_TYPE), POINTER :: EQUATIONS_SET - TYPE(BOUNDARY_CONDITIONS_TYPE), POINTER :: BOUNDARY_CONDITIONS - INTEGER(INTG), INTENT(OUT) :: ERR !EQUATIONS_SET%DEPENDENT%DEPENDENT_FIELD - IF(ASSOCIATED(dependentField)) THEN - geometricField=>EQUATIONS_SET%GEOMETRY%GEOMETRIC_FIELD - IF(ASSOCIATED(geometricField)) THEN - NULLIFY(INTERPOLATION_PARAMETERS) - NULLIFY(INTERPOLATED_POINT) - CALL FIELD_INTERPOLATION_PARAMETERS_INITIALISE(geometricField,INTERPOLATION_PARAMETERS,err,error,*999) - CALL FIELD_INTERPOLATED_POINTS_INITIALISE(INTERPOLATION_PARAMETERS,INTERPOLATED_POINT,err,error,*999) - CALL FIELD_NUMBER_OF_COMPONENTS_GET(geometricField,FIELD_U_VARIABLE_TYPE,NUMBER_OF_DIMENSIONS,err,error,*999) -! ! ! !\todo: Check adjacent element calculation / use boundary node flag instead / didn't work for simplex -! ! ! IF(NUMBER_OF_DIMENSIONS==2) THEN -! ! ! BOUNDARY_X(1,1)=0.0_DP -! ! ! BOUNDARY_X(1,2)=10.0_DP -! ! ! BOUNDARY_X(2,1)=0.0_DP -! ! ! BOUNDARY_X(2,2)=10.0_DP -! ! ! ELSE IF(NUMBER_OF_DIMENSIONS==3) THEN -! ! ! BOUNDARY_X(1,1)=-5.0_DP -! ! ! BOUNDARY_X(1,2)=5.0_DP -! ! ! BOUNDARY_X(2,1)=-5.0_DP -! ! ! BOUNDARY_X(2,2)=5.0_DP -! ! ! BOUNDARY_X(3,1)=-5.0_DP -! ! ! BOUNDARY_X(3,2)=5.0_DP -! ! ! ENDIF - NULLIFY(GEOMETRIC_VARIABLE) - CALL Field_VariableGet(geometricField,FIELD_U_VARIABLE_TYPE,GEOMETRIC_VARIABLE,err,error,*999) - NULLIFY(GEOMETRIC_PARAMETERS) - CALL FIELD_PARAMETER_SET_DATA_GET(geometricField,FIELD_U_VARIABLE_TYPE,FIELD_VALUES_SET_TYPE,GEOMETRIC_PARAMETERS, & - & err,error,*999) - IF(ASSOCIATED(BOUNDARY_CONDITIONS)) THEN - DO variable_idx=1,dependentField%NUMBER_OF_VARIABLES - variable_type=dependentField%VARIABLES(variable_idx)%variable_TYPE - FIELD_VARIABLE=>dependentField%VARIABLE_TYPE_MAP(variable_type)%ptr - IF(ASSOCIATED(FIELD_VARIABLE)) THEN - CALL FIELD_PARAMETER_SET_CREATE(dependentField,variable_type,FIELD_ANALYTIC_VALUES_SET_TYPE,err,error,*999) - DO component_idx=1,FIELD_VARIABLE%NUMBER_OF_COMPONENTS - BOUND_COUNT=0 - IF(FIELD_VARIABLE%COMPONENTS(component_idx)%INTERPOLATION_TYPE==FIELD_NODE_BASED_INTERPOLATION) THEN - DOMAIN=>FIELD_VARIABLE%COMPONENTS(component_idx)%DOMAIN - IF(ASSOCIATED(DOMAIN)) THEN - IF(ASSOCIATED(DOMAIN%TOPOLOGY)) THEN - DOMAIN_NODES=>DOMAIN%TOPOLOGY%NODES - IF(ASSOCIATED(DOMAIN_NODES)) THEN - !Loop over the local nodes excluding the ghosts. - DO node_idx=1,DOMAIN_NODES%NUMBER_OF_NODES - element_idx=DOMAIN%topology%nodes%nodes(node_idx)%surrounding_elements(1) - CALL FIELD_INTERPOLATION_PARAMETERS_ELEMENT_GET(FIELD_VALUES_SET_TYPE,element_idx, & - & INTERPOLATION_PARAMETERS(FIELD_U_VARIABLE_TYPE)%ptr,err,error,*999) - en_idx=0 - XI_COORDINATES=0.0_DP - number_of_nodes_xic(1)=DOMAIN%topology%elements%elements(element_idx)%basis%number_of_nodes_xic(1) - number_of_nodes_xic(2)=DOMAIN%topology%elements%elements(element_idx)%basis%number_of_nodes_xic(2) - IF(NUMBER_OF_DIMENSIONS==3) THEN - number_of_nodes_xic(3)=DOMAIN%topology%elements%elements(element_idx)%basis%number_of_nodes_xic(3) - ELSE - number_of_nodes_xic(3)=1 - ENDIF - !\todo: Use boundary flag - IF(DOMAIN%topology%elements%maximum_number_of_element_parameters==4.AND.NUMBER_OF_DIMENSIONS==2 .OR. & - & DOMAIN%topology%elements%maximum_number_of_element_parameters==9.OR. & - & DOMAIN%topology%elements%maximum_number_of_element_parameters==16.OR. & - & DOMAIN%topology%elements%maximum_number_of_element_parameters==8.OR. & - & DOMAIN%topology%elements%maximum_number_of_element_parameters==27.OR. & - & DOMAIN%topology%elements%maximum_number_of_element_parameters==64) THEN - DO K=1,number_of_nodes_xic(3) - DO J=1,number_of_nodes_xic(2) - DO I=1,number_of_nodes_xic(1) - en_idx=en_idx+1 - IF(DOMAIN%topology%elements%elements(element_idx)%element_nodes(en_idx)==node_idx) EXIT - XI_COORDINATES(1)=XI_COORDINATES(1)+(1.0_DP/(number_of_nodes_xic(1)-1)) - ENDDO - IF(DOMAIN%topology%elements%elements(element_idx)%element_nodes(en_idx)==node_idx) EXIT - XI_COORDINATES(1)=0.0_DP - XI_COORDINATES(2)=XI_COORDINATES(2)+(1.0_DP/(number_of_nodes_xic(2)-1)) - ENDDO - IF(DOMAIN%topology%elements%elements(element_idx)%element_nodes(en_idx)==node_idx) EXIT - XI_COORDINATES(1)=0.0_DP - XI_COORDINATES(2)=0.0_DP - IF(number_of_nodes_xic(3)/=1) THEN - XI_COORDINATES(3)=XI_COORDINATES(3)+(1.0_DP/(number_of_nodes_xic(3)-1)) - ENDIF - ENDDO - CALL FIELD_INTERPOLATE_XI(NO_PART_DERIV,XI_COORDINATES, & - & INTERPOLATED_POINT(FIELD_U_VARIABLE_TYPE)%ptr,err,error,*999) - ELSE - !\todo: Use boundary flag - IF(DOMAIN%topology%elements%maximum_number_of_element_parameters==3) THEN - T_COORDINATES(1,1:2)=[0.0_DP,1.0_DP] - T_COORDINATES(2,1:2)=[1.0_DP,0.0_DP] - T_COORDINATES(3,1:2)=[1.0_DP,1.0_DP] - ELSE IF(DOMAIN%topology%elements%maximum_number_of_element_parameters==6) THEN - T_COORDINATES(1,1:2)=[0.0_DP,1.0_DP] - T_COORDINATES(2,1:2)=[1.0_DP,0.0_DP] - T_COORDINATES(3,1:2)=[1.0_DP,1.0_DP] - T_COORDINATES(4,1:2)=[0.5_DP,0.5_DP] - T_COORDINATES(5,1:2)=[1.0_DP,0.5_DP] - T_COORDINATES(6,1:2)=[0.5_DP,1.0_DP] - ELSE IF(DOMAIN%topology%elements%maximum_number_of_element_parameters==10.AND. & - & NUMBER_OF_DIMENSIONS==2) THEN - T_COORDINATES(1,1:2)=[0.0_DP,1.0_DP] - T_COORDINATES(2,1:2)=[1.0_DP,0.0_DP] - T_COORDINATES(3,1:2)=[1.0_DP,1.0_DP] - T_COORDINATES(4,1:2)=[1.0_DP/3.0_DP,2.0_DP/3.0_DP] - T_COORDINATES(5,1:2)=[2.0_DP/3.0_DP,1.0_DP/3.0_DP] - T_COORDINATES(6,1:2)=[1.0_DP,1.0_DP/3.0_DP] - T_COORDINATES(7,1:2)=[1.0_DP,2.0_DP/3.0_DP] - T_COORDINATES(8,1:2)=[2.0_DP/3.0_DP,1.0_DP] - T_COORDINATES(9,1:2)=[1.0_DP/3.0_DP,1.0_DP] - T_COORDINATES(10,1:2)=[2.0_DP/3.0_DP,2.0_DP/3.0_DP] - ELSE IF(DOMAIN%topology%elements%maximum_number_of_element_parameters==4) THEN - T_COORDINATES(1,1:3)=[0.0_DP,1.0_DP,1.0_DP] - T_COORDINATES(2,1:3)=[1.0_DP,0.0_DP,1.0_DP] - T_COORDINATES(3,1:3)=[1.0_DP,1.0_DP,0.0_DP] - T_COORDINATES(4,1:3)=[1.0_DP,1.0_DP,1.0_DP] - ELSE IF(DOMAIN%topology%elements%maximum_number_of_element_parameters==10.AND. & - & NUMBER_OF_DIMENSIONS==3) THEN - T_COORDINATES(1,1:3)=[0.0_DP,1.0_DP,1.0_DP] - T_COORDINATES(2,1:3)=[1.0_DP,0.0_DP,1.0_DP] - T_COORDINATES(3,1:3)=[1.0_DP,1.0_DP,0.0_DP] - T_COORDINATES(4,1:3)=[1.0_DP,1.0_DP,1.0_DP] - T_COORDINATES(5,1:3)=[0.5_DP,0.5_DP,1.0_DP] - T_COORDINATES(6,1:3)=[0.5_DP,1.0_DP,0.5_DP] - T_COORDINATES(7,1:3)=[0.5_DP,1.0_DP,1.0_DP] - T_COORDINATES(8,1:3)=[1.0_DP,0.5_DP,0.5_DP] - T_COORDINATES(9,1:3)=[1.0_DP,1.0_DP,0.5_DP] - T_COORDINATES(10,1:3)=[1.0_DP,0.5_DP,1.0_DP] - ELSE IF(DOMAIN%topology%elements%maximum_number_of_element_parameters==20) THEN - T_COORDINATES(1,1:3)=[0.0_DP,1.0_DP,1.0_DP] - T_COORDINATES(2,1:3)=[1.0_DP,0.0_DP,1.0_DP] - T_COORDINATES(3,1:3)=[1.0_DP,1.0_DP,0.0_DP] - T_COORDINATES(4,1:3)=[1.0_DP,1.0_DP,1.0_DP] - T_COORDINATES(5,1:3)=[1.0_DP/3.0_DP,2.0_DP/3.0_DP,1.0_DP] - T_COORDINATES(6,1:3)=[2.0_DP/3.0_DP,1.0_DP/3.0_DP,1.0_DP] - T_COORDINATES(7,1:3)=[1.0_DP/3.0_DP,1.0_DP,2.0_DP/3.0_DP] - T_COORDINATES(8,1:3)=[2.0_DP/3.0_DP,1.0_DP,1.0_DP/3.0_DP] - T_COORDINATES(9,1:3)=[1.0_DP/3.0_DP,1.0_DP,1.0_DP] - T_COORDINATES(10,1:3)=[2.0_DP/3.0_DP,1.0_DP,1.0_DP] - T_COORDINATES(11,1:3)=[1.0_DP,1.0_DP/3.0_DP,2.0_DP/3.0_DP] - T_COORDINATES(12,1:3)=[1.0_DP,2.0_DP/3.0_DP,1.0_DP/3.0_DP] - T_COORDINATES(13,1:3)=[1.0_DP,1.0_DP,1.0_DP/3.0_DP] - T_COORDINATES(14,1:3)=[1.0_DP,1.0_DP,2.0_DP/3.0_DP] - T_COORDINATES(15,1:3)=[1.0_DP,1.0_DP/3.0_DP,1.0_DP] - T_COORDINATES(16,1:3)=[1.0_DP,2.0_DP/3.0_DP,1.0_DP] - T_COORDINATES(17,1:3)=[2.0_DP/3.0_DP,2.0_DP/3.0_DP,2.0_DP/3.0_DP] - T_COORDINATES(18,1:3)=[2.0_DP/3.0_DP,2.0_DP/3.0_DP,1.0_DP] - T_COORDINATES(19,1:3)=[2.0_DP/3.0_DP,1.0_DP,2.0_DP/3.0_DP] - T_COORDINATES(20,1:3)=[1.0_DP,2.0_DP/3.0_DP,2.0_DP/3.0_DP] - ENDIF - DO K=1,DOMAIN%topology%elements%maximum_number_of_element_parameters - IF(DOMAIN%topology%elements%elements(element_idx)%element_nodes(K)==node_idx) EXIT - ENDDO - IF(NUMBER_OF_DIMENSIONS==2) THEN - CALL FIELD_INTERPOLATE_XI(NO_PART_DERIV,T_COORDINATES(K,1:2), & - & INTERPOLATED_POINT(FIELD_U_VARIABLE_TYPE)%ptr,err,error,*999) - ELSE IF(NUMBER_OF_DIMENSIONS==3) THEN - CALL FIELD_INTERPOLATE_XI(NO_PART_DERIV,T_COORDINATES(K,1:3), & - & INTERPOLATED_POINT(FIELD_U_VARIABLE_TYPE)%ptr,err,error,*999) - ENDIF - ENDIF - X=0.0_DP - DO dim_idx=1,NUMBER_OF_DIMENSIONS - X(dim_idx)=INTERPOLATED_POINT(FIELD_U_VARIABLE_TYPE)%ptr%VALUES(dim_idx,1) - ENDDO !dim_idx - - !Loop over the derivatives - DO deriv_idx=1,DOMAIN_NODES%NODES(node_idx)%NUMBER_OF_DERIVATIVES - ANALYTIC_FUNCTION_TYPE=EQUATIONS_SET%ANALYTIC%ANALYTIC_FUNCTION_TYPE - GLOBAL_DERIV_INDEX=DOMAIN_NODES%NODES(node_idx)%DERIVATIVES(deriv_idx)%GLOBAL_DERIVATIVE_INDEX - CURRENT_TIME=0.0_DP - materialsField=>EQUATIONS_SET%MATERIALS%MATERIALS_FIELD - !Define MU_PARAM, density=1 - MU_PARAM=materialsField%variables(1)%parameter_sets%parameter_sets(1)%ptr% & - & parameters%cmiss%data_dp(1) - !Define RHO_PARAM, density=2 - IF(ANALYTIC_FUNCTION_TYPE==EQUATIONS_SET_STOKES_EQUATION_TWO_DIM_4.OR. & - & ANALYTIC_FUNCTION_TYPE==EQUATIONS_SET_STOKES_EQUATION_TWO_DIM_5.OR. & - & ANALYTIC_FUNCTION_TYPE==EQUATIONS_SET_STOKES_EQUATION_THREE_DIM_4.OR. & - & ANALYTIC_FUNCTION_TYPE==EQUATIONS_SET_STOKES_EQUATION_THREE_DIM_5) THEN - RHO_PARAM=materialsField%variables(1)%parameter_sets%parameter_sets(1)%ptr% & - & parameters%cmiss%data_dp(2) - ELSE - RHO_PARAM=0.0_DP - ENDIF - CALL STOKES_EQUATION_ANALYTIC_FUNCTIONS(VALUE,X,MU_PARAM,RHO_PARAM,CURRENT_TIME,variable_type, & - & GLOBAL_DERIV_INDEX,ANALYTIC_FUNCTION_TYPE,NUMBER_OF_DIMENSIONS, & - & FIELD_VARIABLE%NUMBER_OF_COMPONENTS,component_idx,err,error,*999) - !Default to version 1 of each node derivative - local_ny=FIELD_VARIABLE%COMPONENTS(component_idx)%PARAM_TO_DOF_MAP% & - & NODE_PARAM2DOF_MAP%NODES(node_idx)%DERIVATIVES(deriv_idx)%VERSIONS(1) - CALL FIELD_PARAMETER_SET_UPDATE_LOCAL_DOF(dependentField,variable_type, & - & FIELD_ANALYTIC_VALUES_SET_TYPE,local_ny,VALUE,err,error,*999) - IF(variable_type==FIELD_U_VARIABLE_TYPE) THEN - ! \todo: This part should work even for simplex elements as soon as adjacent element calculation has been fixed - IF(DOMAIN_NODES%NODES(node_idx)%BOUNDARY_NODE) THEN - !If we are a boundary node then set the analytic value on the boundary - IF(component_idx<=NUMBER_OF_DIMENSIONS) THEN - CALL BOUNDARY_CONDITIONS_SET_LOCAL_DOF(BOUNDARY_CONDITIONS,dependentField,variable_type, & - & local_ny,BOUNDARY_CONDITION_FIXED,VALUE,err,error,*999) - BOUND_COUNT=BOUND_COUNT+1 - ELSE - ! \todo: This is just a workaround for linear pressure fields in simplex element components - IF(DOMAIN%topology%elements%maximum_number_of_element_parameters==3) THEN - IF(ANALYTIC_FUNCTION_TYPE==EQUATIONS_SET_STOKES_EQUATION_TWO_DIM_1.OR. & - & ANALYTIC_FUNCTION_TYPE==EQUATIONS_SET_STOKES_EQUATION_TWO_DIM_2.OR. & - & ANALYTIC_FUNCTION_TYPE==EQUATIONS_SET_STOKES_EQUATION_TWO_DIM_3.OR. & - & ANALYTIC_FUNCTION_TYPE==EQUATIONS_SET_STOKES_EQUATION_TWO_DIM_4.OR. & - & ANALYTIC_FUNCTION_TYPE==EQUATIONS_SET_STOKES_EQUATION_TWO_DIM_5) THEN - IF(-0.001_DPBOUNDARY_X(1,1)-BOUNDARY_TOLERANCE.OR. & - ! ! ! & X(1)BOUNDARY_X(1,2)-BOUNDARY_TOLERANCE.OR. & - ! ! ! & X(2)BOUNDARY_X(2,1)-BOUNDARY_TOLERANCE.OR. & - ! ! ! & X(2)BOUNDARY_X(2,2)-BOUNDARY_TOLERANCE) THEN - ! ! ! IF(component_idx<=NUMBER_OF_DIMENSIONS) THEN - ! ! ! CALL BOUNDARY_CONDITIONS_SET_LOCAL_DOF(BOUNDARY_CONDITIONS,variable_type,local_ny, & - ! ! ! & BOUNDARY_CONDITION_FIXED,VALUE,err,error,*999) - ! ! ! BOUND_COUNT=BOUND_COUNT+1 - ! ! ! !Apply boundary conditions check for pressure nodes - ! ! ! ELSE IF(component_idx>NUMBER_OF_DIMENSIONS) THEN - ! ! ! IF(DOMAIN%topology%elements%maximum_number_of_element_parameters==4) THEN - ! ! ! IF(X(1)BOUNDARY_X(1,1)-BOUNDARY_TOLERANCE.AND. & - ! ! ! & X(2)BOUNDARY_X(2,1)-BOUNDARY_TOLERANCE) & - ! ! ! & THEN - ! ! ! ! Commented out for testing purposes - ! ! ! CALL BOUNDARY_CONDITIONS_SET_LOCAL_DOF(BOUNDARY_CONDITIONS,variable_type,local_ny, & - ! ! ! & BOUNDARY_CONDITION_FIXED,VALUE,err,error,*999) - ! ! ! BOUND_COUNT=BOUND_COUNT+1 - ! ! ! ENDIF - ! ! ! ENDIF - ! ! ! !\todo: Again, ... - ! ! ! IF(DOMAIN%topology%elements%maximum_number_of_element_parameters==3.OR. & - ! ! ! & DOMAIN%topology%elements%maximum_number_of_element_parameters==6.OR. & - ! ! ! & DOMAIN%topology%elements%maximum_number_of_element_parameters==10) THEN - ! ! ! IF(X(1)BOUNDARY_X(1,1)-BOUNDARY_TOLERANCE.AND. & - ! ! ! & X(2)BOUNDARY_X(2,1)-BOUNDARY_TOLERANCE.OR. & - ! ! ! & X(1)BOUNDARY_X(1,1)-BOUNDARY_TOLERANCE.AND.& - ! ! ! & X(2)BOUNDARY_X(2,2)-BOUNDARY_TOLERANCE.OR. & - ! ! ! & X(1)BOUNDARY_X(1,2)-BOUNDARY_TOLERANCE.AND.& - ! ! ! & X(2)BOUNDARY_X(2,1)-BOUNDARY_TOLERANCE.OR. & - ! ! ! & X(1)BOUNDARY_X(1,2)-BOUNDARY_TOLERANCE.AND.& - ! ! ! & X(2)BOUNDARY_X(2,2)-BOUNDARY_TOLERANCE) & - ! ! ! & THEN - ! ! ! CALL BOUNDARY_CONDITIONS_SET_LOCAL_DOF(BOUNDARY_CONDITIONS,variable_type,local_ny, & - ! ! ! & BOUNDARY_CONDITION_FIXED,VALUE,err,error,*999) - ! ! ! BOUND_COUNT=BOUND_COUNT+1 - ! ! ! ENDIF - ! ! ! ENDIF - ! ! ! ENDIF - ! ! ! ENDIF - ! ! ! IF(component_idx<=NUMBER_OF_DIMENSIONS+1) THEN - ! ! ! CALL FIELD_PARAMETER_SET_UPDATE_LOCAL_DOF(dependentField,variable_type, & - ! ! ! & FIELD_VALUES_SET_TYPE,local_ny,VALUE,err,error,*999) - ! ! ! ENDIF - ! ! ! ELSE IF(NUMBER_OF_DIMENSIONS==3) THEN - ! ! ! IF(X(1)BOUNDARY_X(1,1)-BOUNDARY_TOLERANCE.OR. & - ! ! ! & X(1)BOUNDARY_X(1,2)-BOUNDARY_TOLERANCE.OR. & - ! ! ! & X(2)BOUNDARY_X(2,1)-BOUNDARY_TOLERANCE.OR. & - ! ! ! & X(2)BOUNDARY_X(2,2)-BOUNDARY_TOLERANCE.OR. & - ! ! ! & X(3)BOUNDARY_X(3,1)-BOUNDARY_TOLERANCE.OR. & - ! ! ! & X(3)BOUNDARY_X(3,2)-BOUNDARY_TOLERANCE) THEN - ! ! ! IF(component_idx<=NUMBER_OF_DIMENSIONS) THEN - ! ! ! CALL BOUNDARY_CONDITIONS_SET_LOCAL_DOF(BOUNDARY_CONDITIONS,variable_type,local_ny, & - ! ! ! & BOUNDARY_CONDITION_FIXED,VALUE,err,error,*999) - ! ! ! BOUND_COUNT=BOUND_COUNT+1 - ! ! ! !Apply boundary conditions check for pressure nodes - ! ! ! ELSE IF(component_idx>NUMBER_OF_DIMENSIONS) THEN - ! ! ! IF(DOMAIN%topology%elements%maximum_number_of_element_parameters==4.OR. & - ! ! ! & DOMAIN%topology%elements%maximum_number_of_element_parameters==10.OR. & - ! ! ! & DOMAIN%topology%elements%maximum_number_of_element_parameters==20) THEN - ! ! ! IF(X(1)BOUNDARY_X(1,1)-BOUNDARY_TOLERANCE.AND. & - ! ! ! & X(2)BOUNDARY_X(2,1)-BOUNDARY_TOLERANCE.AND. & - ! ! ! & X(3)BOUNDARY_X(3,1)-BOUNDARY_TOLERANCE.OR. & - ! ! ! & X(1)BOUNDARY_X(1,1)-BOUNDARY_TOLERANCE.AND. & - ! ! ! & X(2)BOUNDARY_X(2,1)-BOUNDARY_TOLERANCE.AND. & - ! ! ! & X(3)BOUNDARY_X(3,2)-BOUNDARY_TOLERANCE.OR. & - ! ! ! & X(1)BOUNDARY_X(1,1)-BOUNDARY_TOLERANCE.AND. & - ! ! ! & X(2)BOUNDARY_X(2,2)-BOUNDARY_TOLERANCE.AND. & - ! ! ! & X(3)BOUNDARY_X(3,1)-BOUNDARY_TOLERANCE.OR. & - ! ! ! & X(1)BOUNDARY_X(1,1)-BOUNDARY_TOLERANCE.AND. & - ! ! ! & X(2)BOUNDARY_X(2,2)-BOUNDARY_TOLERANCE.AND. & - ! ! ! & X(3)BOUNDARY_X(3,2)-BOUNDARY_TOLERANCE.OR. & - ! ! ! & X(1)BOUNDARY_X(1,2)-BOUNDARY_TOLERANCE.AND. & - ! ! ! & X(2)BOUNDARY_X(2,1)-BOUNDARY_TOLERANCE.AND. & - ! ! ! & X(3)BOUNDARY_X(3,1)-BOUNDARY_TOLERANCE.OR. & - ! ! ! & X(1)BOUNDARY_X(1,2)-BOUNDARY_TOLERANCE.AND. & - ! ! ! & X(2)BOUNDARY_X(2,1)-BOUNDARY_TOLERANCE.AND. & - ! ! ! & X(3)BOUNDARY_X(3,2)-BOUNDARY_TOLERANCE.OR. & - ! ! ! & X(1)BOUNDARY_X(1,2)-BOUNDARY_TOLERANCE.AND. & - ! ! ! & X(2)BOUNDARY_X(2,2)-BOUNDARY_TOLERANCE.AND. & - ! ! ! & X(3)BOUNDARY_X(3,1)-BOUNDARY_TOLERANCE.OR. & - ! ! ! & X(1)BOUNDARY_X(1,2)-BOUNDARY_TOLERANCE.AND. & - ! ! ! & X(2)BOUNDARY_X(2,2)-BOUNDARY_TOLERANCE.AND. & - ! ! ! & X(3)BOUNDARY_X(3,2)-BOUNDARY_TOLERANCE) THEN - ! ! ! CALL BOUNDARY_CONDITIONS_SET_LOCAL_DOF(BOUNDARY_CONDITIONS,variable_type,local_ny, & - ! ! ! & BOUNDARY_CONDITION_FIXED,VALUE,err,error,*999) - ! ! ! BOUND_COUNT=BOUND_COUNT+1 - ! ! ! ENDIF - ! ! ! ENDIF - ! ! ! ENDIF - ! ! ! ELSE - ! ! ! IF(component_idx<=NUMBER_OF_DIMENSIONS+1) THEN - ! ! ! CALL FIELD_PARAMETER_SET_UPDATE_LOCAL_DOF(dependentField,variable_type, & - ! ! ! & FIELD_VALUES_SET_TYPE,local_ny,VALUE,err,error,*999) - ! ! ! ENDIF - ! ! ! ENDIF - ! ! ! ENDIF - ENDIF - ENDDO !deriv_idx - ENDDO !node_idx - ELSE - CALL FlagError("Domain topology nodes is not associated.",err,error,*999) - ENDIF - ELSE - CALL FlagError("Domain topology is not associated.",err,error,*999) - ENDIF - ELSE - CALL FlagError("Domain is not associated.",err,error,*999) - ENDIF - ELSE - CALL FlagError("Only node based interpolation is implemented.",err,error,*999) - ENDIF - ENDDO !component_idx - CALL FIELD_PARAMETER_SET_UPDATE_START(dependentField,variable_type,FIELD_ANALYTIC_VALUES_SET_TYPE, & - & err,error,*999) - CALL FIELD_PARAMETER_SET_UPDATE_FINISH(dependentField,variable_type,FIELD_ANALYTIC_VALUES_SET_TYPE, & - & err,error,*999) - CALL FIELD_PARAMETER_SET_UPDATE_START(dependentField,variable_type,FIELD_VALUES_SET_TYPE, & - & err,error,*999) - CALL FIELD_PARAMETER_SET_UPDATE_FINISH(dependentField,variable_type,FIELD_VALUES_SET_TYPE, & - & err,error,*999) - ELSE - CALL FlagError("Field variable is not associated.",err,error,*999) - ENDIF - ENDDO !variable_idx - CALL FIELD_PARAMETER_SET_DATA_RESTORE(geometricField,FIELD_U_VARIABLE_TYPE,FIELD_VALUES_SET_TYPE, & - & GEOMETRIC_PARAMETERS,err,error,*999) - CALL FIELD_INTERPOLATED_POINTS_FINALISE(INTERPOLATED_POINT,err,error,*999) - CALL FIELD_INTERPOLATION_PARAMETERS_FINALISE(INTERPOLATION_PARAMETERS,err,error,*999) - ELSE - CALL FlagError("Boundary conditions is not associated.",err,error,*999) - ENDIF - ELSE - CALL FlagError("Equations set geometric field is not associated.",err,error,*999) - ENDIF - ELSE - CALL FlagError("Equations set dependent field is not associated.",err,error,*999) - ENDIF - ELSE - CALL FlagError("Equations set analytic is not associated.",err,error,*999) - ENDIF - ELSE - CALL FlagError("Equations set is not associated.",err,error,*999) - ENDIF - - EXITS("Stokes_BoundaryConditionsAnalyticCalculate") - RETURN -999 ERRORSEXITS("Stokes_BoundaryConditionsAnalyticCalculate",err,error) - RETURN 1 - END SUBROUTINE Stokes_BoundaryConditionsAnalyticCalculate - - ! - !================================================================================================================================ - ! - !>Calculates the various analytic solutions given X and time, can be called from within analytic calculate or elsewhere if needed - SUBROUTINE STOKES_EQUATION_ANALYTIC_FUNCTIONS(VALUE,X,MU_PARAM,RHO_PARAM,CURRENT_TIME,VARIABLE_TYPE, & - & GLOBAL_DERIV_INDEX,ANALYTIC_FUNCTION_TYPE,NUMBER_OF_DIMENSIONS,NUMBER_OF_COMPONENTS,COMPONENT_IDX,err,error,*) - - !Argument variables - INTEGER(INTG), INTENT(OUT) :: ERR ! Date: Tue, 17 Apr 2018 15:16:27 +1200 Subject: [PATCH 07/13] Backup for contexts change. --- cmake/Sources.cmake | 2 + src/Darcy_equations_routines.f90 | 6 +- src/Navier_Stokes_equations_routines.f90 | 129 +- src/analytic_analysis_routines.f90 | 87 +- src/base_routines.f90 | 121 +- src/basis_access_routines.f90 | 99 +- src/basis_routines.f90 | 587 +- src/boundary_condition_routines.f90 | 55 +- src/cellml_access_routines.f90 | 1 + src/cmiss.f90 | 94 +- src/cmiss_cellml.f90 | 13 +- src/computation_access_routines.f90 | 199 +- src/computation_routines.f90 | 239 +- src/control_loop_access_routines.f90 | 1 + src/control_loop_routines.f90 | 7 +- src/coordinate_access_routines.f90 | 61 +- src/coordinate_routines.f90 | 1086 +-- src/data_point_access_routines.f90 | 1 + src/data_projection_access_routines.f90 | 1 + src/data_projection_routines.f90 | 58 +- src/distributed_matrix_vector.f90 | 59 +- src/distributed_matrix_vector_access.f90 | 1 + src/domain_mappings.f90 | 331 +- src/electrophysiology_cell_routines.f90 | 9 +- src/equations_access_routines.f90 | 1 + src/equations_mapping_access_routines.f90 | 1 + src/equations_matrices_access_routines.f90 | 1 + src/equations_set_access_routines.f90 | 1 + src/equations_set_routines.f90 | 20 +- src/field_IO_routines.f90 | 96 +- src/field_access_routines.f90 | 1 + src/field_routines.f90 | 41 +- src/fieldml_input_routines.f90 | 37 +- src/fieldml_output_routines.f90 | 15 +- src/finite_elasticity_routines.f90 | 35 +- src/fluid_mechanics_IO_routines.f90 | 18 +- src/generated_mesh_access_routines.f90 | 1 + src/generated_mesh_routines.f90 | 11 +- src/interface_access_routines.f90 | 1 + src/interface_condition_access_routines.f90 | 1 + src/interface_equations_access_routines.f90 | 1 + src/mesh_access_routines.f90 | 1 + src/mesh_routines.f90 | 137 +- src/opencmiss_iron.f90 | 1787 ++-- src/problem_access_routines.f90 | 58 +- src/problem_routines.f90 | 145 +- src/profiling_routines.f90 | 3 +- src/reaction_diffusion_IO_routines.f90 | 13 +- src/reaction_diffusion_equation_routines.f90 | 14 +- src/region_access_routines.f90 | 61 +- src/region_routines.f90 | 364 +- src/solver_access_routines.f90 | 1 + src/solver_mapping_access_routines.f90 | 1 + src/solver_mapping_routines.f90 | 37 +- src/solver_matrices_access_routines.f90 | 1 + src/solver_routines.f90 | 57 +- src/types.f90 | 7611 ++++++++++-------- 57 files changed, 7377 insertions(+), 6443 deletions(-) diff --git a/cmake/Sources.cmake b/cmake/Sources.cmake index be248f44..82d9c837 100644 --- a/cmake/Sources.cmake +++ b/cmake/Sources.cmake @@ -39,6 +39,8 @@ set(IRON_Fortran_SRC computation_routines.f90 computation_access_routines.f90 constants.f90 + context_routines.f90 + context_access_routines.f90 control_loop_routines.f90 control_loop_access_routines.f90 coordinate_routines.f90 diff --git a/src/Darcy_equations_routines.f90 b/src/Darcy_equations_routines.f90 index 73109680..20f1351a 100755 --- a/src/Darcy_equations_routines.f90 +++ b/src/Darcy_equations_routines.f90 @@ -7205,6 +7205,7 @@ SUBROUTINE DARCY_EQUATION_MONITOR_CONVERGENCE(CONTROL_LOOP,SOLVER,err,error,*) TYPE(VARYING_STRING) :: localError CHARACTER(25) :: FILENAME TYPE(VARYING_STRING) :: FILEPATH + TYPE(WorkGroupType), POINTER :: workGroup REAL(DP), POINTER :: ITERATION_VALUES_N(:),ITERATION_VALUES_N1(:) REAL(DP) :: RESIDUAL_NORM @@ -7227,7 +7228,10 @@ SUBROUTINE DARCY_EQUATION_MONITOR_CONVERGENCE(CONTROL_LOOP,SOLVER,err,error,*) NULLIFY(vectorMapping) NULLIFY(FIELD_VARIABLE) - CALL ComputationEnvironment_WorldNodeNumberGet(computationEnvironment,COMPUTATION_NODE_NUMBER,err,error,*999) + NULLIFY(workGroup) + CALL Solver_WorkGroupGet(solver,workGroup,err,error,*999) + + CALL WorkGroup_GroupNodeNumberGet(workGroup,COMPUTATION_NODE_NUMBER,err,error,*999) WRITE(FILENAME,'("Darcy_",I3.3,".conv")') COMPUTATION_NODE_NUMBER FILEPATH = "./output/"//FILENAME OPEN(UNIT=23, FILE=CHAR(FILEPATH),STATUS='unknown',ACCESS='append') diff --git a/src/Navier_Stokes_equations_routines.f90 b/src/Navier_Stokes_equations_routines.f90 index 1f5444bf..ba95b510 100644 --- a/src/Navier_Stokes_equations_routines.f90 +++ b/src/Navier_Stokes_equations_routines.f90 @@ -6998,6 +6998,7 @@ SUBROUTINE NavierStokes_PreSolveUpdateBoundaryConditions(SOLVER,err,error,*) TYPE(SOLVER_TYPE), POINTER :: Solver2 TYPE(SOLVERS_TYPE), POINTER :: SOLVERS TYPE(VARYING_STRING) :: localError + TYPE(WorkGroupType), POINTER :: workGroup INTEGER(INTG) :: nodeIdx,derivativeIdx,versionIdx,variableIdx,numberOfSourceTimesteps,timeIdx,componentIdx INTEGER(INTG) :: NUMBER_OF_DIMENSIONS,BOUNDARY_CONDITION_CHECK_VARIABLE,GLOBAL_DERIV_INDEX,node_idx,variable_type INTEGER(INTG) :: variable_idx,local_ny,ANALYTIC_FUNCTION_TYPE,component_idx,deriv_idx,dim_idx,version_idx @@ -7769,8 +7770,9 @@ SUBROUTINE NavierStokes_PreSolveUpdateBoundaryConditions(SOLVER,err,error,*) INQUIRE(FILE=inputFile, EXIST=importDataFromFile) IF(importDataFromFile) THEN !Read fitted data from input file (if exists) - CALL ComputationEnvironment_WorldNodeNumberGet(computationEnvironment,computationNode, & - & err,error,*999) + NULLIFY(workGroup) + CALL Solver_WorkGroupGet(solver,workGroup,err,error,*999) + CALL WorkGroup_GroupNodeNumberGet(workGroup,computationNode,err,error,*999) IF(computationNode==0) THEN CALL WRITE_STRING(GENERAL_OUTPUT_TYPE,"Updating independent field and boundary nodes from " & & //inputFile,ERR,ERROR,*999) @@ -12505,14 +12507,15 @@ SUBROUTINE NavierStokes_CalculateBoundaryFlux(equationsSet,coupledEquationsSet,i TYPE(FIELD_TYPE), POINTER :: dependentField1D TYPE(FIELD_TYPE), POINTER :: independentField1D TYPE(EquationsMatricesRHSType), POINTER :: rhsVector + TYPE(WorkGroupType), POINTER :: workGroup INTEGER(INTG) :: faceIdx, faceNumber,elementIdx,nodeNumber,versionNumber INTEGER(INTG) :: componentIdx,gaussIdx INTEGER(INTG) :: faceNodeIdx, elementNodeIdx INTEGER(INTG) :: faceNodeDerivativeIdx, meshComponentNumber INTEGER(INTG) :: normalComponentIdx INTEGER(INTG) :: boundaryID,numberOfBoundaries,boundaryType,coupledNodeNumber,numberOfGlobalBoundaries - INTEGER(INTG) :: MPI_IERROR,numberOfWorldComputationNodes - INTEGER(INTG) :: i,j,computationNode,worldCommunicator + INTEGER(INTG) :: MPI_IERROR,numberOfGroupComputationNodes + INTEGER(INTG) :: i,j,computationNode,groupCommunicator REAL(DP) :: gaussWeight, normalProjection,elementNormal(3) REAL(DP) :: normalDifference,normalTolerance REAL(DP) :: courant,maxCourant,toleranceCourant @@ -12832,21 +12835,24 @@ SUBROUTINE NavierStokes_CalculateBoundaryFlux(equationsSet,coupledEquationsSet,i globalBoundaryArea = 0.0_DP globalBoundaryPressure = 0.0_DP globalBoundaryNormalStress = 0.0_DP - CALL ComputationEnvironment_NumberOfWorldNodesGet(computationEnvironment,numberOfWorldComputationNodes,err,error,*999) - CALL ComputationEnvironment_WorldCommunicatorGet(computationEnvironment,worldCommunicator,err,error,*999) - IF(numberOfWorldComputationNodes>1) THEN !use mpi - CALL MPI_ALLREDUCE(localBoundaryFlux,globalBoundaryFlux,10,MPI_DOUBLE_PRECISION,MPI_SUM,worldCommunicator,MPI_IERROR) + NULLIFY(workGroup) + CALL Decomposition_WorkGroupGet(decomposition3D,workGroup,err,error,*999) + CALL WorkGroup_GroupCommunicatorGet(workGroup,groupCommunicator,err,error,*999) + CALL WorkGroup_NumberOfGroupNodesGet(workGroup,numberOfGroupComputationNodes,err,error,*999) + CALL WorkGroup_GroupNodeNumberGet(workGroup,computationNode,err,error,*999) + IF(numberOfGroupComputationNodes>1) THEN !use mpi + CALL MPI_ALLREDUCE(localBoundaryFlux,globalBoundaryFlux,10,MPI_DOUBLE_PRECISION,MPI_SUM,groupCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ALLREDUCE",MPI_IERROR,err,error,*999) - CALL MPI_ALLREDUCE(localBoundaryArea,globalBoundaryArea,10,MPI_DOUBLE_PRECISION,MPI_SUM,worldCommunicator,MPI_IERROR) + CALL MPI_ALLREDUCE(localBoundaryArea,globalBoundaryArea,10,MPI_DOUBLE_PRECISION,MPI_SUM,groupCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ALLREDUCE",MPI_IERROR,ERR,ERROR,*999) CALL MPI_ALLREDUCE(localBoundaryNormalStress,globalBoundaryNormalStress,10,MPI_DOUBLE_PRECISION,MPI_SUM, & - & worldCommunicator,MPI_IERROR) + & groupCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ALLREDUCE",MPI_IERROR,ERR,ERROR,*999) CALL MPI_ALLREDUCE(localBoundaryPressure,globalBoundaryPressure,10,MPI_DOUBLE_PRECISION,MPI_SUM, & - & worldCommunicator,MPI_IERROR) + & groupCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ALLREDUCE",MPI_IERROR,ERR,ERROR,*999) CALL MPI_ALLREDUCE(numberOfBoundaries,numberOfGlobalBoundaries,1,MPI_INTEGER,MPI_MAX, & - & worldCommunicator,MPI_IERROR) + & groupCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ALLREDUCE",MPI_IERROR,ERR,ERROR,*999) ELSE numberOfGlobalBoundaries = numberOfBoundaries @@ -12864,7 +12870,6 @@ SUBROUTINE NavierStokes_CalculateBoundaryFlux(equationsSet,coupledEquationsSet,i END DO DO boundaryID=2,numberOfGlobalBoundaries IF(globalBoundaryArea(boundaryID) > ZERO_TOLERANCE) THEN - CALL ComputationEnvironment_WorldNodeNumberGet(computationEnvironment,computationNode,err,error,*999) IF(computationNode==0) THEN CALL WriteStringTwoValue(DIAGNOSTIC_OUTPUT_TYPE,"3D boundary ",boundaryID," flow: ", & & globalBoundaryFlux(boundaryID),err,error,*999) @@ -13129,10 +13134,10 @@ SUBROUTINE NavierStokes_CalculateBoundaryFlux(equationsSet,coupledEquationsSet,i END DO !elementIdx !allocate array for mpi communication - IF(numberOfWorldComputationNodes>1) THEN !use mpi - ALLOCATE(globalConverged(numberOfWorldComputationNodes),STAT=ERR) + IF(numberOfGroupComputationNodes>1) THEN !use mpi + ALLOCATE(globalConverged(numberOfGroupComputationNodes),STAT=ERR) IF(ERR/=0) CALL FlagError("Could not allocate global convergence check array.",ERR,ERROR,*999) - CALL MPI_ALLGATHER(convergedFlag,1,MPI_LOGICAL,globalConverged,1,MPI_LOGICAL,worldCommunicator,MPI_IERROR) + CALL MPI_ALLGATHER(convergedFlag,1,MPI_LOGICAL,globalConverged,1,MPI_LOGICAL,groupCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ALLGATHER",MPI_IERROR,ERR,ERROR,*999) IF(ALL(globalConverged)) THEN convergedFlag = .TRUE. @@ -13186,6 +13191,7 @@ SUBROUTINE NavierStokes_Couple1D0D(controlLoop,solver,err,error,*) TYPE(VARYING_STRING), INTENT(OUT) :: error !Local Variables TYPE(CONTROL_LOOP_WHILE_TYPE), POINTER :: iterativeLoop + TYPE(DECOMPOSITION_TYPE), POINTER :: decomposition TYPE(EquationsType), POINTER :: equations TYPE(EquationsMappingVectorType), POINTER :: vectorMapping TYPE(EquationsMappingDynamicType), POINTER :: dynamicMapping @@ -13200,9 +13206,10 @@ SUBROUTINE NavierStokes_Couple1D0D(controlLoop,solver,err,error,*) TYPE(BOUNDARY_CONDITIONS_TYPE), POINTER :: boundaryConditions TYPE(BOUNDARY_CONDITIONS_VARIABLE_TYPE), POINTER :: boundaryConditionsVariable TYPE(VARYING_STRING) :: localError + TYPE(WorkGroupType), POINTER :: workGroup INTEGER(INTG) :: nodeNumber,nodeIdx,derivativeIdx,versionIdx,componentIdx,numberOfLocalNodes1D INTEGER(INTG) :: solver1dNavierStokesNumber,solverNumber,MPI_IERROR,timestep,iteration - INTEGER(INTG) :: boundaryNumber,numberOfBoundaries,numberOfWorldComputationNodes,worldCommunicator + INTEGER(INTG) :: boundaryNumber,numberOfBoundaries,numberOfGroupComputationNodes,groupCommunicator INTEGER(INTG) :: dependentDof,boundaryConditionType REAL(DP) :: A0_PARAM,E_PARAM,H_PARAM,beta,pCellML,normalWave(2) REAL(DP) :: qPrevious,pPrevious,aPrevious,q1d,a1d,qError,aError,couplingTolerance @@ -13296,7 +13303,9 @@ SUBROUTINE NavierStokes_Couple1D0D(controlLoop,solver,err,error,*) END IF !Get the number of local nodes - domainNodes=>dependentField%DECOMPOSITION%DOMAIN(dependentField%DECOMPOSITION%MESH_COMPONENT_NUMBER)%ptr% & + NULLIFY(decomposition) + CALL Field_DecompositionGet(dependentField,decomposition,err,error,*999) + domainNodes=>decomposition%DOMAIN(dependentField%DECOMPOSITION%MESH_COMPONENT_NUMBER)%ptr% & & TOPOLOGY%NODES IF(ASSOCIATED(domainNodes)) THEN numberOfLocalNodes1D=domainNodes%NUMBER_OF_NODES @@ -13424,13 +13433,15 @@ SUBROUTINE NavierStokes_Couple1D0D(controlLoop,solver,err,error,*) localConverged = .FALSE. END IF ! Need to check that boundaries have converged globally (on all domains) if this is a parallel problem - CALL ComputationEnvironment_NumberOfWorldNodesGet(computationEnvironment,numberOfWorldComputationNodes,err,error,*999) - CALL ComputationEnvironment_WorldCommunicatorGet(computationEnvironment,worldCommunicator,err,error,*999) - IF(numberOfWorldComputationNodes>1) THEN !use mpi + NULLIFY(workGroup) + CALL Decomposition_WorkGroupGet(decomposition,workGroup,err,error,*999) + CALL WorkGroup_GroupCommunicatorGet(workGroup,groupCommunicator,err,error,*999) + CALL WorkGroup_NumberOfGroupNodesGet(workGroup,numberOfGroupComputationNodes,err,error,*999) + IF(numberOfGroupComputationNodes>1) THEN !use mpi !allocate array for mpi communication - ALLOCATE(globalConverged(numberOfWorldComputationNodes),STAT=ERR) + ALLOCATE(globalConverged(numberOfGroupComputationNodes),STAT=ERR) IF(ERR/=0) CALL FlagError("Could not allocate global convergence check array.",ERR,ERROR,*999) - CALL MPI_ALLGATHER(localConverged,1,MPI_LOGICAL,globalConverged,1,MPI_LOGICAL,worldCommunicator,MPI_IERROR) + CALL MPI_ALLGATHER(localConverged,1,MPI_LOGICAL,globalConverged,1,MPI_LOGICAL,groupCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ALLGATHER",MPI_IERROR,err,error,*999) IF(ALL(globalConverged)) THEN !CALL WRITE_STRING_VALUE(DIAGNOSTIC_OUTPUT_TYPE,"1D/0D coupling converged; # iterations: ", & @@ -13481,6 +13492,7 @@ SUBROUTINE NavierStokes_Couple3D1D(controlLoop,err,error,*) TYPE(CONTROL_LOOP_WHILE_TYPE), POINTER :: iterativeLoop TYPE(BOUNDARY_CONDITIONS_TYPE), POINTER :: boundaryConditions TYPE(BOUNDARY_CONDITIONS_VARIABLE_TYPE), POINTER :: boundaryConditionsVariable + TYPE(DECOMPOSITION_TYPE), POINTER :: decomposition TYPE(EQUATIONS_SET_TYPE), POINTER :: equationsSet1D,equationsSet3D TYPE(EquationsType), POINTER :: equations1D,equations3D TYPE(EquationsMappingVectorType), POINTER :: vectorMapping1D,vectorMapping3D @@ -13491,10 +13503,11 @@ SUBROUTINE NavierStokes_Couple3D1D(controlLoop,err,error,*) TYPE(FIELD_VARIABLE_TYPE), POINTER :: fieldVariable TYPE(DOMAIN_NODES_TYPE), POINTER :: domainNodes TYPE(VARYING_STRING) :: localError + TYPE(WorkGroupType), POINTER :: workGroup INTEGER(INTG) :: nodeNumber,nodeIdx,derivativeIdx,versionIdx,componentIdx,numberOfLocalNodes1D INTEGER(INTG) :: solver1dNavierStokesNumber,MPI_IERROR,timestep,iteration - INTEGER(INTG) :: boundaryNumber,boundaryType1D,numberOfBoundaries,numberOfWorldComputationNodes - INTEGER(INTG) :: solver3dNavierStokesNumber,userNodeNumber,localDof,globalDof,computationNode,worldCommunicator + INTEGER(INTG) :: boundaryNumber,boundaryType1D,numberOfBoundaries,numberOfGroupComputationNodes + INTEGER(INTG) :: solver3dNavierStokesNumber,userNodeNumber,localDof,globalDof,computationNode,groupCommunicator REAL(DP) :: normalWave(2) REAL(DP) :: flow1D,stress1D,flow1DPrevious,stress1DPrevious,flow3D,stress3D,flowError,stressError REAL(DP) :: maxStressError,maxFlowError,flowTolerance,stressTolerance,absoluteCouplingTolerance @@ -13587,7 +13600,9 @@ SUBROUTINE NavierStokes_Couple3D1D(controlLoop,err,error,*) !Get the number of local nodes - domainNodes=>dependentField1D%DECOMPOSITION%DOMAIN(dependentField1D%DECOMPOSITION%MESH_COMPONENT_NUMBER)%PTR% & + NULLIFY(decomposition) + CALL Field_DecompositionGet(dependentField1D,decomposition,err,error,*999) + domainNodes=>decomposition%DOMAIN(dependentField1D%DECOMPOSITION%MESH_COMPONENT_NUMBER)%PTR% & & TOPOLOGY%NODES IF(ASSOCIATED(domainNodes)) THEN numberOfLocalNodes1D=domainNodes%NUMBER_OF_NODES @@ -13713,20 +13728,20 @@ SUBROUTINE NavierStokes_Couple3D1D(controlLoop,err,error,*) localConverged = .TRUE. END IF ! Need to check that boundaries have converged globally (on all domains) if this is a MPI problem - CALL ComputationEnvironment_NumberOfWorldNodesGet(computationEnvironment,numberOfWorldComputationNodes,err,error,*999) - CALL ComputationEnvironment_WorldCommunicatorGet(computationEnvironment,worldCommunicator,err,error,*999) - IF(numberOfWorldComputationNodes>1) THEN !use mpi + CALL WorkGroup_GroupCommunicatorGet(workGroup,groupCommunicator,err,error,*999) + CALL WorkGroup_NumberOfGroupNodesGet(workGroup,numberOfGroupComputationNodes,err,error,*999) + CALL WorkGroup_GroupNodeNumberGet(workGroup,computationNode,err,error,*999) + IF(numberOfGroupComputationNodes>1) THEN !use mpi !allocate array for mpi communication IF(ERR/=0) CALL FlagError("Could not allocate global convergence check array.",ERR,ERROR,*999) - CALL MPI_ALLREDUCE(localConverged,globalConverged,1,MPI_LOGICAL,MPI_LAND,worldCommunicator,MPI_IERROR) + CALL MPI_ALLREDUCE(localConverged,globalConverged,1,MPI_LOGICAL,MPI_LAND,groupCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ALLREDUCE",MPI_IERROR,ERR,ERROR,*999) IF(globalConverged) THEN CALL WRITE_STRING_VALUE(DIAGNOSTIC_OUTPUT_TYPE,"3D/1D coupling converged; # iterations: ", & & iteration,err,error,*999) iterativeLoop%CONTINUE_LOOP=.FALSE. ELSE - CALL ComputationEnvironment_WorldNodeNumberGet(computationEnvironment,computationNode,err,error,*999) CALL WriteStringTwoValue(DIAGNOSTIC_OUTPUT_TYPE,"Rank ",computationNode," 3D/1D max flow error: ", & & maxFlowError,err,error,*999) CALL WriteStringTwoValue(DIAGNOSTIC_OUTPUT_TYPE,"Rank ",computationNode," 3D/1D max stress error: ", & @@ -13785,6 +13800,7 @@ SUBROUTINE NavierStokes_CoupleCharacteristics(controlLoop,solver,err,error,*) TYPE(VARYING_STRING), INTENT(OUT) :: error !Local Variables TYPE(CONTROL_LOOP_WHILE_TYPE), POINTER :: iterativeLoop + TYPE(DECOMPOSITION_TYPE), POINTER :: decomposition TYPE(DOMAIN_NODES_TYPE), POINTER :: domainNodes TYPE(EQUATIONS_SET_TYPE), POINTER :: equationsSet TYPE(FIELD_TYPE), POINTER :: dependentField,independentField,materialsField @@ -13792,10 +13808,11 @@ SUBROUTINE NavierStokes_CoupleCharacteristics(controlLoop,solver,err,error,*) TYPE(SOLVER_MAPPING_TYPE), POINTER :: solverMapping TYPE(SOLVER_TYPE), POINTER :: solver1DNavierStokes TYPE(VARYING_STRING) :: localError + TYPE(WorkGroupType), POINTER :: workGroup INTEGER(INTG) :: nodeNumber,nodeIdx,derivativeIdx,versionIdx,componentIdx,i INTEGER(INTG) :: solver1dNavierStokesNumber,solverNumber - INTEGER(INTG) :: branchNumber,numberOfBranches,numberOfWorldComputationNodes,numberOfVersions - INTEGER(INTG) :: MPI_IERROR,timestep,iteration,outputIteration,worldCommunicator + INTEGER(INTG) :: branchNumber,numberOfBranches,numberOfGroupComputationNodes,numberOfVersions + INTEGER(INTG) :: MPI_IERROR,timestep,iteration,outputIteration,groupCommunicator REAL(DP) :: couplingTolerance,l2ErrorW(30),wPrevious(2,7),wNavierStokes(2,7),wCharacteristic(2,7),wError(2,7) REAL(DP) :: l2ErrorQ(100),qCharacteristic(7),qNavierStokes(7),wNext(2,7) REAL(DP) :: totalErrorWPrevious,startTime,stopTime,currentTime,timeIncrement @@ -13866,8 +13883,11 @@ SUBROUTINE NavierStokes_CoupleCharacteristics(controlLoop,solver,err,error,*) CALL FlagError("Control Loop is not associated.",err,error,*999) END IF + NULLIFY(decomposition) + CALL Field_DecompositionGet(dependentField,decomposition,err,error,*999) + !Get the number of local nodes - domainNodes=>dependentField%DECOMPOSITION%DOMAIN(dependentField%DECOMPOSITION%MESH_COMPONENT_NUMBER)%ptr% & + domainNodes=>decomposition%DOMAIN(dependentField%DECOMPOSITION%MESH_COMPONENT_NUMBER)%ptr% & & TOPOLOGY%NODES branchNumber = 0 branchConverged = .TRUE. @@ -14007,13 +14027,15 @@ SUBROUTINE NavierStokes_CoupleCharacteristics(controlLoop,solver,err,error,*) localConverged = .FALSE. END IF ! Need to check that boundaries have converged globally (on all domains) if this is a parallel problem - CALL ComputationEnvironment_NumberOfWorldNodesGet(computationEnvironment,numberOfWorldComputationNodes,err,error,*999) - CALL ComputationEnvironment_WorldCommunicatorGet(computationEnvironment,worldCommunicator,err,error,*999) - IF(numberOfWorldComputationNodes>1) THEN !use mpi + NULLIFY(workGroup) + CALL Decomposition_WorkGroupGet(decomposition,workGroup,err,error,*999) + CALL WorkGroup_GroupCommunicatorGet(workGroup,groupCommunicator,err,error,*999) + CALL WorkGroup_NumberOfGroupNodesGet(workGroup,numberOfGroupComputationNodes,err,error,*999) + IF(numberOfGroupComputationNodes>1) THEN !use mpi !allocate array for mpi communication - ALLOCATE(globalConverged(numberOfWorldComputationNodes),STAT=ERR) + ALLOCATE(globalConverged(numberOfGroupComputationNodes),STAT=ERR) IF(ERR/=0) CALL FlagError("Could not allocate global convergence check array.",ERR,ERROR,*999) - CALL MPI_ALLGATHER(localConverged,1,MPI_LOGICAL,globalConverged,1,MPI_LOGICAL,worldCommunicator,MPI_IERROR) + CALL MPI_ALLGATHER(localConverged,1,MPI_LOGICAL,globalConverged,1,MPI_LOGICAL,groupCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ALLGATHER",MPI_IERROR,err,error,*999) IF(ALL(globalConverged)) THEN !CALL WRITE_STRING_VALUE(DIAGNOSTIC_OUTPUT_TYPE,"Navier-Stokes/Characteristic converged; # iterations: ", & @@ -14971,8 +14993,8 @@ SUBROUTINE NavierStokes_CalculateBoundaryFlux3D0D(equationsSet,err,error,*) INTEGER(INTG) :: faceNodeIdx, elementNodeIdx INTEGER(INTG) :: faceNodeDerivativeIdx, meshComponentNumber INTEGER(INTG) :: boundaryID,numberOfBoundaries,boundaryType,coupledNodeNumber,numberOfGlobalBoundaries - INTEGER(INTG) :: MPI_IERROR,numberOfWorldComputationNodes - INTEGER(INTG) :: computationNode,xiDirection(3),orientation,worldCommunicator + INTEGER(INTG) :: MPI_IERROR,numberOfGroupComputationNodes + INTEGER(INTG) :: computationNode,xiDirection(3),orientation,groupCommunicator REAL(DP) :: gaussWeight, elementNormal(3) REAL(DP) :: normalDifference,normalTolerance REAL(DP) :: courant,maxCourant,toleranceCourant,boundaryValueTemp @@ -14986,6 +15008,7 @@ SUBROUTINE NavierStokes_CalculateBoundaryFlux3D0D(equationsSet,err,error,*) LOGICAL :: convergedFlag !1) THEN !use mpi + NULLIFY(workGroup) + CALL Decomposition_WorkGroupGet(decomposition3D,workGroup,err,error,*999) + CALL WorkGroup_GroupCommunicatorGet(workGroup,groupCommunicator,err,error,*999) + CALL WorkGroup_NumberOfGroupNodesGet(workGroup,numberOfGroupComputationNodes,err,error,*999) + CALL WorkGroup_GroupNodeNumberGet(workGroup,computationNode,err,error,*999) + IF(numberOfGroupComputationNodes>1) THEN !use mpi CALL MPI_ALLREDUCE(localBoundaryFlux,globalBoundaryFlux,10,MPI_DOUBLE_PRECISION,MPI_SUM, & - & worldCommunicator,MPI_IERROR) + & groupCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ALLREDUCE",MPI_IERROR,ERR,ERROR,*999) CALL MPI_ALLREDUCE(localBoundaryArea,globalBoundaryArea,10,MPI_DOUBLE_PRECISION,MPI_SUM, & - & worldCommunicator,MPI_IERROR) + & groupCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ALLREDUCE",MPI_IERROR,ERR,ERROR,*999) CALL MPI_ALLREDUCE(localBoundaryPressure,globalBoundaryPressure,10,MPI_DOUBLE_PRECISION,MPI_SUM, & - & worldCommunicator,MPI_IERROR) + & groupCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ALLREDUCE",MPI_IERROR,ERR,ERROR,*999) CALL MPI_ALLREDUCE(numberOfBoundaries,numberOfGlobalBoundaries,1,MPI_INTEGER,MPI_MAX, & - & worldCommunicator,MPI_IERROR) + & groupCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ALLREDUCE",MPI_IERROR,ERR,ERROR,*999) ELSE numberOfGlobalBoundaries = numberOfBoundaries @@ -15233,7 +15259,6 @@ SUBROUTINE NavierStokes_CalculateBoundaryFlux3D0D(equationsSet,err,error,*) END DO DO boundaryID=2,numberOfGlobalBoundaries IF(globalBoundaryArea(boundaryID) > ZERO_TOLERANCE) THEN - CALL ComputationEnvironment_WorldNodeNumberGet(computationEnvironment,computationNode,err,error,*999) IF(computationNode==0) THEN CALL WriteStringTwoValue(DIAGNOSTIC_OUTPUT_TYPE,"3D boundary ",boundaryID," flow: ", & & globalBoundaryFlux(boundaryID),err,error,*999) @@ -15361,10 +15386,10 @@ SUBROUTINE NavierStokes_CalculateBoundaryFlux3D0D(equationsSet,err,error,*) END DO !elementIdx !allocate array for mpi communication - IF(numberOfWorldComputationNodes>1) THEN !use mpi - ALLOCATE(globalConverged(numberOfWorldComputationNodes),STAT=ERR) + IF(numberOfGroupComputationNodes>1) THEN !use mpi + ALLOCATE(globalConverged(numberOfGroupComputationNodes),STAT=ERR) IF(ERR/=0) CALL FlagError("Could not allocate global convergence check array.",ERR,ERROR,*999) - CALL MPI_ALLGATHER(convergedFlag,1,MPI_LOGICAL,globalConverged,1,MPI_LOGICAL,worldCommunicator,MPI_IERROR) + CALL MPI_ALLGATHER(convergedFlag,1,MPI_LOGICAL,globalConverged,1,MPI_LOGICAL,groupCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ALLGATHER",MPI_IERROR,ERR,ERROR,*999) IF(ALL(globalConverged)) THEN convergedFlag = .TRUE. diff --git a/src/analytic_analysis_routines.f90 b/src/analytic_analysis_routines.f90 index 50f5d4e2..971e34f1 100755 --- a/src/analytic_analysis_routines.f90 +++ b/src/analytic_analysis_routines.f90 @@ -122,7 +122,7 @@ SUBROUTINE AnalyticAnalysis_Output(FIELD,FILENAME,ERR,ERROR,*) TYPE(VARYING_STRING), INTENT(OUT) :: ERROR !FIELD%DECOMPOSITION IF(ASSOCIATED(DECOMPOSITION)) THEN - CALL ComputationEnvironment_NumberOfWorldNodesGet(computationEnvironment,numberOfWorldComputationNodes,err,error,*999) - CALL ComputationEnvironment_WorldNodeNumberGet(computationEnvironment,myWorldComputationNodeNumber,err,error,*999) - CALL ComputationEnvironment_WorldCommunicatorGet(computationEnvironment,worldCommunicator,err,error,*999) + NULLIFY(workGroup) + CALL Decomposition_WorkGroupGet(decomposition,workGroup,err,error,*999) + CALL WorkGroup_GroupCommunicatorGet(workGroup,groupCommunicator,err,error,*999) + CALL WorkGroup_NumberOfGroupNodesGet(workGroup,numberOfGroupComputationNodes,err,error,*999) + CALL WorkGroup_GroupNodeNumberGet(workGroup,myGroupComputationNodeNumber,err,error,*999) DECOMPOSITION_TOPOLOGY=>DECOMPOSITION%TOPOLOGY IF(ASSOCIATED(DECOMPOSITION_TOPOLOGY)) THEN IF(LEN_TRIM(FILENAME)>=1) THEN !!TODO \todo have more general ascii file mechanism - IF(numberOfWorldComputationNodes>1) THEN - WRITE(FILE_NAME,'(A,".opanal.",I0)') FILENAME(1:LEN_TRIM(FILENAME)),myWorldComputationNodeNumber + IF(numberOfGroupComputationNodes>1) THEN + WRITE(FILE_NAME,'(A,".opanal.",I0)') FILENAME(1:LEN_TRIM(FILENAME)),myGroupComputationNodeNumber ELSE FILE_NAME=FILENAME(1:LEN_TRIM(FILENAME))//".opanal" ENDIF @@ -274,7 +277,7 @@ SUBROUTINE AnalyticAnalysis_Output(FIELD,FILENAME,ERR,ERROR,*) !Output RMS errors CALL WRITE_STRING(OUTPUT_ID,"",ERR,ERROR,*999) IF(NUMBER(1)>0) THEN - IF(numberOfWorldComputationNodes>1) THEN + IF(numberOfGroupComputationNodes>1) THEN !Local elements only CALL WRITE_STRING(OUTPUT_ID,"Local RMS errors:",ERR,ERROR,*999) LOCAL_STRING= & @@ -297,16 +300,16 @@ SUBROUTINE AnalyticAnalysis_Output(FIELD,FILENAME,ERR,ERROR,*) & ERR,ERROR,*999) !Global RMS values !Collect the values across the ranks - CALL MPI_ALLREDUCE(MPI_IN_PLACE,NUMBER,1,MPI_INTEGER,MPI_SUM,worldCommunicator,MPI_IERROR) + CALL MPI_ALLREDUCE(MPI_IN_PLACE,NUMBER,1,MPI_INTEGER,MPI_SUM,groupCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ALLREDUCE",MPI_IERROR,ERR,ERROR,*999) CALL MPI_ALLREDUCE(MPI_IN_PLACE,RMS_ERROR_PER,1,MPI_DOUBLE_PRECISION,MPI_SUM, & - & worldCommunicator,MPI_IERROR) + & groupCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ALLREDUCE",MPI_IERROR,ERR,ERROR,*999) CALL MPI_ALLREDUCE(MPI_IN_PLACE,RMS_ERROR_ABS,1,MPI_DOUBLE_PRECISION,MPI_SUM, & - & worldCommunicator,MPI_IERROR) + & groupCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ALLREDUCE",MPI_IERROR,ERR,ERROR,*999) CALL MPI_ALLREDUCE(MPI_IN_PLACE,RMS_ERROR_REL,1,MPI_DOUBLE_PRECISION,MPI_SUM, & - & worldCommunicator,MPI_IERROR) + & groupCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ALLREDUCE",MPI_IERROR,ERR,ERROR,*999) CALL WRITE_STRING(OUTPUT_ID,"Global RMS errors:",ERR,ERROR,*999) LOCAL_STRING= & @@ -403,7 +406,7 @@ SUBROUTINE AnalyticAnalysis_Output(FIELD,FILENAME,ERR,ERROR,*) ENDDO !node_idx !Output RMS errors CALL WRITE_STRING(OUTPUT_ID,"",ERR,ERROR,*999) - IF(numberOfWorldComputationNodes>1) THEN + IF(numberOfGroupComputationNodes>1) THEN IF(ANY(NUMBER>0)) THEN !Local nodes only CALL WRITE_STRING(OUTPUT_ID,"Local RMS errors:",ERR,ERROR,*999) @@ -440,16 +443,16 @@ SUBROUTINE AnalyticAnalysis_Output(FIELD,FILENAME,ERR,ERROR,*) ENDDO !deriv_idx !Global RMS values !Collect the values across the ranks - CALL MPI_ALLREDUCE(MPI_IN_PLACE,NUMBER,8,MPI_INTEGER,MPI_SUM,worldCommunicator,MPI_IERROR) + CALL MPI_ALLREDUCE(MPI_IN_PLACE,NUMBER,8,MPI_INTEGER,MPI_SUM,groupCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ALLREDUCE",MPI_IERROR,ERR,ERROR,*999) CALL MPI_ALLREDUCE(MPI_IN_PLACE,RMS_ERROR_PER,8,MPI_DOUBLE_PRECISION,MPI_SUM, & - & worldCommunicator,MPI_IERROR) + & groupCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ALLREDUCE",MPI_IERROR,ERR,ERROR,*999) CALL MPI_ALLREDUCE(MPI_IN_PLACE,RMS_ERROR_ABS,8,MPI_DOUBLE_PRECISION,MPI_SUM, & - & worldCommunicator,MPI_IERROR) + & groupCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ALLREDUCE",MPI_IERROR,ERR,ERROR,*999) CALL MPI_ALLREDUCE(MPI_IN_PLACE,RMS_ERROR_REL,8,MPI_DOUBLE_PRECISION,MPI_SUM, & - & worldCommunicator,MPI_IERROR) + & groupCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ALLREDUCE",MPI_IERROR,ERR,ERROR,*999) CALL WRITE_STRING(OUTPUT_ID,"Global RMS errors:",ERR,ERROR,*999) LOCAL_STRING= & @@ -519,7 +522,7 @@ SUBROUTINE AnalyticAnalysis_Output(FIELD,FILENAME,ERR,ERROR,*) ALLOCATE(GHOST_INTEGRAL_ERRORS(6,FIELD_VARIABLE%NUMBER_OF_COMPONENTS),STAT=ERR) IF(ERR/=0) CALL FlagError("Could not allocate ghost integral errors.",ERR,ERROR,*999) CALL ANALYTIC_ANALYSIS_INTEGRAL_ERRORS(FIELD_VARIABLE,INTEGRAL_ERRORS,GHOST_INTEGRAL_ERRORS,ERR,ERROR,*999) - IF(numberOfWorldComputationNodes>1) THEN + IF(numberOfGroupComputationNodes>1) THEN CALL WRITE_STRING(OUTPUT_ID,"Local Integral errors:",ERR,ERROR,*999) LOCAL_STRING="Component# Numerical Analytic % error Absolute err Relative err" CALL WRITE_STRING(OUTPUT_ID,LOCAL_STRING,ERR,ERROR,*999) @@ -592,7 +595,7 @@ SUBROUTINE AnalyticAnalysis_Output(FIELD,FILENAME,ERR,ERROR,*) ENDDO !component_idx !Collect the values across the ranks CALL MPI_ALLREDUCE(MPI_IN_PLACE,INTEGRAL_ERRORS,6*FIELD_VARIABLE%NUMBER_OF_COMPONENTS,MPI_DOUBLE_PRECISION, & - & MPI_SUM,worldCommunicator,MPI_IERROR) + & MPI_SUM,groupCommunicator,MPI_IERROR) CALL WRITE_STRING(OUTPUT_ID,"Global Integral errors:",ERR,ERROR,*999) LOCAL_STRING="Component# Numerical Analytic % error Absolute err Relative err" CALL WRITE_STRING(OUTPUT_ID,LOCAL_STRING,ERR,ERROR,*999) @@ -1649,19 +1652,25 @@ SUBROUTINE AnalyticAnalysis_RMSErrorGetNode(FIELD,VARIABLE_TYPE,COMPONENT_NUMBER INTEGER(INTG), INTENT(OUT) :: ERR !FIELD%VARIABLE_TYPE_MAP(VARIABLE_TYPE)%PTR%COMPONENTS(COMPONENT_NUMBER)%DOMAIN%TOPOLOGY%NODES IF(ASSOCIATED(NODES_DOMAIN)) THEN NUMBER=0 @@ -1715,7 +1724,7 @@ SUBROUTINE AnalyticAnalysis_RMSErrorGetNode(FIELD,VARIABLE_TYPE,COMPONENT_NUMBER ENDDO !deriv_idx ENDDO !node_idx - IF(numberOfWorldComputationNodes>1) THEN + IF(numberOfGroupComputationNodes>1) THEN IF(ANY(NUMBER>0)) THEN DO deriv_idx=1,8 IF(NUMBER(deriv_idx)>0) THEN @@ -1730,9 +1739,9 @@ SUBROUTINE AnalyticAnalysis_RMSErrorGetNode(FIELD,VARIABLE_TYPE,COMPONENT_NUMBER ENDDO !deriv_idx !Global RMS values !Collect the values across the ranks - CALL MPI_ALLREDUCE(MPI_IN_PLACE,NUMBER,8,MPI_INTEGER,MPI_SUM,worldCommunicator,MPI_IERROR) + CALL MPI_ALLREDUCE(MPI_IN_PLACE,NUMBER,8,MPI_INTEGER,MPI_SUM,groupCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ALLREDUCE",MPI_IERROR,ERR,ERROR,*999) - CALL MPI_ALLREDUCE(MPI_IN_PLACE,RMS_ERROR,8,MPI_DOUBLE_PRECISION,MPI_SUM,worldCommunicator,MPI_IERROR) + CALL MPI_ALLREDUCE(MPI_IN_PLACE,RMS_ERROR,8,MPI_DOUBLE_PRECISION,MPI_SUM,groupCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ALLREDUCE",MPI_IERROR,ERR,ERROR,*999) DO deriv_idx=1,8 IF(NUMBER(deriv_idx)>0) THEN @@ -1783,22 +1792,26 @@ SUBROUTINE AnalyticAnalysis_RMSErrorGetElement(FIELD,VARIABLE_TYPE,COMPONENT_NUM INTEGER(INTG), INTENT(OUT) :: ERR !FIELD%VARIABLE_TYPE_MAP(VARIABLE_TYPE)%PTR%COMPONENTS(COMPONENT_NUMBER)%DOMAIN ELEMENTS_DOMAIN=>DOMAIN%TOPOLOGY%ELEMENTS IF(ASSOCIATED(ELEMENTS_DOMAIN)) THEN @@ -1847,16 +1860,16 @@ SUBROUTINE AnalyticAnalysis_RMSErrorGetElement(FIELD,VARIABLE_TYPE,COMPONENT_NUM GHOST_RMS_ERROR=GHOST_RMS_ERROR+ERROR_VALUE*ERROR_VALUE ENDDO !element_idx IF(NUMBER>0) THEN - IF(numberOfWorldComputationNodes>1) THEN + IF(numberOfGroupComputationNodes>1) THEN !Local elements only LOCAL_RMS=SQRT(RMS_ERROR/NUMBER) !Local and ghost elements LOCAL_GHOST_RMS=SQRT((RMS_ERROR+GHOST_RMS_ERROR)/(NUMBER+GHOST_NUMBER)) !Global RMS values !Collect the values across the ranks - CALL MPI_ALLREDUCE(MPI_IN_PLACE,NUMBER,1,MPI_INTEGER,MPI_SUM,worldCommunicator,MPI_IERROR) + CALL MPI_ALLREDUCE(MPI_IN_PLACE,NUMBER,1,MPI_INTEGER,MPI_SUM,groupCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ALLREDUCE",MPI_IERROR,ERR,ERROR,*999) - CALL MPI_ALLREDUCE(MPI_IN_PLACE,RMS_ERROR,1,MPI_DOUBLE_PRECISION,MPI_SUM,worldCommunicator,MPI_IERROR) + CALL MPI_ALLREDUCE(MPI_IN_PLACE,RMS_ERROR,1,MPI_DOUBLE_PRECISION,MPI_SUM,groupCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ALLREDUCE",MPI_IERROR,ERR,ERROR,*999) GLOBAL_RMS=SQRT(RMS_ERROR/NUMBER) ENDIF diff --git a/src/base_routines.f90 b/src/base_routines.f90 index 7cc45ca0..a1eec5e4 100755 --- a/src/base_routines.f90 +++ b/src/base_routines.f90 @@ -148,7 +148,6 @@ MODULE BaseRoutines INTEGER(INTG), SAVE :: myWorldComputationNodeNumber !Records the entry into the named procedure and initialises the error code \see BaseRoutines::EXITS + !>Records the entry into the named procedure and initialises the error code \see BaseRoutines::Exits SUBROUTINE Enters(name,err,error,*) !Argument variables @@ -418,7 +413,7 @@ END SUBROUTINE Errors !================================================================================================================================ ! - !>Records the exit out of the named procedure \see BaseRoutines::ENTERS + !>Records the exit out of the named procedure \see BaseRoutines::Enters SUBROUTINE Exits(name) !Argument variables @@ -761,11 +756,10 @@ SUBROUTINE BaseRoutines_Finalise(err,error,*) err=0 error="" - !Deallocate the random seeds - IF(ALLOCATED(cmissRandomSeeds)) DEALLOCATE(cmissRandomSeeds) RETURN 999 RETURN 1 + END SUBROUTINE BaseRoutines_Finalise ! @@ -779,7 +773,7 @@ SUBROUTINE BaseRoutines_Initialise(err,error,*) INTEGER(INTG), INTENT(OUT) :: err !Sets diagnositics off. \see BaseRoutines::DiagnosticsSetOn,OpenCMISS::Iron::DiagnosticsSetOn + !>Sets diagnositics off. \see BaseRoutines::DiagnosticsSetOn,OpenCMISS::Iron::cmfe_DiagnosticsSetOn SUBROUTINE DiagnosticsSetOff(err,error,*) !Argument variables @@ -907,7 +893,7 @@ END SUBROUTINE DiagnosticsSetOff !================================================================================================================================ ! - !>Sets diagnositics on. \see BaseRoutines::DiagnosticsSetOff,OpenCMISS::Iron::DiagnosticsSetOff + !>Sets diagnositics on. \see BaseRoutines::DiagnosticsSetOff,OpenCMISS::Iron::cmfe_DiagnosticsSetOff SUBROUTINE DiagnosticsSetOn(diagType,levelList,diagFilename,routineList,err,error,*) !Argument variables @@ -1020,7 +1006,7 @@ END SUBROUTINE DiagnosticsSetOn !================================================================================================================================ ! - !>Sets writes file echo output off. \see BaseRoutines::OutputSetOn,OpenCMISS::Iron::OutputSetOff + !>Sets writes file echo output off. \see BaseRoutines::OutputSetOn,OpenCMISS::Iron::cmfe_OutputSetOff SUBROUTINE OutputSetOff(err,error,*) !Argument variables @@ -1048,7 +1034,7 @@ END SUBROUTINE OutputSetOff !================================================================================================================================ ! - !>Sets writes file echo output on. \see BaseRoutines::OutputSetOff,OpenCMISS::Iron::OutputSetOn + !>Sets writes file echo output on. \see BaseRoutines::OutputSetOff,OpenCMISS::Iron::cmfe_OutputSetOn SUBROUTINE OutputSetOn(echoFilename,err,error,*) !Argument variables @@ -1084,90 +1070,7 @@ END SUBROUTINE OutputSetOn !================================================================================================================================ ! - !>Returns the random seeds for CMISS \see OpenCMISS::Iron::RandomSeedsGet - SUBROUTINE RandomSeedsGet(randomSeeds,err,error,*) - - !Argument variables - INTEGER(INTG), INTENT(OUT) :: randomSeeds(:) !=SIZE(cmissRandomSeeds,1)) THEN - randomSeeds(1:SIZE(cmissRandomSeeds,1))=cmissRandomSeeds(1:SIZE(cmissRandomSeeds,1)) - ELSE - WRITE(localError,'("The size of the supplied random seeds array of ",I2," is too small. The size must be >= ",I2,".")') & - & SIZE(randomSeeds,1),SIZE(cmissRandomSeeds,1) - CALL FlagError(localError,err,error,*999) - ENDIF - - EXITS("RandomSeedsGet") - RETURN -999 ERRORSEXITS("RandomSeedsGet",err,error) - RETURN 1 - - END SUBROUTINE RandomSeedsGet - - ! - !================================================================================================================================ - ! - - !>Returns the size of the random seeds array for CMISS \see OpenCMISS::Iron::RandomSeedsSizeGet - SUBROUTINE RandomSeedsSizeGet(randomSeedsSize,err,error,*) - - !Argument variables - INTEGER(INTG), INTENT(OUT) :: randomSeedsSize !Sets the random seeds for cmiss \see OpenCMISS::Iron::RandomSeedsSet - SUBROUTINE RandomSeedsSet(randomSeeds,err,error,*) - - !Argument variables - INTEGER(INTG), INTENT(IN) :: randomSeeds(:) !SIZE(cmissRandomSeeds,1)) THEN - cmissRandomSeeds(1:SIZE(cmissRandomSeeds,1))=randomSeeds(1:SIZE(cmissRandomSeeds,1)) - ELSE - cmissRandomSeeds(1:SIZE(randomSeeds,1))=randomSeeds(1:SIZE(randomSeeds,1)) - ENDIF - - EXITS("RandomSeedsSet") - RETURN -999 ERRORSEXITS("RandomSeedsSet",err,error) - RETURN 1 - - END SUBROUTINE RandomSeedsSet - - ! - !================================================================================================================================ - ! - - !>Sets timing off. \see BaseRoutines:TimingSetOn,OpenCMISS::Iron::TimingSetOff + !>Sets timing off. \see BaseRoutines:TimingSetOn,OpenCMISS::Iron::cmfe_TimingSetOff SUBROUTINE TimingSetOff(err,error,*) !Argument variables @@ -1213,7 +1116,7 @@ END SUBROUTINE TimingSetOff !================================================================================================================================ ! - !>Sets timing on. \see BaseRoutines:TimingSetOff,OpenCMISS::Iron::TimingSetOn + !>Sets timing on. \see BaseRoutines:TimingSetOff,OpenCMISS::Iron::cmfe_TimingSetOn SUBROUTINE TimingSetOn(timingType,timingSummaryFlag,timingFilename,routineList,err,error,*) !Argument variables @@ -1314,7 +1217,7 @@ END SUBROUTINE TimingSetOn !================================================================================================================================ ! - !>Outputs the timing summary. \see OpenCMISS::Iron::TimingSummaryOutput + !>Outputs the timing summary. \see OpenCMISS::Iron::cmfe_TimingSummaryOutput SUBROUTINE TimingSummaryOutput(err,error,*) !Argument variables diff --git a/src/basis_access_routines.f90 b/src/basis_access_routines.f90 index 337b0020..484789bd 100644 --- a/src/basis_access_routines.f90 +++ b/src/basis_access_routines.f90 @@ -46,6 +46,7 @@ MODULE BasisAccessRoutines USE BaseRoutines USE Kinds + USE ISO_VARYING_STRING USE Strings USE Types @@ -73,8 +74,6 @@ MODULE BasisAccessRoutines !Module variables - TYPE(BASIS_FUNCTIONS_TYPE) :: basisFunctions !Returns the basis functionsfor the basis. + SUBROUTINE Basis_BasisFunctionsGet(basis,basisFunctions,err,error,*) + + !Argument variables + TYPE(BASIS_TYPE), POINTER :: basis !basis%basisFunctions + IF(.NOT.ASSOCIATED(basisFunctions)) THEN + localError="Basis functions is not associated for basis number "// & + & TRIM(NumberToVString(basis%USER_NUMBER,"*",err,error))//"." + CALL FlagError(localError,err,error,*999) + ENDIF + + EXITS("Basis_BasisFunctionsGet") + RETURN +999 NULLIFY(basisFunctions) +998 ERRORSEXITS("Basis_BasisFunctionsGet",err,error) + RETURN 1 + + END SUBROUTINE Basis_BasisFunctionsGet + + ! + !================================================================================================================================ + ! + + !>Returns a pointer to the context for a basis. + SUBROUTINE Basis_ContextGet(basis,context,err,error,*) + + !Argument variables + TYPE(BASIS_TYPE), POINTER :: basis !basis%basisFunctions%context + IF(.NOT.ASSOCIATED(context)) THEN + localError="The context is not associated for the basis functions for basis number "// & + & TRIM(NumberToVString(basis%USER_NUMBER,"*",err,error))//"." + CALL FlagError(localError,err,error,*999) + ENDIF + + EXITS("Basis_ContextGet") + RETURN +999 NULLIFY(context) +998 ERRORSEXITS("Basis_ContextGet",err,error) + RETURN 1 + + END SUBROUTINE Basis_ContextGet + + ! + !================================================================================================================================ + ! + !>Finds and returns a pointer to the basis with the given user number and family number. If no basis with that !>number and family number exists then basis is returned nullified \see BasisAccessRoutines::Basis_UserNumberFind - RECURSIVE SUBROUTINE Basis_FamilyNumberFind(userNumber,familyNumber,basis,err,error,*) + RECURSIVE SUBROUTINE Basis_FamilyNumberFind(basisFunctions,userNumber,familyNumber,basis,err,error,*) !Argument variables + TYPE(BasisFunctionsType), POINTER :: basisFunctions !Finds and returns a pointer to the basis with the given user number. - SUBROUTINE Basis_Get(userNumber,basis,err,error,*) + SUBROUTINE Basis_Get(basisFunctions,userNumber,basis,err,error,*) !Argument variables + TYPE(BasisFunctionsType), POINTER :: basisFunctions !Finds and returns a pointer to a basis with the given user number. If no basis with that number exists basis is left nullified. - SUBROUTINE Basis_UserNumberFind(userNumber,basis,err,error,*) + SUBROUTINE Basis_UserNumberFind(basisFunctions,userNumber,basis,err,error,*) !Argument variables + TYPE(BasisFunctionsType), POINTER :: basisFunctions !@} !!Module types - ! - !!>Contains information on the defined basis functions - !TYPE BASIS_FUNCTIONS_TYPE - ! PRIVATE - ! INTEGER(INTG) :: numberOfBasisFunctions !Sets/changes the collapsed Xi flags for a basis. INTERFACE BASIS_COLLAPSED_XI_SET - MODULE PROCEDURE BASIS_COLLAPSED_XI_SET_NUMBER - MODULE PROCEDURE BASIS_COLLAPSED_XI_SET_PTR + MODULE PROCEDURE Basis_CollapsedXiSet END INTERFACE BASIS_COLLAPSED_XI_SET - !>Sets/changes the collapsed Xi flags for a basis. - INTERFACE Basis_CollapsedXiSet - MODULE PROCEDURE BASIS_COLLAPSED_XI_SET_NUMBER - MODULE PROCEDURE BASIS_COLLAPSED_XI_SET_PTR - END INTERFACE Basis_CollapsedXiSet - INTERFACE BASIS_CREATE_START MODULE PROCEDURE Basis_CreateStart END INTERFACE BASIS_CREATE_START @@ -235,16 +221,9 @@ MODULE BasisRoutines !>Sets/changes the interpolation type in each Xi direction for a basis INTERFACE BASIS_INTERPOLATION_XI_SET - MODULE PROCEDURE BASIS_INTERPOLATION_XI_SET_NUMBER - MODULE PROCEDURE BASIS_INTERPOLATION_XI_SET_PTR + MODULE PROCEDURE Basis_InterpolationXiSet END INTERFACE BASIS_INTERPOLATION_XI_SET - !>Sets/changes the interpolation type in each Xi direction for a basis - INTERFACE Basis_InterpolationXiSet - MODULE PROCEDURE BASIS_INTERPOLATION_XI_SET_NUMBER - MODULE PROCEDURE BASIS_INTERPOLATION_XI_SET_PTR - END INTERFACE Basis_InterpolationXiSet - INTERFACE Basis_NumberOfLocalNodesGet MODULE PROCEDURE BASIS_NUMBER_OF_LOCAL_NODES_GET END INTERFACE Basis_NumberOfLocalNodesGet @@ -279,16 +258,9 @@ MODULE BasisRoutines !>Sets/changes the order of a quadrature for a basis quadrature. INTERFACE BASIS_QUADRATURE_ORDER_SET - MODULE PROCEDURE BASIS_QUADRATURE_ORDER_SET_NUMBER - MODULE PROCEDURE BASIS_QUADRATURE_ORDER_SET_PTR + MODULE PROCEDURE Basis_QuadratureOrderSet END INTERFACE BASIS_QUADRATURE_ORDER_SET - !>Sets/changes the order of a quadrature for a basis quadrature. - INTERFACE Basis_QuadratureOrderSet - MODULE PROCEDURE BASIS_QUADRATURE_ORDER_SET_NUMBER - MODULE PROCEDURE BASIS_QUADRATURE_ORDER_SET_PTR - END INTERFACE Basis_QuadratureOrderSet - INTERFACE Basis_QuadratureSingleGaussXiGet MODULE PROCEDURE BASIS_QUADRATURE_SINGLE_GAUSS_XI_GET END INTERFACE Basis_QuadratureSingleGaussXiGet @@ -299,32 +271,18 @@ MODULE BasisRoutines !>Sets/changes the quadrature type for a basis INTERFACE BASIS_QUADRATURE_TYPE_SET - MODULE PROCEDURE BASIS_QUADRATURE_TYPE_SET_NUMBER - MODULE PROCEDURE BASIS_QUADRATURE_TYPE_SET_PTR + MODULE PROCEDURE Basis_QuadratureTypeSet END INTERFACE BASIS_QUADRATURE_TYPE_SET - !>Sets/changes the quadrature type for a basis - INTERFACE Basis_QuadratureTypeSet - MODULE PROCEDURE BASIS_QUADRATURE_TYPE_SET_NUMBER - MODULE PROCEDURE BASIS_QUADRATURE_TYPE_SET_PTR - END INTERFACE Basis_QuadratureTypeSet - INTERFACE Basis_TypeGet MODULE PROCEDURE BASIS_TYPE_GET END INTERFACE Basis_TypeGet !>Sets/changes the type for a basis. INTERFACE BASIS_TYPE_SET - MODULE PROCEDURE BASIS_TYPE_SET_NUMBER - MODULE PROCEDURE BASIS_TYPE_SET_PTR + MODULE PROCEDURE Basis_TypeSet END INTERFACE BASIS_TYPE_SET - !>Sets/changes the type for a basis. - INTERFACE Basis_TypeSet - MODULE PROCEDURE BASIS_TYPE_SET_NUMBER - MODULE PROCEDURE BASIS_TYPE_SET_PTR - END INTERFACE Basis_TypeSet - !>Evaluates a linear Simplex basis function INTERFACE SIMPLEX_LINEAR_EVALUATE MODULE PROCEDURE SIMPLEX_LINEAR_EVALUATE_DP @@ -422,8 +380,6 @@ MODULE BasisRoutines PUBLIC Basis_Destroy - PUBLIC Bases_Finalise,Bases_Initialise - PUBLIC BASIS_COLLAPSED_XI_GET PUBLIC Basis_CollapsedXiGet @@ -459,59 +415,9 @@ MODULE BasisRoutines PUBLIC Basis_XiToAreaCoordinates -CONTAINS - - ! - !================================================================================================================================ - ! + PUBLIC BasisFunctions_Finalise,BasisFunctions_Initialise - !>Finalises the bases and deallocates all memory - SUBROUTINE Bases_Finalise(err,error,*) - - !Argument variables - INTEGER(INTG), INTENT(OUT) :: err !0) - CALL BASIS_DESTROY(basisFunctions%bases(1)%ptr,err,error,*999) - ENDDO !nb - !Destroy basis functions and deallocated any memory allocated - basisFunctions%numberOfBasisFunctions=0 - IF(ALLOCATED(basisFunctions%bases)) DEALLOCATE(basisFunctions%bases) - - EXITS("Bases_Finalise") - RETURN -999 ERRORSEXITS("Bases_Finalise",err,error) - RETURN 1 - - END SUBROUTINE Bases_Finalise - - ! - !================================================================================================================================ - ! - - !>Initialises the bases. - SUBROUTINE Bases_Initialise(err,error,*) - - !Argument variables - INTEGER(INTG), INTENT(OUT) :: err ! - TYPE: 1 (BASIS_LAGRANGE_HERMITE_TP_TYPE) !> - NUMBER_OF_GAUSS_XI: (2,2,2) !> - GAUSS_ORDER: 0 - SUBROUTINE Basis_CreateStart(userNumber,basis,err,error,*) + SUBROUTINE Basis_CreateStart(basisFunctions,userNumber,basis,err,error,*) !Argument variables + TYPE(BasisFunctionsType), POINTER :: basisFunctions !basisFunctions DO basisIdx=1,basisFunctions%numberOfBasisFunctions newBases(basisIdx)%ptr=>basisFunctions%bases(basisIdx)%ptr ENDDO !basisIdx @@ -860,7 +769,7 @@ SUBROUTINE Basis_CreateStart(userNumber,basis,err,error,*) EXITS("Basis_CreateStart") RETURN -999 IF(ASSOCIATED(newBasis)) CALL BASIS_DESTROY(newBasis,err,error,*998) +999 IF(ASSOCIATED(newBasis)) CALL Basis_Destroy(newBasis,err,error,*998) 998 IF(ALLOCATED(newBases)) DEALLOCATE(newBases) ERRORSEXITS("Basis_CreateStart",err,error) RETURN 1 @@ -872,17 +781,18 @@ END SUBROUTINE Basis_CreateStart ! !>Destroys a basis identified by its basis user number \see BASIS_ROUTINES::BASIS_DESTROY_FAMILY,OpenCMISS::Iron::cmfe_BasisDestroy - RECURSIVE SUBROUTINE BASIS_DESTROY_NUMBER(USER_NUMBER,err,error,*) + RECURSIVE SUBROUTINE BASIS_DESTROY_NUMBER(basisFunctions,userNumber,err,error,*) !Argument variables - INTEGER(INTG), INTENT(IN) :: USER_NUMBER !Destroys a basis. \see BASIS_ROUTINES::BASIS_DESTROY_FAMILY,OpenCMISS::Iron::cmfe_BasisDestroy - RECURSIVE SUBROUTINE BASIS_DESTROY(BASIS,err,error,*) + RECURSIVE SUBROUTINE Basis_Destroy(basis,err,error,*) !Argument variables - TYPE(BASIS_TYPE), POINTER :: BASIS !Destroys a basis identified by its basis user number and family number. Called from the library visible routine BASIS_DESTROY - !> \see BASIS_ROUTINES::BASIS_DESTROY - RECURSIVE SUBROUTINE Basis_FamilyDestroy(userNumber,familyNumber,err,error,*) + !>Destroys a basis identified by its basis user number and family number. Called from the library visible routine Basis_Destroy + !> \see BASIS_ROUTINES::Basis_Destroy + RECURSIVE SUBROUTINE Basis_FamilyDestroy(basisFunctions,userNumber,familyNumber,err,error,*) !Argument variables + TYPE(BasisFunctionsType), POINTER :: basisFunctions !0) - CALL Basis_FamilyDestroy(basis%subBases(1)%ptr%USER_NUMBER,basis%subBases(1)%ptr%FAMILY_NUMBER,err,error,*999) + CALL Basis_FamilyDestroy(basisFunctions,basis%subBases(1)%ptr%USER_NUMBER, & + & basis%subBases(1)%ptr%FAMILY_NUMBER,err,error,*999) ENDDO !Now delete this instance - CALL Basis_FamilyDestroy(userNumber,familyNumber,err,error,*999) + CALL Basis_FamilyDestroy(basisFunctions,userNumber,familyNumber,err,error,*999) ENDIF EXITS("Basis_FamilyDestroy") @@ -2041,6 +1953,7 @@ SUBROUTINE Basis_Initialise(basis,err,error,*) basis%USER_NUMBER=0 basis%GLOBAL_NUMBER=0 basis%FAMILY_NUMBER=0 + NULLIFY(basis%basisFunctions) basis%BASIS_FINISHED=.FALSE. basis%hermite=.FALSE. basis%type=0 @@ -2080,8 +1993,8 @@ FUNCTION BASIS_INTERPOLATE_GAUSS_DP(BASIS,PARTIAL_DERIV_INDEX,QUADRATURE_SCHEME, INTEGER(INTG), INTENT(IN) :: QUADRATURE_SCHEME !Sets/changes the interpolation type in each xi directions where the basis is identified by user number. \see OpenCMISS::Iron::cmfe_BasisInterpolationXiSet - SUBROUTINE BASIS_INTERPOLATION_XI_SET_NUMBER(USER_NUMBER,INTERPOLATION_XI,err,error,*) - - !Argument variables - INTEGER(INTG), INTENT(IN) :: USER_NUMBER !Sets/changes the interpolation type in each xi directions for a basis identified by a pointer. \see OpenCMISS::Iron::cmfe_BasisInterpolationXiSet - SUBROUTINE BASIS_INTERPOLATION_XI_SET_PTR(BASIS,INTERPOLATION_XI,err,error,*) + SUBROUTINE Basis_InterpolationXiSet(BASIS,INTERPOLATION_XI,err,error,*) !Argument variables TYPE(BASIS_TYPE), POINTER :: BASIS !Sets/changes the order of a quadrature for a basis quadrature identified by a user number. - SUBROUTINE BASIS_QUADRATURE_ORDER_SET_NUMBER(USER_NUMBER,ORDER,err,error,*) - - !Argument variables - INTEGER(INTG), INTENT(IN) :: USER_NUMBER !Sets/changes the order of a quadrature for a basis quadrature identified by a pointer. \see OpenCMISS::Iron::cmfe_BasisQuadratureOrderSet - SUBROUTINE BASIS_QUADRATURE_ORDER_SET_PTR(BASIS,ORDER,err,error,*) + SUBROUTINE Basis_QuadratureOrderSet(BASIS,ORDER,err,error,*) !Argument variables TYPE(BASIS_TYPE), POINTER :: BASIS !Sets/changes the quadrature type for a basis quadrature identified by a user number. - SUBROUTINE BASIS_QUADRATURE_TYPE_SET_NUMBER(USER_NUMBER,TYPE,err,error,*) - - !Argument variables - INTEGER(INTG), INTENT(IN) :: USER_NUMBER !Sets/changes the quadrature type on a basis identified by a pointer. - SUBROUTINE BASIS_QUADRATURE_TYPE_SET_PTR(BASIS,TYPE,err,error,*) + SUBROUTINE Basis_QuadratureTypeSet(BASIS,TYPE,err,error,*) !Argument variables TYPE(BASIS_TYPE), POINTER :: BASIS !parentBasis%basisFunctions newSubBasis%parentBasis=>parentBasis newSubBasis%NUMBER_OF_XI=numberOfXi newSubBasis%TYPE=parentBasis%TYPE @@ -6423,8 +6262,8 @@ SUBROUTINE BASIS_TYPE_GET(BASIS,TYPE,err,error,*) !Argument variables TYPE(BASIS_TYPE), POINTER :: BASIS !Sets/changes the type for a basis is identified by a user number. - SUBROUTINE BASIS_TYPE_SET_NUMBER(USER_NUMBER,TYPE,err,error,*) - - !Argument variables - INTEGER(INTG), INTENT(IN) :: USER_NUMBER !Sets/changes the type for a basis is identified by a a pointer. \see OpenCMISS::Iron::cmfe_BasisTypeGet - SUBROUTINE BASIS_TYPE_SET_PTR(BASIS,TYPE,err,error,*) + SUBROUTINE Basis_TypeSet(BASIS,TYPE,err,error,*) !Argument variables TYPE(BASIS_TYPE), POINTER :: BASIS !Sets/changes the collapsed xi flags for a basis is identified by a user number. - SUBROUTINE BASIS_COLLAPSED_XI_SET_NUMBER(USER_NUMBER,COLLAPSED_XI,err,error,*) - - !Argument variables - INTEGER(INTG), INTENT(IN) :: USER_NUMBER !Sets/changes the collapsed xi flags for a basis is identified by a a pointer. \see OpenCMISS::Iron::cmfe_BasisCollapsedXiSet - SUBROUTINE BASIS_COLLAPSED_XI_SET_PTR(BASIS,COLLAPSED_XI,err,error,*) + SUBROUTINE Basis_CollapsedXiSet(BASIS,COLLAPSED_XI,err,error,*) !Argument variables TYPE(BASIS_TYPE), POINTER :: BASIS !Finalises the basis functions for a context and deallocates all memory + SUBROUTINE BasisFunctions_Finalise(basisFunctions,err,error,*) + + !Argument variables + TYPE(BasisFunctionsType), POINTER :: basisFunctions !0) + CALL Basis_Destroy(basisFunctions%bases(1)%ptr,err,error,*999) + ENDDO !nb + !Destroy basis functions and deallocated any memory allocated + IF(ALLOCATED(basisFunctions%bases)) DEALLOCATE(basisFunctions%bases) + DEALLOCATE(basisFunctions) + ENDIF + + EXITS("BasisFunctions_Finalise") + RETURN +999 ERRORSEXITS("BasisFunctions_Finalise",err,error) + RETURN 1 + + END SUBROUTINE BasisFunctions_Finalise + + ! + !================================================================================================================================ + ! + + !>Initialises the basis functions for a context. + SUBROUTINE BasisFunctions_Initialise(context,err,error,*) + + !Argument variables + TYPE(ContextType), POINTER :: context !context + context%basisFunctions%numberOfBasisFunctions=0 + + EXITS("BasisFunctions_Initialise") + RETURN +999 CALL BasisFunctions_Finalise(context%basisFunctions,dummyErr,dummyError,*998) +998 ERRORSEXITS("BasisFunctions_Initialise",err,error) + RETURN 1 + + END SUBROUTINE BasisFunctions_Initialise + + ! + !================================================================================================================================ + ! + END MODULE BasisRoutines diff --git a/src/boundary_condition_routines.f90 b/src/boundary_condition_routines.f90 index 42e47b90..82043d4e 100755 --- a/src/boundary_condition_routines.f90 +++ b/src/boundary_condition_routines.f90 @@ -284,7 +284,7 @@ SUBROUTINE BOUNDARY_CONDITIONS_CREATE_FINISH(BOUNDARY_CONDITIONS,ERR,ERROR,*) INTEGER(INTG) :: MPI_IERROR,SEND_COUNT,STORAGE_TYPE, NUMBER_OF_NON_ZEROS, NUMBER_OF_ROWS,COUNT INTEGER(INTG) :: variable_idx,dof_idx, equ_matrix_idx, dirichlet_idx, row_idx, DUMMY, LAST, DIRICHLET_DOF INTEGER(INTG) :: col_idx,equations_set_idx,parameterSetIdx - INTEGER(INTG) :: pressureIdx,neumannIdx,numberOfWorldComputationNodes,myWorldComputationNodeNumber,worldCommunicator + INTEGER(INTG) :: pressureIdx,neumannIdx,numberOfGroupComputationNodes,myGroupComputationNodeNumber,groupCommunicator INTEGER(INTG), POINTER :: ROW_INDICES(:), COLUMN_INDICES(:) TYPE(BOUNDARY_CONDITIONS_VARIABLE_TYPE), POINTER :: BOUNDARY_CONDITION_VARIABLE TYPE(DOMAIN_MAPPING_TYPE), POINTER :: VARIABLE_DOMAIN_MAPPING @@ -293,6 +293,7 @@ SUBROUTINE BOUNDARY_CONDITIONS_CREATE_FINISH(BOUNDARY_CONDITIONS,ERR,ERROR,*) TYPE(BOUNDARY_CONDITIONS_PRESSURE_INCREMENTED_TYPE), POINTER :: BOUNDARY_CONDITIONS_PRESSURE_INCREMENTED TYPE(VARYING_STRING) :: LOCAL_ERROR TYPE(SOLVER_EQUATIONS_TYPE), POINTER :: SOLVER_EQUATIONS + TYPE(SOLVER_TYPE), POINTER :: solver TYPE(EQUATIONS_SET_TYPE), POINTER :: EQUATIONS_SET TYPE(EquationsType), POINTER :: equations TYPE(EquationsMatricesVectorType), POINTER :: vectorMatrices @@ -304,6 +305,7 @@ SUBROUTINE BOUNDARY_CONDITIONS_CREATE_FINISH(BOUNDARY_CONDITIONS,ERR,ERROR,*) TYPE(LIST_TYPE), POINTER :: SPARSE_INDICES TYPE(LinkedList),POINTER :: LIST(:) INTEGER(INTG), ALLOCATABLE:: COLUMN_ARRAY(:) + TYPE(WorkGroupType), POINTER :: workGroup ENTERS("BOUNDARY_CONDITIONS_CREATE_FINISH",ERR,ERROR,*999) @@ -313,11 +315,14 @@ SUBROUTINE BOUNDARY_CONDITIONS_CREATE_FINISH(BOUNDARY_CONDITIONS,ERR,ERROR,*) IF(BOUNDARY_CONDITIONS%BOUNDARY_CONDITIONS_FINISHED) THEN CALL FlagError("Boundary conditions have already been finished.",ERR,ERROR,*999) ELSE + CALL BoundaryConditions_SolverEquationsGet(BOUNDARY_CONDITIONS,SOLVER_EQUATIONS,err,error,*999) + CALL SolverEquations_SolverGet(SOLVER_EQUATIONS,solver,err,error,*999) IF(ALLOCATED(BOUNDARY_CONDITIONS%BOUNDARY_CONDITIONS_VARIABLES)) THEN - CALL ComputationEnvironment_NumberOfWorldNodesGet(computationEnvironment,numberOfWorldComputationNodes,err,error,*999) - CALL ComputationEnvironment_WorldNodeNumberGet(computationEnvironment,myWorldComputationNodeNumber,err,error,*999) - CALL ComputationEnvironment_WorldCommunicatorGet(computationEnvironment,worldCommunicator,err,error,*999) - IF(numberOfWorldComputationNodes>0) THEN + CALL Solver_WorkGroupGet(solver,workGroup,err,error,*999) + CALL WorkGroup_GroupCommunicatorGet(workGroup,groupCommunicator,err,error,*999) + CALL WorkGroup_NumberOfWorldNodesGet(workGroup,numberOfGroupComputationNodes,err,error,*999) + CALL WorkGroup_WorldNodeNumberGet(workGroup,myGroupComputationNodeNumber,err,error,*999) + IF(numberOfGroupComputationNodes>0) THEN !Transfer all the boundary conditions to all the computation nodes. !\todo Look at this. DO variable_idx=1,BOUNDARY_CONDITIONS%NUMBER_OF_BOUNDARY_CONDITIONS_VARIABLES @@ -328,14 +333,14 @@ SUBROUTINE BOUNDARY_CONDITIONS_CREATE_FINISH(BOUNDARY_CONDITIONS,ERR,ERROR,*) VARIABLE_DOMAIN_MAPPING=>FIELD_VARIABLE%DOMAIN_MAPPING IF(ASSOCIATED(VARIABLE_DOMAIN_MAPPING)) THEN SEND_COUNT=VARIABLE_DOMAIN_MAPPING%NUMBER_OF_GLOBAL - IF(numberOfWorldComputationNodes>1) THEN + IF(numberOfGroupComputationNodes>1) THEN !\todo This operation is a little expensive as we are doing an unnecessary sum across all the ranks in order to combin !\todo the data from each rank into all ranks. We will see how this goes for now. CALL MPI_ALLREDUCE(MPI_IN_PLACE,BOUNDARY_CONDITION_VARIABLE%DOF_TYPES, & - & SEND_COUNT,MPI_INTEGER,MPI_SUM,worldCommunicator,MPI_IERROR) + & SEND_COUNT,MPI_INTEGER,MPI_SUM,groupCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ALLREDUCE",MPI_IERROR,ERR,ERROR,*999) CALL MPI_ALLREDUCE(MPI_IN_PLACE,BOUNDARY_CONDITION_VARIABLE%CONDITION_TYPES, & - & SEND_COUNT,MPI_INTEGER,MPI_SUM,worldCommunicator,MPI_IERROR) + & SEND_COUNT,MPI_INTEGER,MPI_SUM,groupCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ALLREDUCE",MPI_IERROR,ERR,ERROR,*999) ENDIF !mpi_in_place bug workaround - only do this when num comp nodes > 1 @@ -345,24 +350,24 @@ SUBROUTINE BOUNDARY_CONDITIONS_CREATE_FINISH(BOUNDARY_CONDITIONS,ERR,ERROR,*) CALL FlagError(LOCAL_ERROR,ERR,ERROR,*999) ENDIF - IF(numberOfWorldComputationNodes>1) THEN + IF(numberOfGroupComputationNodes>1) THEN ! Update the total number of boundary condition types by summing across all nodes CALL MPI_ALLREDUCE(MPI_IN_PLACE,BOUNDARY_CONDITION_VARIABLE%DOF_COUNTS, & - & MAX_BOUNDARY_CONDITION_NUMBER,MPI_INTEGER,MPI_SUM,worldCommunicator,MPI_IERROR) + & MAX_BOUNDARY_CONDITION_NUMBER,MPI_INTEGER,MPI_SUM,groupCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ALLREDUCE",MPI_IERROR,ERR,ERROR,*999) CALL MPI_ALLREDUCE(MPI_IN_PLACE,BOUNDARY_CONDITION_VARIABLE%NUMBER_OF_DIRICHLET_CONDITIONS, & - & 1,MPI_INTEGER,MPI_SUM,worldCommunicator,MPI_IERROR) + & 1,MPI_INTEGER,MPI_SUM,groupCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ALLREDUCE",MPI_IERROR,ERR,ERROR,*999) ENDIF !mpi_in_place bug workaround - only do this when num comp nodes > 1 ! Check that the boundary conditions set are appropriate for equations sets CALL BoundaryConditions_CheckEquations(BOUNDARY_CONDITION_VARIABLE,ERR,ERROR,*999) - - IF(numberOfWorldComputationNodes>1) THEN + + IF(numberOfGroupComputationNodes>1) THEN !Make sure the required parameter sets are created on all computational nodes and begin updating them CALL MPI_ALLREDUCE(MPI_IN_PLACE,BOUNDARY_CONDITION_VARIABLE%parameterSetRequired, & - & FIELD_NUMBER_OF_SET_TYPES,MPI_LOGICAL,MPI_LOR,worldCommunicator,MPI_IERROR) + & FIELD_NUMBER_OF_SET_TYPES,MPI_LOGICAL,MPI_LOR,groupCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ALLREDUCE",MPI_IERROR,ERR,ERROR,*999) DO parameterSetIdx=1,FIELD_NUMBER_OF_SET_TYPES IF(BOUNDARY_CONDITION_VARIABLE%parameterSetRequired(parameterSetIdx)) THEN @@ -2226,12 +2231,13 @@ SUBROUTINE BoundaryConditions_NeumannMatricesInitialise(boundaryConditionsVariab !Local Variables TYPE(BoundaryConditionsNeumannType), POINTER :: boundaryConditionsNeumann TYPE(FIELD_VARIABLE_TYPE), POINTER :: rhsVariable + TYPE(DECOMPOSITION_TYPE), POINTER :: decomposition TYPE(DOMAIN_MAPPING_TYPE), POINTER :: rowMapping, pointDofMapping TYPE(DOMAIN_TOPOLOGY_TYPE), POINTER :: topology TYPE(DOMAIN_LINE_TYPE), POINTER :: line TYPE(DOMAIN_FACE_TYPE), POINTER :: face TYPE(LIST_TYPE), POINTER :: columnIndicesList, rowColumnIndicesList - INTEGER(INTG) :: myWorldComputationNodeNumber + INTEGER(INTG) :: myGroupComputationNodeNumber INTEGER(INTG) :: numberOfPointDofs, numberNonZeros, numberRowEntries, neumannConditionNumber, localNeumannConditionIdx INTEGER(INTG) :: neumannIdx, globalDof, localDof, localDofNyy, domainIdx, numberOfDomains, domainNumber, componentNumber INTEGER(INTG) :: nodeIdx, derivIdx, nodeNumber, versionNumber, derivativeNumber, columnNodeNumber, lineIdx, faceIdx, columnDof @@ -2239,6 +2245,7 @@ SUBROUTINE BoundaryConditions_NeumannMatricesInitialise(boundaryConditionsVariab REAL(DP) :: pointValue INTEGER(INTG) :: dummyErr TYPE(VARYING_STRING) :: dummyError + TYPE(WorkGroupType), POINTER :: workGroup ENTERS("BoundaryConditions_NeumannMatricesInitialise",err,error,*999) @@ -2258,7 +2265,7 @@ SUBROUTINE BoundaryConditions_NeumannMatricesInitialise(boundaryConditionsVariab ! Create a domain mapping for the Neumann point DOFs, required for the distributed matrix columns ALLOCATE(pointDofMapping,stat=err) IF(err/=0) CALL FlagError("Could not allocate Neumann DOF domain mapping.",err,error,*999) - CALL DOMAIN_MAPPINGS_MAPPING_INITIALISE(pointDofMapping,rowMapping%NUMBER_OF_DOMAINS,err,error,*999) + CALL DomainMappings_MappingInitialise(rowMapping%workGroup,pointDofMapping,err,error,*999) boundaryConditionsNeumann%pointDofMapping=>pointDofMapping ! Calculate global to local mapping for Neumann DOFs pointDofMapping%NUMBER_OF_GLOBAL=numberOfPointDofs @@ -2526,11 +2533,13 @@ SUBROUTINE BoundaryConditions_NeumannMatricesInitialise(boundaryConditionsVariab !Set up vector of Neumann point values CALL DistributedVector_CreateStart(pointDofMapping,boundaryConditionsNeumann%pointValues,err,error,*999) CALL DistributedVector_CreateFinish(boundaryConditionsNeumann%pointValues,err,error,*999) - CALL ComputationEnvironment_WorldNodeNumberGet(computationEnvironment,myWorldComputationNodeNumber,err,error,*999) + CALL Field_DecompositionGet(rhsVariable%field,decomposition,err,error,*999) + CALL Decomposition_WorkGroupGet(decomposition,workGroup,err,error,*999) + CALL WorkGroup_GroupNodeNumberGet(workGroup,myGroupComputationNodeNumber,err,error,*999) !Set point values vector from boundary conditions field parameter set DO neumannIdx=1,numberOfPointDofs globalDof=boundaryConditionsNeumann%setDofs(neumannIdx) - IF(rhsVariable%DOMAIN_MAPPING%GLOBAL_TO_LOCAL_MAP(globalDof)%DOMAIN_NUMBER(1)==myWorldComputationNodeNumber) THEN + IF(rhsVariable%DOMAIN_MAPPING%GLOBAL_TO_LOCAL_MAP(globalDof)%DOMAIN_NUMBER(1)==myGroupComputationNodeNumber) THEN localDof=rhsVariable%DOMAIN_MAPPING%GLOBAL_TO_LOCAL_MAP(globalDof)%LOCAL_NUMBER(1) ! Set point DOF vector value localNeumannConditionIdx=boundaryConditionsNeumann%pointDofMapping%GLOBAL_TO_LOCAL_MAP(neumannIdx)%LOCAL_NUMBER(1) @@ -2652,7 +2661,7 @@ SUBROUTINE BoundaryConditions_NeumannIntegrate(rhsBoundaryConditions,err,error,* TYPE(VARYING_STRING), INTENT(OUT) :: error !Finalises OpenCMISS. \see OpenCMISS::Iron::cmfe_Finalise - SUBROUTINE cmfe_Finalise_(err,error,*) + SUBROUTINE cmfe_Finalise_(context,err,error,*) !Argument variables + TYPE(ContextType), POINTER :: context !Initialises OpenCMISS. \see OpenCMISS::Iron::cmfe_Initialise - SUBROUTINE cmfe_Initialise_(worldRegion,err,error,*) + SUBROUTINE cmfe_Initialise_(newContext,err,error,*) !Argument variables - TYPE(REGION_TYPE), POINTER :: worldRegion !MODELS_FIELD%CELLML IF(ASSOCIATED(CELLML)) THEN - CALL ComputationEnvironment_WorldCommunicatorGet(computationEnvironment,worldCommunicator,err,error,*999) + NULLIFY(decomposition) + CALL Field_DecompositionGet(MODELS_FIELD%MODELS_FIELD,decomposition,err,error,*999) + NULLIFY(workGroup) + CALL Decomposition_WorkGroupGet(decomposition,workGroup,err,error,*999) + CALL WorkGroup_GroupCommunicatorGet(workGroup,groupCommunicator,err,error,*999) !Models field has not been checked before. NULLIFY(MODELS_VARIABLE) CALL Field_VariableGet(MODELS_FIELD%MODELS_FIELD,FIELD_U_VARIABLE_TYPE,MODELS_VARIABLE,ERR,ERROR,*999) @@ -2589,7 +2596,7 @@ SUBROUTINE CELLML_MODELS_FIELD_CHECK(MODELS_FIELD,ERR,ERROR,*) ENDDO !source_dof_idx onlyOneModelIndex=0 CALL MPI_ALLREDUCE(MODELS_FIELD%ONLY_ONE_MODEL_INDEX,onlyOneModelIndex,1,MPI_INTEGER,MPI_MAX, & - & worldCommunicator,mpiIerror) + & groupCommunicator,mpiIerror) CALL MPI_ERROR_CHECK("MPI_ALLREDUCE",mpiIerror,ERR,ERROR,*999) IF(onlyOneModelIndex==0) & & CALL FlagError("Models field does not have any models set.",ERR,ERROR,*999) diff --git a/src/computation_access_routines.f90 b/src/computation_access_routines.f90 index ebb19bde..6a51e6d8 100644 --- a/src/computation_access_routines.f90 +++ b/src/computation_access_routines.f90 @@ -51,6 +51,7 @@ MODULE ComputationAccessRoutines USE MPI #endif USE Strings + USE Types #include "macros.h" @@ -66,71 +67,8 @@ MODULE ComputationAccessRoutines !Module types - !>pointer type to WorkGroupType - TYPE WorkGroupPtrType - TYPE(WorkGroupType), POINTER :: ptr - END TYPE WorkGroupPtrType - - !>Contains information on logical working groups - TYPE WorkGroupType - INTEGER(INTG) :: userNumber !Contains information on a cache heirarchy - TYPE ComputationCacheType - INTEGER(INTG) :: numberOfLevels !Contains information on a computation node containing a number of processors - TYPE ComputationNodeType - INTEGER(INTG) :: numberOfProcessors !Contains information on the MPI type to transfer information about a computation node - TYPE MPIComputationNodeType - INTEGER(INTG) :: mpiType !Contains information on the computation environment the program is running in. - TYPE ComputationEnvironmentType - INTEGER(INTG) :: mpiVersion !Gets the current world communicator. - SUBROUTINE ComputationEnvironment_WorldCommunicatorGet(computationEnviron,worldCommunicator,err,error,*) + SUBROUTINE ComputationEnvironment_WorldCommunicatorGet(computationEnvironment,worldCommunicator,err,error,*) !Argument Variables - TYPE(ComputationEnvironmentType), POINTER, INTENT(IN) :: computationEnviron !Returns the number/rank of the computation node in the world communicator - SUBROUTINE ComputationEnvironment_WorldNodeNumberGet(computationEnviron,worldNodeNumber,err,error,*) + SUBROUTINE ComputationEnvironment_WorldNodeNumberGet(computationEnvironment,worldNodeNumber,err,error,*) !Argument Variables - TYPE(ComputationEnvironmentType), POINTER, INTENT(IN) :: computationEnviron !Gets the number of computation nodes in the world communicator. - SUBROUTINE ComputationEnvironment_NumberOfWorldNodesGet(computationEnviron,numberOfWorldNodes,err,error,*) + SUBROUTINE ComputationEnvironment_NumberOfWorldNodesGet(computationEnvironment,numberOfWorldNodes,err,error,*) !Argument Variables - TYPE(ComputationEnvironmentType), POINTER, INTENT(IN) :: computationEnviron !Gets the world work group from a computational environment. - SUBROUTINE ComputationEnvironment_WorldWorkGroupGet(computationEnviron,worldWorkGroup,err,error,*) + SUBROUTINE ComputationEnvironment_WorldWorkGroupGet(computationEnvironment,worldWorkGroup,err,error,*) !Argument variables - TYPE(ComputationEnvironmentType), POINTER, INTENT(IN) :: computationEnviron !computationEnviron%worldWorkGroup + worldWorkGroup=>computationEnvironment%worldWorkGroup !Check world work group is associated. IF(.NOT.ASSOCIATED(worldWorkGroup)) & & CALL FlagError("World work group is not associated for the computation environment.",err,error,*999) @@ -298,6 +230,81 @@ END SUBROUTINE ComputationEnvironment_WorldWorkGroupGet !================================================================================================================================ ! + !>Returns the computation environment associated with a work group. + SUBROUTINE WorkGroup_ComputationEnvironmentGet(workGroup,computationEnvironment,err,error,*) + + !Argument variables + TYPE(WorkGroupType), POINTER, INTENT(IN) :: workGroup !workGroup%computationEnvironment + IF(.NOT.ASSOCIATED(computationEnvironment)) THEN + localError="The computation environment is not associated for work group number "// & + & TRIM(NumberToVString(workGroup%userNumber,"*",err,error))//"." + CALL FlagError(localError,err,error,*999) + ENDIF + + EXITS("WorkGroup_ComputationEnvironmentGet") + RETURN +999 NULLIFY(computationEnvironment) +998 ERRORSEXITS("WorkGroup_ComputationEnvironmentGet",err,error) + RETURN 1 + + END SUBROUTINE WorkGroup_ComputationEnvironmentGet + + ! + !================================================================================================================================ + ! + + !>Returns a pointer to the context for a work group. + SUBROUTINE WorkGroup_ContextGet(workGroup,context,err,error,*) + + !Argument variables + TYPE(WorkGroupType), POINTER :: workGroup !workGroup%computationEnvironment%context + IF(.NOT.ASSOCIATED(context)) THEN + localError="The context is not associated for the computation environment for work group number "// & + & TRIM(NumberToVString(workGroup%userNumber,"*",err,error))//"." + CALL FlagError(localError,err,error,*999) + ENDIF + + EXITS("WorkGroup_ContextGet") + RETURN +999 NULLIFY(context) +998 ERRORSEXITS("WorkGroup_ContextGet",err,error) + RETURN 1 + + END SUBROUTINE WorkGroup_ContextGet + + ! + !================================================================================================================================ + ! + !>Finds and returns a pointer to the work group with the given user number. SUBROUTINE WorkGroup_Get(computationEnvironment,workGroupUserNumber,workGroup,err,error,*) @@ -312,7 +319,7 @@ SUBROUTINE WorkGroup_Get(computationEnvironment,workGroupUserNumber,workGroup,er ENTERS("WorkGroup_Get",err,error,*999) - CALL WorkGroup_UserNumberFind(workGroupUserNumber,computationEnvironment,workGroup,err,error,*999) + CALL WorkGroup_UserNumberFind(computationEnvironment,workGroupUserNumber,workGroup,err,error,*999) IF(.NOT.ASSOCIATED(workGroup)) THEN localError="A work group with an user number of "//TRIM(NumberToVString(workGroupUserNumber,"*",err,error))// & & " does not exist." @@ -503,11 +510,11 @@ END SUBROUTINE WorkGroup_ParentWorkGroupGet ! !>Finds and returns a pointer to the work group with the given user number. If no work group with that number exists work group is left nullified. - SUBROUTINE WorkGroup_UserNumberFind(userNumber,computationEnvironment,workGroup,err,error,*) + SUBROUTINE WorkGroup_UserNumberFind(computationEnvironment,userNumber,workGroup,err,error,*) !Argument variables + TYPE(ComputationEnvironmentType), POINTER :: computationEnvironment !computationEnvironment%worldWorkGroup IF(.NOT.ASSOCIATED(worldWorkGroup)) CALL FlagError("World work group is not associated.",err,error,*999) @@ -578,7 +587,7 @@ END SUBROUTINE WorkGroup_UserNumberFindPtr !================================================================================================================================ ! - !>Returns the user number for a region. + !>Returns the user number for a work group. SUBROUTINE WorkGroup_UserNumberGet(workGroup,userNumber,err,error,*) !Argument variables diff --git a/src/computation_routines.f90 b/src/computation_routines.f90 index 6375d292..ae327524 100755 --- a/src/computation_routines.f90 +++ b/src/computation_routines.f90 @@ -58,6 +58,7 @@ MODULE ComputationRoutines USE ISO_VARYING_STRING USE Sorting USE Strings + USE Types #include "macros.h" @@ -144,7 +145,7 @@ SUBROUTINE Computation_ComputationNodeInitialise(computationNode,rank,err,error, computationNode%numberOfProcessors=1 computationNode%rank=rank CALL MPI_GET_PROCESSOR_NAME(computationNode%nodeName,computationNode%nodeNameLength,mpiIError) - CALL MPI_ERROR_CHECK("MPI_GET_PROCESSOR_NAME",mpiIError,err,error,*999) + CALL MPI_ErrorCheck("MPI_GET_PROCESSOR_NAME",mpiIError,err,error,*999) EXITS("Computation_ComputationNodeInitialise") RETURN @@ -179,7 +180,7 @@ SUBROUTINE Computation_MPIComputationNodeFinalise(mpiComputationNode,err,error,* IF(mpiComputationNode%mpiType/=MPI_DATATYPE_NULL) THEN CALL MPI_TYPE_FREE(mpiComputationNode%mpiType,mpiIError) - CALL MPI_ERROR_CHECK("MPI_TYPE_FREE",mpiIError,err,error,*999) + CALL MPI_ErrorCheck("MPI_TYPE_FREE",mpiIError,err,error,*999) ENDIF EXITS("Computation_MPIComputationNodeFinalise") @@ -226,18 +227,18 @@ SUBROUTINE Computation_MPIComputationNodeInitialise(computationEnvironment,rank, CALL MPI_GET_ADDRESS(computationEnvironment%computationNodes(rank)%numberOfProcessors, & & computationEnvironment%mpiComputationNode%displacements(1),mpiIError) - CALL MPI_ERROR_CHECK("MPI_GET_ADDRESS",mpiIError,err,error,*999) + CALL MPI_ErrorCheck("MPI_GET_ADDRESS",mpiIError,err,error,*999) CALL MPI_GET_ADDRESS(computationEnvironment%computationNodes(rank)%rank, & & computationEnvironment%mpiComputationNode%displacements(2),mpiIError) - CALL MPI_ERROR_CHECK("MPI_GET_ADDRESS",mpiIError,err,error,*999) + CALL MPI_ErrorCheck("MPI_GET_ADDRESS",mpiIError,err,error,*999) CALL MPI_GET_ADDRESS(computationEnvironment%computationNodes(rank)%nodeNameLength, & & computationEnvironment%mpiComputationNode%displacements(3),mpiIError) - CALL MPI_ERROR_CHECK("MPI_GET_ADDRESS",mpiIError,err,error,*999) + CALL MPI_ErrorCheck("MPI_GET_ADDRESS",mpiIError,err,error,*999) !CPB 19/02/07 AIX compiler complains about the type of the first parameter i.e., the previous 3 have been integers !and this one is not so cast the type. CALL MPI_GET_ADDRESS(computationEnvironment%computationNodes(rank)%nodeName, & & computationEnvironment%mpiComputationNode%displacements(4),mpiIError) - CALL MPI_ERROR_CHECK("MPI_GET_ADDRESS",mpiIError,err,error,*999) + CALL MPI_ErrorCheck("MPI_GET_ADDRESS",mpiIError,err,error,*999) DO blockIdx=4,1,-1 computationEnvironment%mpiComputationNode%displacements(blockIdx)= & @@ -250,10 +251,10 @@ SUBROUTINE Computation_MPIComputationNodeInitialise(computationEnvironment,rank, & computationEnvironment%mpiComputationNode%displacements, & & computationEnvironment%mpiComputationNode%types, & & computationEnvironment%mpiComputationNode%mpiType,mpiIError) - CALL MPI_ERROR_CHECK("MPI_TYPE_CREATE_STRUCT",mpiIError,err,error,*999) + CALL MPI_ErrorCheck("MPI_TYPE_CREATE_STRUCT",mpiIError,err,error,*999) CALL MPI_TYPE_COMMIT(computationEnvironment%mpiComputationNode%mpiType,mpiIError) - CALL MPI_ERROR_CHECK("MPI_TYPE_COMMIT",mpiIError,err,error,*999) + CALL MPI_ErrorCheck("MPI_TYPE_COMMIT",mpiIError,err,error,*999) IF(diagnostics1) THEN CALL WriteString(DIAGNOSTIC_OUTPUT_TYPE,"MPI Computation Node Type Data:",err,error,*999) @@ -283,9 +284,10 @@ END SUBROUTINE Computation_MPIComputationNodeInitialise ! !>Finalises the computation data structures and deallocates all memory. - SUBROUTINE Computation_Finalise(err,error,*) + SUBROUTINE Computation_Finalise(computationEnvironment,err,error,*) !Argument Variables + TYPE(ComputationEnvironmentType), POINTER :: computationEnvironment !Initialises the computation data structures. - SUBROUTINE Computation_Initialise(err,error,*) + SUBROUTINE Computation_Initialise(context,err,error,*) !Argument Variables + TYPE(ContextType), POINTER :: context !Initialises the computation environment data structures. - SUBROUTINE ComputationEnvironment_Initialise(computationEnvironment,err,error,*) + !>Initialises the computation environment data structures for a context. + SUBROUTINE ComputationEnvironment_Initialise(context,err,error,*) !Argument Variables - TYPE(ComputationEnvironmentType), POINTER :: computationEnvironment !context + context%computationEnvironment%mpiVersion=0 + context%computationEnvironment%mpiSubversion=0 + context%computationEnvironment%mpiCommWorld=MPI_COMM_NULL + context%computationEnvironment%mpiGroupWorld=MPI_GROUP_NULL + context%computationEnvironment%numberOfWorldComputationNodes=0 + context%computationEnvironment%myWorldComputationNodeNumber=-1 + NULLIFY(context%computationEnvironment%worldWorkGroup) !Get the version of MPI that we are running with - CALL MPI_GET_VERSION(computationEnvironment%mpiVersion,computationEnvironment%mpiSubversion,mpiIError) - CALL MPI_ERROR_CHECK("MPI_GET_VERSION",mpiIError,err,error,*999) + CALL MPI_GET_VERSION(context%computationEnvironment%mpiVersion,context%computationEnvironment%mpiSubversion,mpiIError) + CALL MPI_ErrorCheck("MPI_GET_VERSION",mpiIError,err,error,*999) !Create a (private) communicator for OpenCMISS as a duplicate MPI_COMM_WORLD - CALL MPI_COMM_DUP(MPI_COMM_WORLD,computationEnvironment%mpiCommWorld,mpiIError) - CALL MPI_ERROR_CHECK("MPI_COMM_DUP",mpiIError,err,error,*999) + CALL MPI_COMM_DUP(MPI_COMM_WORLD,context%computationEnvironment%mpiCommWorld,mpiIError) + CALL MPI_ErrorCheck("MPI_COMM_DUP",mpiIError,err,error,*999) !Get the default MPI_COMM_GROUP for the world communicator - CALL MPI_COMM_GROUP(computationEnvironment%mpiCommWorld,computationEnvironment%mpiGroupWorld,mpiIError) - CALL MPI_ERROR_CHECK("MPI_COMM_GROUP",mpiIError,err,error,*999) + CALL MPI_COMM_GROUP(context%computationEnvironment%mpiCommWorld,context%computationEnvironment%mpiGroupWorld,mpiIError) + CALL MPI_ErrorCheck("MPI_COMM_GROUP",mpiIError,err,error,*999) !Set the default MPI world communicator to be the cloned communicator - computationEnvironment%mpiCommWorld=computationEnvironment%mpiCommWorld + context%computationEnvironment%mpiCommWorld=context%computationEnvironment%mpiCommWorld !Determine the number of ranks/computation nodes we have in our world computation environment - CALL MPI_COMM_SIZE(computationEnvironment%mpiCommWorld,computationEnvironment%numberOfWorldComputationNodes,mpiIError) - CALL MPI_ERROR_CHECK("MPI_COMM_SIZE",mpiIError,err,error,*999) + CALL MPI_COMM_SIZE(context%computationEnvironment%mpiCommWorld,context%computationEnvironment%numberOfWorldComputationNodes, & + & mpiIError) + CALL MPI_ErrorCheck("MPI_COMM_SIZE",mpiIError,err,error,*999) !Allocate the computation node data structures - ALLOCATE(computationEnvironment%computationNodes(0:computationEnvironment%numberOfWorldComputationNodes-1),STAT=ERR) - IF(ERR /=0) CALL FlagError("Could not allocate computation environment computation nodes.",err,error,*999) + ALLOCATE(context%computationEnvironment%computationNodes(0:context%computationEnvironment%numberOfWorldComputationNodes-1), & + & STAT=err) + IF(err/=0) CALL FlagError("Could not allocate computation environment computation nodes.",err,error,*999) !Determine my processes rank in the world communicator - CALL MPI_COMM_RANK(computationEnvironment%mpiCommWorld,rank,mpiIError) - CALL MPI_ERROR_CHECK("MPI_COMM_RANK",mpiIError,err,error,*999) - computationEnvironment%myWorldComputationNodeNumber=rank + CALL MPI_COMM_RANK(context%computationEnvironment%mpiCommWorld,rank,mpiIError) + CALL MPI_ErrorCheck("MPI_COMM_RANK",mpiIError,err,error,*999) + context%computationEnvironment%myWorldComputationNodeNumber=rank #ifdef TAUPROF CALL TAU_PROFILE_SET_NODE(rank) #endif !Create the MPI type information for the ComputationNodeType - CALL Computation_MPIComputationNodeInitialise(computationEnvironment,rank,err,error,*999) + CALL Computation_MPIComputationNodeInitialise(context%computationEnvironment,rank,err,error,*999) !Fill in all the computation node data structures for this rank at the root position (will be changed later with an !allgather call) - CALL Computation_ComputationNodeInitialise(computationEnvironment%computationNodes(0),rank,err,error,*999) + CALL Computation_ComputationNodeInitialise(context%computationEnvironment%computationNodes(0),rank,err,error,*999) !Now transfer all the computation node information to the other computation nodes so that each rank has all the !information. - CALL MPI_ALLGATHER(MPI_IN_PLACE,1,computationEnvironment%mpiComputationNode%mpiType, & - & computationEnvironment%computationNodes(0),1,computationEnvironment%mpiComputationNode%mpiType, & - & computationEnvironment%mpiCommWorld,mpiIError) - CALL MPI_ERROR_CHECK("MPI_ALLGATHER",mpiIError,err,error,*999) + CALL MPI_ALLGATHER(MPI_IN_PLACE,1,context%computationEnvironment%mpiComputationNode%mpiType, & + & context%computationEnvironment%computationNodes(0),1,context%computationEnvironment%mpiComputationNode%mpiType, & + & context%computationEnvironment%mpiCommWorld,mpiIError) + CALL MPI_ErrorCheck("MPI_ALLGATHER",mpiIError,err,error,*999) !Setup the world work group. !Initialise - CALL WorkGroup_Initialise(computationEnvironment%worldWorkGroup,err,error,*999) + CALL WorkGroup_Initialise(context%computationEnvironment%worldWorkGroup,err,error,*999) !Set the world work group to have all the ranks in the world communicator - computationEnvironment%worldWorkGroup%userNumber=0 - computationEnvironment%worldWorkGroup%label="World Work Group" - computationEnvironment%worldWorkGroup%parentWorkGroup=>computationEnvironment%worldWorkGroup - computationEnvironment%worldWorkGroup%numberOfGroupComputationNodes=computationEnvironment%numberOfWorldComputationNodes + context%computationEnvironment%worldWorkGroup%userNumber=0 + context%computationEnvironment%worldWorkGroup%label="World Work Group" + context%computationEnvironment%worldWorkGroup%parentWorkGroup=>context%computationEnvironment%worldWorkGroup + context%computationEnvironment%worldWorkGroup%numberOfGroupComputationNodes= & + & context%computationEnvironment%numberOfWorldComputationNodes !computationEnvironment%worldWorkGroup%computationEnvironment=>computationEnvironment - ALLOCATE(computationEnvironment%worldWorkGroup%worldRanks(computationEnvironment%numberOfWorldComputationNodes),STAT=err) + ALLOCATE(context%computationEnvironment%worldWorkGroup%worldRanks( & + & context%computationEnvironment%numberOfWorldComputationNodes),STAT=err) IF(err/=0) CALL FlagError("Could not allocate world work group world ranks.",err,error,*999) - ALLOCATE(computationEnvironment%worldWorkGroup%availableRanks(computationEnvironment%numberOfWorldComputationNodes),STAT=err) + ALLOCATE(context%computationEnvironment%worldWorkGroup%availableRanks( & + & context%computationEnvironment%numberOfWorldComputationNodes),STAT=err) IF(err/=0) CALL FlagError("Could not allocate world work group available ranks.",err,error,*999) - DO rankIdx=1,computationEnvironment%numberOfWorldComputationNodes - computationEnvironment%worldWorkGroup%worldRanks(rankIdx)=rankIdx-1 - computationEnvironment%worldWorkGroup%availableRanks(rankIdx)=rankIdx-1 + DO rankIdx=1,context%computationEnvironment%numberOfWorldComputationNodes + context%computationEnvironment%worldWorkGroup%worldRanks(rankIdx)=rankIdx-1 + context%computationEnvironment%worldWorkGroup%availableRanks(rankIdx)=rankIdx-1 ENDDO !rankIdx - computationEnvironment%worldWorkGroup%numberOfAvailableRanks=computationEnvironment%numberOfWorldComputationNodes + context%computationEnvironment%worldWorkGroup%numberOfAvailableRanks= & + & context%computationEnvironment%numberOfWorldComputationNodes !Create a new MPI group - CALL MPI_GROUP_INCL(computationEnvironment%mpiGroupWorld,computationEnvironment%worldWorkGroup%numberOfGroupComputationNodes, & - & computationEnvironment%worldWorkGroup%worldRanks,computationEnvironment%worldWorkGroup%mpiGroup,mpiIError) - CALL MPI_ERROR_CHECK("MPI_GROUP_INCL",mpiIError,err,error,*999) - CALL MPI_COMM_CREATE(computationEnvironment%mpiCommWorld,computationEnvironment%worldWorkGroup%mpiGroup, & - & computationEnvironment%worldWorkGroup%mpiGroupCommunicator,mpiIError) - CALL MPI_ERROR_CHECK("MPI_COMM_CREATE",mpiIError,err,error,*999) + CALL MPI_GROUP_INCL(context%computationEnvironment%mpiGroupWorld, & + & context%computationEnvironment%worldWorkGroup%numberOfGroupComputationNodes, & + & context%computationEnvironment%worldWorkGroup%worldRanks, & + & context%computationEnvironment%worldWorkGroup%mpiGroup,mpiIError) + CALL MPI_ErrorCheck("MPI_GROUP_INCL",mpiIError,err,error,*999) + CALL MPI_COMM_CREATE(context%computationEnvironment%mpiCommWorld, & + & context%computationEnvironment%worldWorkGroup%mpiGroup, & + & context%computationEnvironment%worldWorkGroup%mpiGroupCommunicator,mpiIError) + CALL MPI_ErrorCheck("MPI_COMM_CREATE",mpiIError,err,error,*999) !Determine ranks - CALL MPI_COMM_RANK(computationEnvironment%mpiCommWorld,rank,mpiIError) - CALL MPI_ERROR_CHECK("MPI_COMM_RANK",mpiIError,err,error,*999) - computationEnvironment%worldWorkGroup%myWorldComputationNodeNumber=rank - CALL MPI_COMM_RANK(computationEnvironment%worldWorkGroup%mpiGroupCommunicator,rank,mpiIError) - CALL MPI_ERROR_CHECK("MPI_COMM_RANK",mpiIError,err,error,*999) - computationEnvironment%worldWorkGroup%myWorldComputationNodeNumber=rank + CALL MPI_COMM_RANK(context%computationEnvironment%mpiCommWorld,rank,mpiIError) + CALL MPI_ErrorCheck("MPI_COMM_RANK",mpiIError,err,error,*999) + context%computationEnvironment%worldWorkGroup%myWorldComputationNodeNumber=rank + CALL MPI_COMM_RANK(context%computationEnvironment%worldWorkGroup%mpiGroupCommunicator,rank,mpiIError) + CALL MPI_ErrorCheck("MPI_COMM_RANK",mpiIError,err,error,*999) + context%computationEnvironment%worldWorkGroup%myWorldComputationNodeNumber=rank - computationEnvironment%worldWorkGroup%workGroupFinished=.TRUE. + context%computationEnvironment%worldWorkGroup%workGroupFinished=.TRUE. IF(diagnostics1) THEN !Just let the master node write out this information IF(rank==0) THEN CALL WriteString(DIAGNOSTIC_OUTPUT_TYPE,"Computation environment:",err,error,*999) CALL WriteStringValue(DIAGNOSTIC_OUTPUT_TYPE," MPI version = ", & - & computationEnvironment%mpiVersion,err,error,*999) + & context%computationEnvironment%mpiVersion,err,error,*999) CALL WriteStringValue(DIAGNOSTIC_OUTPUT_TYPE," MPI subversion = ", & - & computationEnvironment%mpiSubversion,err,error,*999) + & context%computationEnvironment%mpiSubversion,err,error,*999) CALL WriteStringValue(DIAGNOSTIC_OUTPUT_TYPE," MPI world communicator = ", & - & computationEnvironment%mpiCommWorld,err,error,*999) + & context%computationEnvironment%mpiCommWorld,err,error,*999) CALL WriteStringValue(DIAGNOSTIC_OUTPUT_TYPE," MPI world group = ", & - & computationEnvironment%mpiGroupWorld,err,error,*999) + & context%computationEnvironment%mpiGroupWorld,err,error,*999) CALL WriteStringValue(DIAGNOSTIC_OUTPUT_TYPE," Number of world computation nodes = ", & - & computationEnvironment%numberOfWorldComputationNodes,err,error,*999) + & context%computationEnvironment%numberOfWorldComputationNodes,err,error,*999) CALL WriteStringValue(DIAGNOSTIC_OUTPUT_TYPE," My world computation node number = ", & - & computationEnvironment%myWorldComputationNodeNumber,err,error,*999) + & context%computationEnvironment%myWorldComputationNodeNumber,err,error,*999) IF(diagnostics2) THEN - DO computationNodeIdx=0,computationEnvironment%numberOfWorldComputationNodes-1 + DO computationNodeIdx=0,context%computationEnvironment%numberOfWorldComputationNodes-1 CALL WriteString(DIAGNOSTIC_OUTPUT_TYPE," Computation Node:",err,error,*999) CALL WriteStringValue(DIAGNOSTIC_OUTPUT_TYPE," Number of Processors = ", & - & computationEnvironment%computationNodes(computationNodeIdx)%numberOfProcessors,err,error,*999) + & context%computationEnvironment%computationNodes(computationNodeIdx)%numberOfProcessors, & + & err,error,*999) CALL WriteStringValue(DIAGNOSTIC_OUTPUT_TYPE," MPI rank = ", & - & computationEnvironment%computationNodes(computationNodeIdx)%rank,err,error,*999) + & context%computationEnvironment%computationNodes(computationNodeIdx)%rank,err,error,*999) CALL WriteStringValue(DIAGNOSTIC_OUTPUT_TYPE," Node Name = ", & - & computationEnvironment%computationNodes(computationNodeIdx)%nodeName,err,error,*999) + & context%computationEnvironment%computationNodes(computationNodeIdx)%nodeName,err,error,*999) ENDDO !computationNodeIdx ENDIF ENDIF @@ -556,7 +573,7 @@ SUBROUTINE ComputationEnvironment_Initialise(computationEnvironment,err,error,*) EXITS("ComputationEnvironment_Initialise") RETURN -999 CALL ComputationEnvironment_Finalise(computationEnvironment,dummyErr,dummyError,*998) +999 CALL ComputationEnvironment_Finalise(context%computationEnvironment,dummyErr,dummyError,*998) 998 ERRORS("ComputationEnvironment_Initialise",err,error) EXITS("ComputationEnvironment_Initialise") RETURN 1 @@ -578,6 +595,7 @@ SUBROUTINE WorkGroup_CreateStart(userNumber,parentWorkGroup,workGroup,err,error, TYPE(VARYING_STRING), INTENT(OUT) :: error !Destroy a work group given by a user number and all sub groups under it - RECURSIVE SUBROUTINE WorkGroup_DestroyNumber(workGroupUserNumber,err,error,*) + RECURSIVE SUBROUTINE WorkGroup_DestroyNumber(computationEnvironment,workGroupUserNumber,err,error,*) !Argument Variables + TYPE(ComputationEnvironmentType), POINTER :: computationEnvironment !0) NULLIFY(workGroup2) CALL WorkGroup_WorkSubGroupGet(workGroup,1,workGroup2,err,error,*999) - CALL WorkGroup_DestroyNumber(workGroup2%userNumber,err,error,*999) + CALL WorkGroup_DestroyNumber(computationEnvironment,workGroup2%userNumber,err,error,*999) ENDDO !Now delete this instance - CALL WorkGroup_DestroyNumber(workGroup%userNumber,err,error,*999) + CALL WorkGroup_DestroyNumber(computationEnvironment,workGroup%userNumber,err,error,*999) ENDIF EXITS("WorkGroup_DestroyNumber") @@ -848,11 +877,11 @@ RECURSIVE SUBROUTINE WorkGroup_Finalise(workGroup,err,error,*) ENDIF IF(workGroup%mpiGroupCommunicator/=MPI_COMM_NULL) THEN CALL MPI_COMM_FREE(workGroup%mpiGroupCommunicator,mpiIError) - CALL MPI_ERROR_CHECK("MPI_COMM_FREE",mpiIError,err,error,*999) + CALL MPI_ErrorCheck("MPI_COMM_FREE",mpiIError,err,error,*999) ENDIF IF(workGroup%mpiGroup/=MPI_GROUP_NULL) THEN CALL MPI_GROUP_FREE(workGroup%mpiGroup,mpiIError) - CALL MPI_ERROR_CHECK("MPI_GROUP_FREE",mpiIError,err,error,*999) + CALL MPI_ErrorCheck("MPI_GROUP_FREE",mpiIError,err,error,*999) ENDIF DEALLOCATE(workGroup) ENDIF diff --git a/src/control_loop_access_routines.f90 b/src/control_loop_access_routines.f90 index 5eef738d..19c2da5a 100644 --- a/src/control_loop_access_routines.f90 +++ b/src/control_loop_access_routines.f90 @@ -45,6 +45,7 @@ MODULE ControlLoopAccessRoutines USE BaseRoutines + USE ISO_VARYING_STRING USE Kinds USE Strings USE Types diff --git a/src/control_loop_routines.f90 b/src/control_loop_routines.f90 index bacd3e15..392ec819 100644 --- a/src/control_loop_routines.f90 +++ b/src/control_loop_routines.f90 @@ -45,18 +45,19 @@ MODULE CONTROL_LOOP_ROUTINES USE BaseRoutines + USE Constants USE ControlLoopAccessRoutines USE FIELD_ROUTINES USE FieldAccessRoutines USE INPUT_OUTPUT USE ISO_VARYING_STRING - USE KINDS + USE Kinds USE PROBLEM_CONSTANTS USE SOLVER_ROUTINES USE SolverAccessRoutines USE SolverMatricesAccessRoutines - USE STRINGS - USE TYPES + USE Strings + USE Types #include "macros.h" diff --git a/src/coordinate_access_routines.f90 b/src/coordinate_access_routines.f90 index d9e51a21..2f565a7a 100644 --- a/src/coordinate_access_routines.f90 +++ b/src/coordinate_access_routines.f90 @@ -46,6 +46,7 @@ MODULE CoordinateSystemAccessRoutines USE BaseRoutines USE Kinds + USE ISO_VARYING_STRING USE Strings USE Types @@ -61,9 +62,7 @@ MODULE CoordinateSystemAccessRoutines !Module variables - TYPE(CoordinateSystemsType) :: coordinateSystems - - !Interfaces + !Interfaces INTERFACE COORDINATE_SYSTEM_DIMENSION_GET MODULE PROCEDURE CoordinateSystem_DimensionGet @@ -73,8 +72,8 @@ MODULE CoordinateSystemAccessRoutines MODULE PROCEDURE CoordinateSystem_UserNumberFind END INTERFACE COORDINATE_SYSTEM_USER_NUMBER_FIND - PUBLIC coordinateSystems - + PUBLIC CoordinateSystem_CoordinateSystemsGet + PUBLIC CoordinateSystem_DimensionGet PUBLIC COORDINATE_SYSTEM_DIMENSION_GET @@ -92,6 +91,42 @@ MODULE CoordinateSystemAccessRoutines !================================================================================================================================ ! + !>Returns the coordinate systems for the coordinate system. + SUBROUTINE CoordinateSystem_CoordinateSystemsGet(coordinateSystem,coordinateSystems,err,error,*) + + !Argument variables + TYPE(COORDINATE_SYSTEM_TYPE), POINTER, INTENT(IN) :: coordinateSystem !coordinateSystem%coordinateSystems + IF(.NOT.ASSOCIATED(coordinateSystems)) THEN + localError="Coordinate systems is not associated for coordinate system number "// & + & TRIM(NumberToVString(coordinateSystem%USER_NUMBER,"*",err,error))//"." + CALL FlagError(localError,err,error,*999) + ENDIF + + EXITS("CoordinateSystem_CoordinateSystemsGet") + RETURN +998 NULLIFY(coordinateSystems) +999 ERRORS("CoordinateSystem_CoordinateSystemsGet",err,error) + EXITS("CoordinateSystem_CoordinateSystemsGet") + RETURN 1 + + END SUBROUTINE CoordinateSystem_CoordinateSystemsGet + + ! + !================================================================================================================================ + ! + !>Gets the coordinate system dimension. SUBROUTINE CoordinateSystem_DimensionGet(coordinateSystem,numberOfDimensions,err,error,*) @@ -121,10 +156,11 @@ END SUBROUTINE CoordinateSystem_DimensionGet ! !>Finds and returns a pointer to the coordinate system with the given user number. - SUBROUTINE CoordinateSystem_Get(userNumber,coordinateSystem,err,error,*) + SUBROUTINE CoordinateSystem_Get(coordinateSystems,userNumber,coordinateSystem,err,error,*) !Argument variables - INTEGER(INTG), INTENT(IN) :: userNumber !Returns a pointer to the coordinate system identified by a user number. If a coordinate system with that number is not !>found then coordinate system is set to NULL. - SUBROUTINE CoordinateSystem_UserNumberFind(userNumber,coordinateSystem,ERR,ERROR,*) + SUBROUTINE CoordinateSystem_UserNumberFind(coordinateSystems,userNumber,coordinateSystem,err,error,*) !Argument variables + TYPE(CoordinateSystemsType), POINTER :: coordinateSystems !Performs a coordinate transformation from a rectangular cartesian coordinate at the point with coordinate Z(:) to the returned point with coordinate X(:) in the coordinate system identified by COORDINATE_SYSTEM for double precision coordinates. - FUNCTION COORDINATE_CONVERT_FROM_RC_DP(COORDINATE_SYSTEM,Z,ERR,ERROR) + FUNCTION COORDINATE_CONVERT_FROM_RC_DP(COORDINATE_SYSTEM,Z,err,error) !Argument variables TYPE(COORDINATE_SYSTEM_TYPE), INTENT(IN) :: COORDINATE_SYSTEM !2*pi @@ -245,7 +245,7 @@ FUNCTION COORDINATE_CONVERT_FROM_RC_DP(COORDINATE_SYSTEM,Z,ERR,ERROR) COORDINATE_CONVERT_FROM_RC_DP(3)=0.0_DP ENDIF ELSE - CALL FlagError("Invalid number of coordinates.",ERR,ERROR,*999) + CALL FlagError("Invalid number of coordinates.",err,error,*999) ENDIF CASE(COORDINATE_PROLATE_SPHEROIDAL_TYPE) FOCUS=COORDINATE_SYSTEM%FOCUS @@ -261,7 +261,7 @@ FUNCTION COORDINATE_CONVERT_FROM_RC_DP(COORDINATE_SYSTEM,Z,ERR,ERROR) A8=ASIN(A7) ELSE A8=0.0_DP - CALL FLAG_WARNING("Put A8=0 since ABS(A8)>1.",ERR,ERROR,*999) + CALL FLAG_WARNING("Put A8=0 since ABS(A8)>1.",err,error,*999) ENDIF IF((ABS(Z(3))=1.0_DP) THEN A9=PI/2.0_DP @@ -292,17 +292,17 @@ FUNCTION COORDINATE_CONVERT_FROM_RC_DP(COORDINATE_SYSTEM,Z,ERR,ERROR) COORDINATE_CONVERT_FROM_RC_DP(3)=PI-A9 ENDIF ELSE - CALL FlagError("Invalid number of coordinates.",ERR,ERROR,*999) + CALL FlagError("Invalid number of coordinates.",err,error,*999) ENDIF CASE(COORDINATE_OBLATE_SPHEROIDAL_TYPE) - CALL FlagError("Not implemented.",ERR,ERROR,*999) + CALL FlagError("Not implemented.",err,error,*999) CASE DEFAULT - CALL FlagError("Invalid coordinate type.",ERR,ERROR,*999) + CALL FlagError("Invalid coordinate type.",err,error,*999) END SELECT EXITS("COORDINATE_CONVERT_FROM_RC_DP") RETURN -999 ERRORSEXITS("COORDINATE_CONVERT_FROM_RC_DP",ERR,ERROR) +999 ERRORSEXITS("COORDINATE_CONVERT_FROM_RC_DP",err,error) RETURN END FUNCTION COORDINATE_CONVERT_FROM_RC_DP @@ -313,24 +313,24 @@ END FUNCTION COORDINATE_CONVERT_FROM_RC_DP !>COORDINATE_CONVERT_FROM_RC_SP performs a coordinate transformation from a rectangular cartesian coordinate at the !>point with coordinate Z(:) to the returned point with coordinate X(:) in the coordinate system identified by !>COORDINATE_SYSTEM for single precision coordinates. - FUNCTION COORDINATE_CONVERT_FROM_RC_SP(COORDINATE_SYSTEM,Z,ERR,ERROR) + FUNCTION COORDINATE_CONVERT_FROM_RC_SP(COORDINATE_SYSTEM,Z,err,error) !Argument variables TYPE(COORDINATE_SYSTEM_TYPE), INTENT(IN) :: COORDINATE_SYSTEM !2*pi @@ -364,7 +364,7 @@ FUNCTION COORDINATE_CONVERT_FROM_RC_SP(COORDINATE_SYSTEM,Z,ERR,ERROR) COORDINATE_CONVERT_FROM_RC_SP(3)=0.0_SP ENDIF ELSE - CALL FlagError("Invalid number of coordinates.",ERR,ERROR,*999) + CALL FlagError("Invalid number of coordinates.",err,error,*999) ENDIF CASE(COORDINATE_PROLATE_SPHEROIDAL_TYPE) FOCUS=REAL(COORDINATE_SYSTEM%FOCUS,SP) @@ -380,7 +380,7 @@ FUNCTION COORDINATE_CONVERT_FROM_RC_SP(COORDINATE_SYSTEM,Z,ERR,ERROR) A8=ASIN(A7) ELSE A8=0.0_SP - CALL FLAG_WARNING("Put A8=0 since ABS(A8)>1.",ERR,ERROR,*999) + CALL FLAG_WARNING("Put A8=0 since ABS(A8)>1.",err,error,*999) ENDIF IF((ABS(Z(3))=1.0_SP) THEN A9=REAL(PI,SP)/2.0_SP @@ -412,17 +412,17 @@ FUNCTION COORDINATE_CONVERT_FROM_RC_SP(COORDINATE_SYSTEM,Z,ERR,ERROR) COORDINATE_CONVERT_FROM_RC_SP(3)=REAL(PI,SP)-A9 ENDIF ELSE - CALL FlagError("Invalid number of coordinates.",ERR,ERROR,*999) + CALL FlagError("Invalid number of coordinates.",err,error,*999) ENDIF CASE(COORDINATE_OBLATE_SPHEROIDAL_TYPE) - CALL FlagError("Not implemented.",ERR,ERROR,*999) + CALL FlagError("Not implemented.",err,error,*999) CASE DEFAULT - CALL FlagError("Invalid coordinate type.",ERR,ERROR,*999) + CALL FlagError("Invalid coordinate type.",err,error,*999) END SELECT EXITS("COORDINATE_CONVERT_FROM_RC_SP") RETURN -999 ERRORSEXITS("COORDINATE_CONVERT_FROM_RC_SP",ERR,ERROR) +999 ERRORSEXITS("COORDINATE_CONVERT_FROM_RC_SP",err,error) RETURN END FUNCTION COORDINATE_CONVERT_FROM_RC_SP @@ -433,24 +433,24 @@ END FUNCTION COORDINATE_CONVERT_FROM_RC_SP !>COORDINATE_CONVERT_TO_RC_DP performs a coordinate transformation from a coordinate system identified by !>COORDINATE_SYSTEM at the point X(:) to the returned point Z(:) in rectangular cartesian coordinates for !>double precision coordinates. - FUNCTION COORDINATE_CONVERT_TO_RC_DP(COORDINATE_SYSTEM,X,ERR,ERROR) + FUNCTION COORDINATE_CONVERT_TO_RC_DP(COORDINATE_SYSTEM,X,err,error) !Argument variables TYPE(COORDINATE_SYSTEM_TYPE), INTENT(IN) :: COORDINATE_SYSTEM !COORDINATE_CONVERT_TO_RC_SP performs a coordinate transformation from a coordinate system identified by !>COORDINATE_SYSTEM at the point X(:) to the returned point Z(:) in rectangular cartesian coordinates for !>single precision coordinates. - FUNCTION COORDINATE_CONVERT_TO_RC_SP(COORDINATE_SYSTEM,X,ERR,ERROR) + FUNCTION COORDINATE_CONVERT_TO_RC_SP(COORDINATE_SYSTEM,X,err,error) !Argument variables TYPE(COORDINATE_SYSTEM_TYPE), INTENT(IN) :: COORDINATE_SYSTEM !Calculates the difference (or detlta) between the point X and the point Y i.e., Y-X, in the given coordinate system. !>0->2Pi discontinuities with polar coordinates are accounted for. - FUNCTION COORDINATE_DELTA_CALCULATE_DP(COORDINATE_SYSTEM,X,Y,ERR,ERROR) + FUNCTION COORDINATE_DELTA_CALCULATE_DP(COORDINATE_SYSTEM,X,Y,err,error) !Argument variables TYPE(COORDINATE_SYSTEM_TYPE), INTENT(IN) :: COORDINATE_SYSTEM !Calculates the covariant metric tensor GL(i,j), the contravariant metric tensor GU(i,J), the Jacobian and derivative of the interpolated coordinate system (XI_i) with respect to the given coordinate (X_j) system (DXI_DX) at a point (X - normally a Gauss point). Old cmiss name: XGMG - SUBROUTINE COORDINATE_METRICS_CALCULATE(COORDINATE_SYSTEM,JACOBIAN_TYPE,METRICS,ERR,ERROR,*) + SUBROUTINE COORDINATE_METRICS_CALCULATE(COORDINATE_SYSTEM,JACOBIAN_TYPE,METRICS,err,error,*) !Argument variables TYPE(COORDINATE_SYSTEM_TYPE), POINTER :: COORDINATE_SYSTEM !Calculates the normal vector, N, at the point X. IF REVERSE is true the reversed normal is returned. Old-cmiss-name: NORMAL - SUBROUTINE COORDINATE_SYSTEM_NORMAL_CALCULATE(COORDINATE_SYSTEM,REVERSE,X,N,ERR,ERROR,*) + SUBROUTINE COORDINATE_SYSTEM_NORMAL_CALCULATE(COORDINATE_SYSTEM,REVERSE,X,N,err,error,*) !Argument variables TYPE(COORDINATE_SYSTEM_TYPE), POINTER :: COORDINATE_SYSTEM !Finalises a coordinate system and deallocates all memory. - SUBROUTINE COORDINATE_SYSTEM_FINALISE(COORDINATE_SYSTEM,ERR,ERROR,*) + SUBROUTINE COORDINATE_SYSTEM_FINALISE(COORDINATE_SYSTEM,err,error,*) !Argument variables TYPE(COORDINATE_SYSTEM_TYPE), POINTER :: COORDINATE_SYSTEM !Returns the coordinate system focus. - SUBROUTINE COORDINATE_SYSTEM_FOCUS_GET(COORDINATE_SYSTEM,FOCUS,ERR,ERROR,*) + SUBROUTINE COORDINATE_SYSTEM_FOCUS_GET(COORDINATE_SYSTEM,FOCUS,err,error,*) !Argument variables TYPE(COORDINATE_SYSTEM_TYPE), POINTER :: COORDINATE_SYSTEM !Gets the coordinate system type. - SUBROUTINE COORDINATE_SYSTEM_TYPE_GET(COORDINATE_SYSTEM,SYSTEM_TYPE,ERR,ERROR,*) + SUBROUTINE COORDINATE_SYSTEM_TYPE_GET(COORDINATE_SYSTEM,SYSTEM_TYPE,err,error,*) !Argument variables TYPE(COORDINATE_SYSTEM_TYPE), POINTER :: COORDINATE_SYSTEM !Sets/changes the dimension of the coordinate system. \see OPENCMISS::CMISSCoordinateSystemDimensionSet - SUBROUTINE COORDINATE_SYSTEM_DIMENSION_SET(COORDINATE_SYSTEM,DIMENSION,ERR,ERROR,*) + SUBROUTINE COORDINATE_SYSTEM_DIMENSION_SET(COORDINATE_SYSTEM,DIMENSION,err,error,*) !Argument variables TYPE(COORDINATE_SYSTEM_TYPE), POINTER :: COORDINATE_SYSTEM !=1.AND.DIMENSION<=3) THEN COORDINATE_SYSTEM%NUMBER_OF_DIMENSIONS=DIMENSION ELSE - CALL FlagError("Invalid number of dimensions.",ERR,ERROR,*999) + CALL FlagError("Invalid number of dimensions.",err,error,*999) ENDIF CASE(COORDINATE_CYLINDRICAL_POLAR_TYPE) IF(DIMENSION>=2.AND.DIMENSION<=3) THEN COORDINATE_SYSTEM%NUMBER_OF_DIMENSIONS=DIMENSION ELSE - CALL FlagError("Invalid number of dimensions.",ERR,ERROR,*999) + CALL FlagError("Invalid number of dimensions.",err,error,*999) ENDIF CASE(COORDINATE_SPHERICAL_POLAR_TYPE) IF(DIMENSION==3) THEN COORDINATE_SYSTEM%NUMBER_OF_DIMENSIONS=DIMENSION ELSE - CALL FlagError("Invalid number of dimensions.",ERR,ERROR,*999) + CALL FlagError("Invalid number of dimensions.",err,error,*999) ENDIF CASE(COORDINATE_PROLATE_SPHEROIDAL_TYPE) IF(DIMENSION==3) THEN COORDINATE_SYSTEM%NUMBER_OF_DIMENSIONS=DIMENSION ELSE - CALL FlagError("Invalid number of dimensions.",ERR,ERROR,*999) + CALL FlagError("Invalid number of dimensions.",err,error,*999) ENDIF CASE(COORDINATE_OBLATE_SPHEROIDAL_TYPE) IF(DIMENSION==3) THEN COORDINATE_SYSTEM%NUMBER_OF_DIMENSIONS=DIMENSION ELSE - CALL FlagError("Invalid number of dimensions.",ERR,ERROR,*999) + CALL FlagError("Invalid number of dimensions.",err,error,*999) ENDIF CASE DEFAULT - CALL FlagError("Invalid coordinate system type.",ERR,ERROR,*999) + CALL FlagError("Invalid coordinate system type.",err,error,*999) END SELECT ENDIF ELSE - CALL FlagError("Coordinate system is not associated.",ERR,ERROR,*999) + CALL FlagError("Coordinate system is not associated.",err,error,*999) ENDIF EXITS("COORDINATE_SYSTEM_DIMENSION_SET") RETURN -999 ERRORSEXITS("COORDINATE_SYSTEM_DIMENSION_SET",ERR,ERROR) +999 ERRORSEXITS("COORDINATE_SYSTEM_DIMENSION_SET",err,error) RETURN 1 END SUBROUTINE COORDINATE_SYSTEM_DIMENSION_SET @@ -1374,45 +1374,45 @@ END SUBROUTINE COORDINATE_SYSTEM_DIMENSION_SET ! !>Sets/changes the focus of a coordinate system. \see OPENCMISS::CMISSCoordinateSystemFocusSet - SUBROUTINE COORDINATE_SYSTEM_FOCUS_SET(COORDINATE_SYSTEM,FOCUS,ERR,ERROR,*) + SUBROUTINE COORDINATE_SYSTEM_FOCUS_SET(COORDINATE_SYSTEM,FOCUS,err,error,*) !Argument variables TYPE(COORDINATE_SYSTEM_TYPE), POINTER :: COORDINATE_SYSTEM !ZERO_TOLERANCE) THEN COORDINATE_SYSTEM%FOCUS=FOCUS ELSE - CALL FlagError("Focus is less than zero.",ERR,ERROR,*999) + CALL FlagError("Focus is less than zero.",err,error,*999) ENDIF CASE(COORDINATE_OBLATE_SPHEROIDAL_TYPE) IF(FOCUS>ZERO_TOLERANCE) THEN COORDINATE_SYSTEM%FOCUS=FOCUS ELSE - CALL FlagError("Focus is less than zero.",ERR,ERROR,*999) + CALL FlagError("Focus is less than zero.",err,error,*999) ENDIF CASE DEFAULT - CALL FlagError("Invalid coordinate system type.",ERR,ERROR,*999) + CALL FlagError("Invalid coordinate system type.",err,error,*999) END SELECT ENDIF ELSE - CALL FlagError("Coordinate system is not associated.",ERR,ERROR,*999) + CALL FlagError("Coordinate system is not associated.",err,error,*999) ENDIF EXITS("COORDINATE_SYSTEM_FOCUS_SET") RETURN -999 ERRORSEXITS("COORDINATE_SYSTEM_FOCUS_SET",ERR,ERROR) +999 ERRORSEXITS("COORDINATE_SYSTEM_FOCUS_SET",err,error) RETURN 1 END SUBROUTINE COORDINATE_SYSTEM_FOCUS_SET @@ -1492,20 +1492,20 @@ END SUBROUTINE Coordinates_RadialInterpolationTypeSet ! !>Sets/changes the type of a coordinate system. \see OPENCMISS::CMISSCoordinateSystemTypeSet - SUBROUTINE COORDINATE_SYSTEM_TYPE_SET(COORDINATE_SYSTEM,TYPE,ERR,ERROR,*) + SUBROUTINE COORDINATE_SYSTEM_TYPE_SET(COORDINATE_SYSTEM,TYPE,err,error,*) !Argument variables TYPE(COORDINATE_SYSTEM_TYPE), POINTER :: COORDINATE_SYSTEM !Returns the origin of a coordinate system. \see OPENCMISS::CMISSCoordinateSystemOriginGet - SUBROUTINE COORDINATE_SYSTEM_ORIGIN_GET(COORDINATE_SYSTEM,ORIGIN,ERR,ERROR,*) + SUBROUTINE COORDINATE_SYSTEM_ORIGIN_GET(COORDINATE_SYSTEM,ORIGIN,err,error,*) !Argument variables TYPE(COORDINATE_SYSTEM_TYPE), POINTER :: COORDINATE_SYSTEM !=3) THEN ORIGIN(1:3)=COORDINATE_SYSTEM%ORIGIN ELSE - CALL FlagError("The origin must have >= 3 components.",ERR,ERROR,*999) + CALL FlagError("The origin must have >= 3 components.",err,error,*999) ENDIF ELSE - CALL FlagError("Coordinate system has not been finished.",ERR,ERROR,*999) + CALL FlagError("Coordinate system has not been finished.",err,error,*999) ENDIF ELSE - CALL FlagError("Coordinate system is not associated.",ERR,ERROR,*999) + CALL FlagError("Coordinate system is not associated.",err,error,*999) ENDIF EXITS("COORDINATE_SYSTEM_ORIGIN_GET") RETURN -999 ERRORSEXITS("COORDINATE_SYSTEM_ORIGIN_GET",ERR,ERROR) +999 ERRORSEXITS("COORDINATE_SYSTEM_ORIGIN_GET",err,error) RETURN 1 END SUBROUTINE COORDINATE_SYSTEM_ORIGIN_GET @@ -1574,34 +1574,34 @@ END SUBROUTINE COORDINATE_SYSTEM_ORIGIN_GET ! !>Sets/changes the origin of a coordinate system. \see OPENCMISS::CMISSCoordinateSystemOriginSet - SUBROUTINE COORDINATE_SYSTEM_ORIGIN_SET(COORDINATE_SYSTEM,ORIGIN,ERR,ERROR,*) + SUBROUTINE COORDINATE_SYSTEM_ORIGIN_SET(COORDINATE_SYSTEM,ORIGIN,err,error,*) !Argument variables TYPE(COORDINATE_SYSTEM_TYPE), POINTER :: COORDINATE_SYSTEM !Returns the orientation of a coordinate system. \see OPENCMISS::CMISSCoordinateSystemOrientationSets/changesGet - SUBROUTINE COORDINATE_SYSTEM_ORIENTATION_GET(COORDINATE_SYSTEM,ORIENTATION,ERR,ERROR,*) + SUBROUTINE COORDINATE_SYSTEM_ORIENTATION_GET(COORDINATE_SYSTEM,ORIENTATION,err,error,*) !Argument variables TYPE(COORDINATE_SYSTEM_TYPE), POINTER :: COORDINATE_SYSTEM !=3.AND.SIZE(ORIENTATION,2)>=3) THEN ORIENTATION(1:3,1:3)=COORDINATE_SYSTEM%ORIENTATION ELSE - CALL FlagError("The orientation matrix must have >= 3x3 components.",ERR,ERROR,*999) + CALL FlagError("The orientation matrix must have >= 3x3 components.",err,error,*999) ENDIF ELSE - CALL FlagError("Coordinate system has not been finished.",ERR,ERROR,*999) + CALL FlagError("Coordinate system has not been finished.",err,error,*999) ENDIF ELSE - CALL FlagError("Coordinate system is not associated.",ERR,ERROR,*999) + CALL FlagError("Coordinate system is not associated.",err,error,*999) ENDIF EXITS("COORDINATE_SYSTEM_ORIENTATION_GET") RETURN -999 ERRORSEXITS("COORDINATE_SYSTEM_ORIENTATION_GET",ERR,ERROR) +999 ERRORSEXITS("COORDINATE_SYSTEM_ORIENTATION_GET",err,error) RETURN 1 END SUBROUTINE COORDINATE_SYSTEM_ORIENTATION_GET @@ -1646,35 +1646,35 @@ END SUBROUTINE COORDINATE_SYSTEM_ORIENTATION_GET ! !>Sets/changes the orientation of a coordinate system. \see OPENCMISS::CMISSCoordinateSystemOrientationSet - SUBROUTINE COORDINATE_SYSTEM_ORIENTATION_SET(COORDINATE_SYSTEM,ORIENTATION,ERR,ERROR,*) + SUBROUTINE COORDINATE_SYSTEM_ORIENTATION_SET(COORDINATE_SYSTEM,ORIENTATION,err,error,*) !Argument variables TYPE(COORDINATE_SYSTEM_TYPE), POINTER :: COORDINATE_SYSTEM !- Focus: 1.0 !>- Origin: (0.0,0.0,0.0) !>- Oritention: ((1.0,0.0,0.0),(0.0,1.0,0.0),(0.0,0.0,1.0)) - SUBROUTINE COORDINATE_SYSTEM_CREATE_START(USER_NUMBER,COORDINATE_SYSTEM,ERR,ERROR,*) + SUBROUTINE COORDINATE_SYSTEM_CREATE_START(coordinateSystems,USER_NUMBER,COORDINATE_SYSTEM,err,error,*) !Argument variables + TYPE(CoordinateSystemsType), POINTER :: coordinateSystems !coordinateSystems NEW_COORDINATE_SYSTEM%COORDINATE_SYSTEM_FINISHED=.FALSE. NEW_COORDINATE_SYSTEM%TYPE=COORDINATE_RECTANGULAR_CARTESIAN_TYPE NEW_COORDINATE_SYSTEM%RADIAL_INTERPOLATION_TYPE=COORDINATE_NO_RADIAL_INTERPOLATION_TYPE NEW_COORDINATE_SYSTEM%NUMBER_OF_DIMENSIONS=3 NEW_COORDINATE_SYSTEM%FOCUS=1.0_DP - NEW_COORDINATE_SYSTEM%ORIGIN=(/0.0_DP,0.0_DP,0.0_DP/) + NEW_COORDINATE_SYSTEM%ORIGIN=[0.0_DP,0.0_DP,0.0_DP] NEW_COORDINATE_SYSTEM%ORIENTATION=RESHAPE(& - & (/1.0_DP,0.0_DP,0.0_DP, & + & [1.0_DP,0.0_DP,0.0_DP, & & 0.0_DP,1.0_DP,0.0_DP, & - & 0.0_DP,0.0_DP,1.0_DP/), & - & (/3,3/)) + & 0.0_DP,0.0_DP,1.0_DP], & + & [3,3]) - ALLOCATE(NEW_COORDINATE_SYSTEMS(coordinateSystems%numberOfCoordinateSystems+1),STAT=ERR) - IF(ERR/=0) CALL FlagError("Could not allocate new coordinate systems.",ERR,ERROR,*999) + ALLOCATE(NEW_COORDINATE_SYSTEMS(coordinateSystems%numberOfCoordinateSystems+1),STAT=err) + IF(err/=0) CALL FlagError("Could not allocate new coordinate systems.",err,error,*999) DO coord_system_idx=1,coordinateSystems%numberOfCoordinateSystems NEW_COORDINATE_SYSTEMS(coord_system_idx)%ptr=>coordinateSystems%coordinateSystems(coord_system_idx)%ptr ENDDO !coord_system_idx @@ -1754,7 +1759,7 @@ SUBROUTINE COORDINATE_SYSTEM_CREATE_START(USER_NUMBER,COORDINATE_SYSTEM,ERR,ERRO 999 IF(ASSOCIATED(NEW_COORDINATE_SYSTEM)) DEALLOCATE(NEW_COORDINATE_SYSTEM) IF(ASSOCIATED(NEW_COORDINATE_SYSTEMS)) DEALLOCATE(NEW_COORDINATE_SYSTEMS) NULLIFY(COORDINATE_SYSTEM) -998 ERRORSEXITS("COORDINATE_SYSTEM_CREATE_START",ERR,ERROR) +998 ERRORSEXITS("COORDINATE_SYSTEM_CREATE_START",err,error) RETURN 1 END SUBROUTINE COORDINATE_SYSTEM_CREATE_START @@ -1763,40 +1768,43 @@ END SUBROUTINE COORDINATE_SYSTEM_CREATE_START ! !>Finishes the creation of a new coordinate system. - SUBROUTINE COORDINATE_SYSTEM_CREATE_FINISH(COORDINATE_SYSTEM,ERR,ERROR,*) + SUBROUTINE COORDINATE_SYSTEM_CREATE_FINISH(COORDINATE_SYSTEM,err,error,*) !Argument variables TYPE(COORDINATE_SYSTEM_TYPE), POINTER :: COORDINATE_SYSTEM !Destroys a coordinate system. - SUBROUTINE COORDINATE_SYSTEM_DESTROY(COORDINATE_SYSTEM,ERR,ERROR,*) + SUBROUTINE COORDINATE_SYSTEM_DESTROY(COORDINATE_SYSTEM,err,error,*) !Argument variables TYPE(COORDINATE_SYSTEM_TYPE), POINTER :: COORDINATE_SYSTEM !NEW_COORDINATE_SYSTEMS coordinateSystems%numberOfCoordinateSystems=coordinateSystems%numberOfCoordinateSystems-1 ELSE DEALLOCATE(NEW_COORDINATE_SYSTEMS) - CALL FlagError("Coordinate system number to destroy does not exist.",ERR,ERROR,*999) + CALL FlagError("Coordinate system number to destroy does not exist.",err,error,*999) ENDIF ENDIF ELSE - CALL FlagError("Coordinate system is not associated.",ERR,ERROR,*999) + CALL FlagError("Coordinate system is not associated.",err,error,*999) ENDIF EXITS("COORDINATE_SYSTEM_DESTROY") RETURN -999 ERRORSEXITS("COORDINATE_SYSTEM_DESTROY",ERR,ERROR) +999 ERRORSEXITS("COORDINATE_SYSTEM_DESTROY",err,error) RETURN 1 END SUBROUTINE COORDINATE_SYSTEM_DESTROY @@ -1859,33 +1870,33 @@ END SUBROUTINE COORDINATE_SYSTEM_DESTROY ! !>Calculates DX(:)/DZ(I) at X, where Z(I) are rectangular cartesian and X(:) are curvilinear coordinates defined by COORDINATE_SYSTEM for double precision coordinates. - FUNCTION DXZ_DP(COORDINATE_SYSTEM,I,X,ERR,ERROR) + FUNCTION DXZ_DP(COORDINATE_SYSTEM,I,X,err,error) !Argument variables TYPE(COORDINATE_SYSTEM_TYPE), INTENT(IN) :: COORDINATE_SYSTEM INTEGER(INTG), INTENT(IN) :: I REAL(DP), INTENT(IN) :: X(:) - INTEGER(INTG), INTENT(OUT) :: ERR - TYPE(VARYING_STRING), INTENT(OUT) :: ERROR + INTEGER(INTG), INTENT(OUT) :: err + TYPE(VARYING_STRING), INTENT(OUT) :: error !Function variable REAL(DP) :: DXZ_DP(SIZE(X,1)) !Local variables REAL(DP) :: RD,FOCUS - ENTERS("DXZ_DP",ERR,ERROR,*999) + ENTERS("DXZ_DP",err,error,*999) DXZ_DP=0.0_DP IF(SIZE(X,1)0.AND.I<=COORDINATE_SYSTEM%NUMBER_OF_DIMENSIONS) THEN DXZ_DP(I)=1.0_DP ELSE - CALL FlagError("Invalid i value",ERR,ERROR,*999) + CALL FlagError("Invalid i value",err,error,*999) ENDIF CASE(COORDINATE_CYLINDRICAL_POLAR_TYPE) SELECT CASE(COORDINATE_SYSTEM%NUMBER_OF_DIMENSIONS) @@ -1898,7 +1909,7 @@ FUNCTION DXZ_DP(COORDINATE_SYSTEM,I,X,ERR,ERROR) DXZ_DP(1)=SIN(X(2)) DXZ_DP(2)=COS(X(2))/X(1) CASE DEFAULT - CALL FlagError("Invalid i value",ERR,ERROR,*999) + CALL FlagError("Invalid i value",err,error,*999) END SELECT CASE(3) SELECT CASE(I) @@ -1915,10 +1926,10 @@ FUNCTION DXZ_DP(COORDINATE_SYSTEM,I,X,ERR,ERROR) DXZ_DP(2)=0.0_DP DXZ_DP(3)=1.0_DP CASE DEFAULT - CALL FlagError("Invalid i value",ERR,ERROR,*999) + CALL FlagError("Invalid i value",err,error,*999) END SELECT CASE DEFAULT - CALL FlagError("Invalid number of coordinates",ERR,ERROR,*999) + CALL FlagError("Invalid number of coordinates",err,error,*999) END SELECT CASE(COORDINATE_SPHERICAL_POLAR_TYPE) IF(COORDINATE_SYSTEM%NUMBER_OF_DIMENSIONS==3) THEN @@ -1936,10 +1947,10 @@ FUNCTION DXZ_DP(COORDINATE_SYSTEM,I,X,ERR,ERROR) DXZ_DP(2)=0.0_DP DXZ_DP(3)=COS(X(3))/X(1) CASE DEFAULT - CALL FlagError("Invalid i value",ERR,ERROR,*999) + CALL FlagError("Invalid i value",err,error,*999) END SELECT ELSE - CALL FlagError("Invalid number of coordinates",ERR,ERROR,*999) + CALL FlagError("Invalid number of coordinates",err,error,*999) ENDIF CASE(COORDINATE_PROLATE_SPHEROIDAL_TYPE) IF(COORDINATE_SYSTEM%NUMBER_OF_DIMENSIONS==3) THEN @@ -1959,20 +1970,20 @@ FUNCTION DXZ_DP(COORDINATE_SYSTEM,I,X,ERR,ERROR) DXZ_DP(2)=SINH(X(1))*COS(X(2))*SIN(X(3))/RD DXZ_DP(3)=COS(X(3))/(FOCUS*SINH(X(1))*SIN(X(2))) CASE DEFAULT - CALL FlagError("Invalid i value",ERR,ERROR,*999) + CALL FlagError("Invalid i value",err,error,*999) END SELECT ELSE - CALL FlagError("Invalid number of coordinates",ERR,ERROR,*999) + CALL FlagError("Invalid number of coordinates",err,error,*999) ENDIF CASE(COORDINATE_OBLATE_SPHEROIDAL_TYPE) - CALL FlagError("Not implemented",ERR,ERROR,*999) + CALL FlagError("Not implemented",err,error,*999) CASE DEFAULT - CALL FlagError("Invalid coordinate type",ERR,ERROR,*999) + CALL FlagError("Invalid coordinate type",err,error,*999) END SELECT EXITS("DXZ_DP") RETURN -999 ERRORSEXITS("DXZ_DP",ERR,ERROR) +999 ERRORSEXITS("DXZ_DP",err,error) RETURN END FUNCTION DXZ_DP @@ -1991,7 +2002,7 @@ END FUNCTION DXZ_DP !================================================================================================================================ ! - FUNCTION D2ZX_DP(COORDINATE_SYSTEM,I,J,X,ERR,ERROR) + FUNCTION D2ZX_DP(COORDINATE_SYSTEM,I,J,X,err,error) !#### Function: D2ZX_DP !### Type: REAL(DP)(SIZE(X,1)) @@ -2005,20 +2016,20 @@ FUNCTION D2ZX_DP(COORDINATE_SYSTEM,I,J,X,ERR,ERROR) TYPE(COORDINATE_SYSTEM_TYPE), INTENT(IN) :: COORDINATE_SYSTEM INTEGER(INTG), INTENT(IN) :: I,J REAL(DP), INTENT(IN) :: X(:) - INTEGER(INTG), INTENT(OUT) :: ERR - TYPE(VARYING_STRING), INTENT(OUT) :: ERROR + INTEGER(INTG), INTENT(OUT) :: err + TYPE(VARYING_STRING), INTENT(OUT) :: error !Function variable REAL(DP) :: D2ZX_DP(SIZE(X,1)) !Local variables REAL(DP) :: FOCUS - ENTERS("D2ZX_DP",ERR,ERROR,*999) + ENTERS("D2ZX_DP",err,error,*999) D2ZX_DP=0.0_DP IF(SIZE(X,1)0.AND.I<=COORDINATE_SYSTEM%NUMBER_OF_DIMENSIONS) THEN DZX_DP(I)=1.0_DP ELSE - CALL FlagError("Invalid i value",ERR,ERROR,*999) + CALL FlagError("Invalid i value",err,error,*999) ENDIF CASE(COORDINATE_CYLINDRICAL_POLAR_TYPE) SELECT CASE(COORDINATE_SYSTEM%NUMBER_OF_DIMENSIONS) @@ -2306,7 +2317,7 @@ FUNCTION DZX_DP(COORDINATE_SYSTEM,I,X,ERR,ERROR) DZX_DP(1)=-X(1)*SIN(X(2)) DZX_DP(2)=X(1)*COS(X(2)) CASE DEFAULT - CALL FlagError("Invalid i value",ERR,ERROR,*999) + CALL FlagError("Invalid i value",err,error,*999) END SELECT CASE(3) SELECT CASE(I) @@ -2323,10 +2334,10 @@ FUNCTION DZX_DP(COORDINATE_SYSTEM,I,X,ERR,ERROR) DZX_DP(2)=0.0_DP DZX_DP(3)=1.0_DP CASE DEFAULT - CALL FlagError("Invalid i value",ERR,ERROR,*999) + CALL FlagError("Invalid i value",err,error,*999) END SELECT CASE DEFAULT - CALL FlagError("Invalid number of coordinates",ERR,ERROR,*999) + CALL FlagError("Invalid number of coordinates",err,error,*999) END SELECT CASE(COORDINATE_SPHERICAL_POLAR_TYPE) IF(COORDINATE_SYSTEM%NUMBER_OF_DIMENSIONS==3) THEN @@ -2344,10 +2355,10 @@ FUNCTION DZX_DP(COORDINATE_SYSTEM,I,X,ERR,ERROR) DZX_DP(2)=-X(1)*SIN(X(2))*SIN(X(3)) DZX_DP(3)=X(1)*COS(X(3)) CASE DEFAULT - CALL FlagError("Invalid i value",ERR,ERROR,*999) + CALL FlagError("Invalid i value",err,error,*999) END SELECT ELSE - CALL FlagError("Invalid number of coordinates",ERR,ERROR,*999) + CALL FlagError("Invalid number of coordinates",err,error,*999) ENDIF CASE(COORDINATE_PROLATE_SPHEROIDAL_TYPE) IF(COORDINATE_SYSTEM%NUMBER_OF_DIMENSIONS==3) THEN @@ -2366,10 +2377,10 @@ FUNCTION DZX_DP(COORDINATE_SYSTEM,I,X,ERR,ERROR) DZX_DP(2)=-FOCUS*SINH(X(1))*SIN(X(2))*SIN(X(3)) DZX_DP(3)=FOCUS*SINH(X(1))*SIN(X(2))*COS(X(3)) CASE DEFAULT - CALL FlagError("Invalid i value",ERR,ERROR,*999) + CALL FlagError("Invalid i value",err,error,*999) END SELECT ELSE - CALL FlagError("Invalid number of coordinates",ERR,ERROR,*999) + CALL FlagError("Invalid number of coordinates",err,error,*999) ENDIF CASE(COORDINATE_OBLATE_SPHEROIDAL_TYPE) IF(COORDINATE_SYSTEM%NUMBER_OF_DIMENSIONS==3) THEN @@ -2388,18 +2399,18 @@ FUNCTION DZX_DP(COORDINATE_SYSTEM,I,X,ERR,ERROR) DZX_DP(2)=0.0_DP DZX_DP(3)=FOCUS*COSH(X(1))*COS(X(2))*COS(X(3)) CASE DEFAULT - CALL FlagError("Invalid i value",ERR,ERROR,*999) + CALL FlagError("Invalid i value",err,error,*999) END SELECT ELSE - CALL FlagError("Invalid number of coordinates",ERR,ERROR,*999) + CALL FlagError("Invalid number of coordinates",err,error,*999) ENDIF CASE DEFAULT - CALL FlagError("Invalid coordinate type",ERR,ERROR,*999) + CALL FlagError("Invalid coordinate type",err,error,*999) END SELECT EXITS("DZX_DP") RETURN -999 ERRORSEXITS("DZX_DP",ERR,ERROR) +999 ERRORSEXITS("DZX_DP",err,error) RETURN END FUNCTION DZX_DP @@ -2422,7 +2433,7 @@ END FUNCTION DZX_DP ! SUBROUTINE COORDINATE_DERIVATIVE_CONVERT_TO_RC_DP(COORDINATE_SYSTEM,PART_DERIV_TYPE,X,Z,& - & ERR,ERROR,*) + & err,error,*) !#### Subroutine: COORDINATE_DERIVATIVE_CONVERT_TO_RC_DP !### Description: @@ -2438,19 +2449,19 @@ SUBROUTINE COORDINATE_DERIVATIVE_CONVERT_TO_RC_DP(COORDINATE_SYSTEM,PART_DERIV_T INTEGER(INTG), INTENT(IN) :: PART_DERIV_TYPE REAL(DP), INTENT(IN) :: X(:,:) REAL(DP), INTENT(OUT) :: Z(:) - INTEGER(INTG), INTENT(OUT) :: ERR - TYPE(VARYING_STRING), INTENT(OUT) :: ERROR + INTEGER(INTG), INTENT(OUT) :: err + TYPE(VARYING_STRING), INTENT(OUT) :: error !Local variables REAL(DP) :: FOCUS - ENTERS("COORDINATE_DERIVATIVE_CONVERT_TO_RC_DP",ERR,ERROR,*999) + ENTERS("COORDINATE_DERIVATIVE_CONVERT_TO_RC_DP",err,error,*999) !!TODO: change all second index X(:,?) numbers to their apropriate constant !!as defined in constants e.g. X(1,2) == X(1,PART_DERIV_S1) IF(SIZE(X,1)=PART_DERIV_TYPE) THEN Z=X(:,PART_DERIV_TYPE) ELSE - CALL FlagError("Invalid derivative type",ERR,ERROR,*999) + CALL FlagError("Invalid derivative type",err,error,*999) ENDIF CASE(COORDINATE_CYLINDRICAL_POLAR_TYPE) SELECT CASE(PART_DERIV_TYPE) CASE(NO_PART_DERIV) - Z=COORDINATE_CONVERT_TO_RC(COORDINATE_SYSTEM,X(:,1),ERR,ERROR) - IF(ERR/=0) GOTO 999 + Z=COORDINATE_CONVERT_TO_RC(COORDINATE_SYSTEM,X(:,1),err,error) + IF(err/=0) GOTO 999 CASE(PART_DERIV_S1) IF(SIZE(X,2)>=2) THEN SELECT CASE(COORDINATE_SYSTEM%NUMBER_OF_DIMENSIONS) @@ -2476,13 +2487,13 @@ SUBROUTINE COORDINATE_DERIVATIVE_CONVERT_TO_RC_DP(COORDINATE_SYSTEM,PART_DERIV_T Z(2)=SIN(X(2,1))*X(1,2)+X(1,1)*COS(X(2,1))*X(2,2) !d(y)/d(s1) Z(3)=X(3,2) !d(z)/d(s1) CASE DEFAULT - CALL FlagError("Invalid number of coordinates",ERR,ERROR,*999) + CALL FlagError("Invalid number of coordinates",err,error,*999) END SELECT ELSE - CALL FlagError("Not enough X derivatives supplied",ERR,ERROR,*999) + CALL FlagError("Not enough X derivatives supplied",err,error,*999) ENDIF CASE(PART_DERIV_S1_S1) - CALL FlagError("Not implemented",ERR,ERROR,*999) + CALL FlagError("Not implemented",err,error,*999) CASE(PART_DERIV_S2) IF(SIZE(X,2)>=4) THEN SELECT CASE(COORDINATE_SYSTEM%NUMBER_OF_DIMENSIONS) @@ -2494,13 +2505,13 @@ SUBROUTINE COORDINATE_DERIVATIVE_CONVERT_TO_RC_DP(COORDINATE_SYSTEM,PART_DERIV_T Z(2)=SIN(X(2,1))*X(1,4)+X(1,1)*COS(X(2,1))*X(2,4) !d(y)/d(s2) Z(3)=X(3,4) !d(z)/d(s2) CASE DEFAULT - CALL FlagError("Invalid number of coordinates",ERR,ERROR,*999) + CALL FlagError("Invalid number of coordinates",err,error,*999) END SELECT ELSE - CALL FlagError("Not enough X derivatives supplied",ERR,ERROR,*999) + CALL FlagError("Not enough X derivatives supplied",err,error,*999) ENDIF CASE(PART_DERIV_S2_S2) - CALL FlagError("Not implemented",ERR,ERROR,*999) + CALL FlagError("Not implemented",err,error,*999) CASE(PART_DERIV_S1_S2) IF(SIZE(X,2)>=6) THEN SELECT CASE(SIZE(X,1)) @@ -2520,10 +2531,10 @@ SUBROUTINE COORDINATE_DERIVATIVE_CONVERT_TO_RC_DP(COORDINATE_SYSTEM,PART_DERIV_T & X(2,2)*X(2,4)+X(1,1)*COS(X(2,1))*X(2,6)) !d2(y)/d(s1)d(s2) Z(3)=X(3,6) !d2(z)/d(s1)d(s2) CASE DEFAULT - CALL FlagError("Invalid number of coordinates",ERR,ERROR,*999) + CALL FlagError("Invalid number of coordinates",err,error,*999) END SELECT ELSE - CALL FlagError("Not enough X derivatives supplied",ERR,ERROR,*999) + CALL FlagError("Not enough X derivatives supplied",err,error,*999) ENDIF CASE(PART_DERIV_S3) IF(SIZE(X,2)>=7) THEN @@ -2536,13 +2547,13 @@ SUBROUTINE COORDINATE_DERIVATIVE_CONVERT_TO_RC_DP(COORDINATE_SYSTEM,PART_DERIV_T Z(2)=SIN(X(2,1))*X(1,7)+X(1,1)*COS(X(2,1))*X(2,7) !d(y)/d(s3) Z(3)=X(3,7) !d(z)/d(s3) CASE DEFAULT - CALL FlagError("Invalid number of coordinates",ERR,ERROR,*999) + CALL FlagError("Invalid number of coordinates",err,error,*999) END SELECT ELSE - CALL FlagError("Not enough X derivatives supplied",ERR,ERROR,*999) + CALL FlagError("Not enough X derivatives supplied",err,error,*999) ENDIF CASE(PART_DERIV_S3_S3) - CALL FlagError("Not implemented",ERR,ERROR,*999) + CALL FlagError("Not implemented",err,error,*999) CASE(PART_DERIV_S1_S3) IF(SIZE(X,2)>=9) THEN SELECT CASE(COORDINATE_SYSTEM%NUMBER_OF_DIMENSIONS) @@ -2558,10 +2569,10 @@ SUBROUTINE COORDINATE_DERIVATIVE_CONVERT_TO_RC_DP(COORDINATE_SYSTEM,PART_DERIV_T & X(2,2)*X(2,7)+X(1,1)*COS(X(2,1))*X(2,9)) !d2(y)/d(s1)d(s3) Z(3)=X(3,9) !d2(z)/d(s1)d(s3) CASE DEFAULT - CALL FlagError("Invalid number of coordinates",ERR,ERROR,*999) + CALL FlagError("Invalid number of coordinates",err,error,*999) END SELECT ELSE - CALL FlagError("Not enough X derivatives supplied",ERR,ERROR,*999) + CALL FlagError("Not enough X derivatives supplied",err,error,*999) ENDIF CASE(PART_DERIV_S2_S3) IF(SIZE(X,2)>=10) THEN @@ -2578,10 +2589,10 @@ SUBROUTINE COORDINATE_DERIVATIVE_CONVERT_TO_RC_DP(COORDINATE_SYSTEM,PART_DERIV_T & X(2,4)*X(2,7)+X(1,1)*COS(X(2,1))*X(2,10)) !d2(y)/d(s2)d(s3) Z(3)=X(3,10) !d2(z)/d(s2)d(s3) CASE DEFAULT - CALL FlagError("Invalid number of coordinates",ERR,ERROR,*999) + CALL FlagError("Invalid number of coordinates",err,error,*999) END SELECT ELSE - CALL FlagError("Not enough X derivatives supplied",ERR,ERROR,*999) + CALL FlagError("Not enough X derivatives supplied",err,error,*999) ENDIF CASE(PART_DERIV_S1_S2_S3) IF(SIZE(X,2)>=11) THEN @@ -2612,37 +2623,37 @@ SUBROUTINE COORDINATE_DERIVATIVE_CONVERT_TO_RC_DP(COORDINATE_SYSTEM,PART_DERIV_T & COS(X(2,1))*X(2,11) !d3(y)/d(s1)d(s2)d(s3) Z(3)=X(3,11) !d3(z)/d(s1)d(s2)d(s3) CASE DEFAULT - CALL FlagError("Invalid number of coordinates",ERR,ERROR,*999) + CALL FlagError("Invalid number of coordinates",err,error,*999) END SELECT ELSE - CALL FlagError("Not enough X derivatives supplied",ERR,ERROR,*999) + CALL FlagError("Not enough X derivatives supplied",err,error,*999) ENDIF CASE DEFAULT - CALL FlagError("Invalid partial derivative type",ERR,ERROR,*999) + CALL FlagError("Invalid partial derivative type",err,error,*999) END SELECT CASE(COORDINATE_SPHERICAL_POLAR_TYPE) IF(COORDINATE_SYSTEM%NUMBER_OF_DIMENSIONS==3) THEN SELECT CASE(PART_DERIV_TYPE) CASE(NO_PART_DERIV) - Z=COORDINATE_CONVERT_TO_RC(COORDINATE_SYSTEM,X(:,1),ERR,ERROR) - IF(ERR/=0) GOTO 999 + Z=COORDINATE_CONVERT_TO_RC(COORDINATE_SYSTEM,X(:,1),err,error) + IF(err/=0) GOTO 999 CASE(PART_DERIV_S1,PART_DERIV_S1_S1,PART_DERIV_S2,PART_DERIV_S2_S2,& & PART_DERIV_S1_S2,PART_DERIV_S3,PART_DERIV_S3_S3,& & PART_DERIV_S1_S3,PART_DERIV_S2_S3,PART_DERIV_S1_S2_S3) - CALL FlagError("Not implemented",ERR,ERROR,*999) + CALL FlagError("Not implemented",err,error,*999) CASE DEFAULT - CALL FlagError("Invalid partial derivative type",ERR,ERROR,*999) + CALL FlagError("Invalid partial derivative type",err,error,*999) END SELECT ELSE - CALL FlagError("Invalid number of coordinates",ERR,ERROR,*999) + CALL FlagError("Invalid number of coordinates",err,error,*999) ENDIF CASE(COORDINATE_PROLATE_SPHEROIDAL_TYPE) IF(COORDINATE_SYSTEM%NUMBER_OF_DIMENSIONS==3) THEN FOCUS=COORDINATE_SYSTEM%FOCUS SELECT CASE(PART_DERIV_TYPE) CASE(NO_PART_DERIV) - Z=COORDINATE_CONVERT_TO_RC(COORDINATE_SYSTEM,X(:,1),ERR,ERROR) - IF(ERR/=0) GOTO 999 + Z=COORDINATE_CONVERT_TO_RC(COORDINATE_SYSTEM,X(:,1),err,error) + IF(err/=0) GOTO 999 CASE(PART_DERIV_S1) IF(SIZE(X,2)>=2) THEN Z(1)=FOCUS*SINH(X(1,1))*COS(X(2,1))*X(1,2)-& @@ -2656,10 +2667,10 @@ SUBROUTINE COORDINATE_DERIVATIVE_CONVERT_TO_RC_DP(COORDINATE_SYSTEM,PART_DERIV_T & FOCUS*SINH(X(1,1))*SIN(X(2,1))*COS(X(3,1))*& & X(3,2) !d(z)/d(s1) ELSE - CALL FlagError("Invalid derivative type",ERR,ERROR,*999) + CALL FlagError("Invalid derivative type",err,error,*999) ENDIF CASE(PART_DERIV_S1_S1) - CALL FlagError("Not implemented",ERR,ERROR,*999) + CALL FlagError("Not implemented",err,error,*999) CASE(PART_DERIV_S2) IF(SIZE(X,2)>=4) THEN Z(1)=FOCUS*SINH(X(1,1))*COS(X(2,1))*X(1,4)-& @@ -2674,10 +2685,10 @@ SUBROUTINE COORDINATE_DERIVATIVE_CONVERT_TO_RC_DP(COORDINATE_SYSTEM,PART_DERIV_T & X(3,4) !d(z)/d(s2) ELSE CALL FlagError("Not enough X derivatives supplied",& - & ERR,ERROR,*999) + & err,error,*999) ENDIF CASE(PART_DERIV_S2_S2) - CALL FlagError("Not implemented",ERR,ERROR,*999) + CALL FlagError("Not implemented",err,error,*999) CASE(PART_DERIV_S1_S2) IF(SIZE(X,2)>=6) THEN Z(1)=FOCUS*(SINH(X(1,1))*COS(X(2,1))*X(1,6)+& @@ -2714,7 +2725,7 @@ SUBROUTINE COORDINATE_DERIVATIVE_CONVERT_TO_RC_DP(COORDINATE_SYSTEM,PART_DERIV_T & X(3,4))) !d2(z)/d(s1)d(s2) ELSE CALL FlagError("Not enough X derivatives supplied",& - & ERR,ERROR,*999) + & err,error,*999) ENDIF CASE(PART_DERIV_S3) IF(SIZE(X,2)>=7) THEN @@ -2730,10 +2741,10 @@ SUBROUTINE COORDINATE_DERIVATIVE_CONVERT_TO_RC_DP(COORDINATE_SYSTEM,PART_DERIV_T & X(3,7) !d(z)/d(s3) ELSE CALL FlagError("Not enough X derivatives supplied",& - & ERR,ERROR,*999) + & err,error,*999) ENDIF CASE(PART_DERIV_S3_S3) - CALL FlagError("Not implemented",ERR,ERROR,*999) + CALL FlagError("Not implemented",err,error,*999) CASE(PART_DERIV_S1_S3) IF(SIZE(X,2)>=9) THEN Z(1)=FOCUS*(SINH(X(1,1))*COS(X(2,1))*X(1,9)+& @@ -2770,7 +2781,7 @@ SUBROUTINE COORDINATE_DERIVATIVE_CONVERT_TO_RC_DP(COORDINATE_SYSTEM,PART_DERIV_T & X(3,7))) !d2(z)/d(s1)d(s3) ELSE CALL FlagError("Not enough X derivatives supplied",& - & ERR,ERROR,*999) + & err,error,*999) ENDIF CASE(PART_DERIV_S2_S3) IF(SIZE(X,2)>=10) THEN @@ -2808,7 +2819,7 @@ SUBROUTINE COORDINATE_DERIVATIVE_CONVERT_TO_RC_DP(COORDINATE_SYSTEM,PART_DERIV_T & X(3,7))) !d2(z)/d(s2)d(s3) ELSE CALL FlagError("Not enough X derivatives supplied",& - & ERR,ERROR,*999) + & err,error,*999) ENDIF CASE(PART_DERIV_S1_S2_S3) IF(SIZE(X,2)>=11) THEN @@ -2948,10 +2959,10 @@ SUBROUTINE COORDINATE_DERIVATIVE_CONVERT_TO_RC_DP(COORDINATE_SYSTEM,PART_DERIV_T & X(3,11)) !d3(z)/d(s1)d(s2)d(s3) ELSE CALL FlagError("Not enough X derivatives supplied",& - & ERR,ERROR,*999) + & err,error,*999) ENDIF CASE DEFAULT - CALL FlagError("Invalid partial derivative type",ERR,ERROR,*999) + CALL FlagError("Invalid partial derivative type",err,error,*999) END SELECT ENDIF CASE(COORDINATE_OBLATE_SPHEROIDAL_TYPE) @@ -2959,29 +2970,29 @@ SUBROUTINE COORDINATE_DERIVATIVE_CONVERT_TO_RC_DP(COORDINATE_SYSTEM,PART_DERIV_T FOCUS=COORDINATE_SYSTEM%FOCUS SELECT CASE(PART_DERIV_TYPE) CASE(NO_PART_DERIV) - Z=COORDINATE_CONVERT_TO_RC(COORDINATE_SYSTEM,X(:,1),ERR,ERROR) - IF(ERR/=0) GOTO 999 + Z=COORDINATE_CONVERT_TO_RC(COORDINATE_SYSTEM,X(:,1),err,error) + IF(err/=0) GOTO 999 CASE(PART_DERIV_S1,PART_DERIV_S1_S1,PART_DERIV_S2,PART_DERIV_S2_S2,& & PART_DERIV_S1_S2,PART_DERIV_S3,PART_DERIV_S3_S3,& & PART_DERIV_S1_S3,PART_DERIV_S2_S3,PART_DERIV_S1_S2_S3) - CALL FlagError("Not implemented",ERR,ERROR,*999) + CALL FlagError("Not implemented",err,error,*999) CASE DEFAULT - CALL FlagError("Invalid partial derivative type",ERR,ERROR,*999) + CALL FlagError("Invalid partial derivative type",err,error,*999) END SELECT ELSE - CALL FlagError("Invalid number of coordinates",ERR,ERROR,*999) + CALL FlagError("Invalid number of coordinates",err,error,*999) ENDIF CASE DEFAULT - CALL FlagError("Invalid coordinate type",ERR,ERROR,*999) + CALL FlagError("Invalid coordinate type",err,error,*999) END SELECT ELSE CALL FlagError("The sizes of the vectors X and Z do not match",& - & ERR,ERROR,*999) + & err,error,*999) ENDIF EXITS("COORDINATE_DERIVATIVE_CONVERT_TO_RC_DP") RETURN -999 ERRORSEXITS("COORDINATE_DERIVATIVE_CONVERT_TO_RC_DP",ERR,ERROR) +999 ERRORSEXITS("COORDINATE_DERIVATIVE_CONVERT_TO_RC_DP",err,error) RETURN 1 END SUBROUTINE COORDINATE_DERIVATIVE_CONVERT_TO_RC_DP @@ -2990,7 +3001,7 @@ END SUBROUTINE COORDINATE_DERIVATIVE_CONVERT_TO_RC_DP ! SUBROUTINE COORDINATE_DERIVATIVE_CONVERT_TO_RC_SP(COORDINATE_SYSTEM,PART_DERIV_TYPE,X,Z,& - & ERR,ERROR,*) + & err,error,*) !#### Subroutine: COORDINATE_DERIVATIVE_CONVERT_TO_RC_SP !### Description: @@ -3006,19 +3017,19 @@ SUBROUTINE COORDINATE_DERIVATIVE_CONVERT_TO_RC_SP(COORDINATE_SYSTEM,PART_DERIV_T INTEGER(INTG), INTENT(IN) :: PART_DERIV_TYPE REAL(SP), INTENT(IN) :: X(:,:) REAL(SP), INTENT(OUT) :: Z(:) - INTEGER(INTG), INTENT(OUT) :: ERR - TYPE(VARYING_STRING), INTENT(OUT) :: ERROR + INTEGER(INTG), INTENT(OUT) :: err + TYPE(VARYING_STRING), INTENT(OUT) :: error !Local variables REAL(SP) :: FOCUS - ENTERS("COORDINATE_DERIVATIVE_CONVERT_TO_RC_SP",ERR,ERROR,*999) + ENTERS("COORDINATE_DERIVATIVE_CONVERT_TO_RC_SP",err,error,*999) !!TODO: change all second index X(:,?) numbers to their apropriate constant !!as defined in constants e.g. X(1,2) == X(1,PART_DERIV_S1) IF(SIZE(X,1)=PART_DERIV_TYPE) THEN Z=X(:,PART_DERIV_TYPE) ELSE - CALL FlagError("Invalid partial derivative type",ERR,ERROR,*999) + CALL FlagError("Invalid partial derivative type",err,error,*999) ENDIF CASE(COORDINATE_CYLINDRICAL_POLAR_TYPE) SELECT CASE(PART_DERIV_TYPE) CASE(NO_PART_DERIV) - Z=COORDINATE_CONVERT_TO_RC(COORDINATE_SYSTEM,X(:,1),ERR,ERROR) - IF(ERR/=0) GOTO 999 + Z=COORDINATE_CONVERT_TO_RC(COORDINATE_SYSTEM,X(:,1),err,error) + IF(err/=0) GOTO 999 CASE(PART_DERIV_S1) IF(SIZE(X,2)>=2) THEN SELECT CASE(COORDINATE_SYSTEM%NUMBER_OF_DIMENSIONS) @@ -3044,13 +3055,13 @@ SUBROUTINE COORDINATE_DERIVATIVE_CONVERT_TO_RC_SP(COORDINATE_SYSTEM,PART_DERIV_T Z(2)=SIN(X(2,1))*X(1,2)+X(1,1)*COS(X(2,1))*X(2,2) !d(y)/d(s1) Z(3)=X(3,2) !d(z)/d(s1) CASE DEFAULT - CALL FlagError("Invalid number of coordinates",ERR,ERROR,*999) + CALL FlagError("Invalid number of coordinates",err,error,*999) END SELECT ELSE - CALL FlagError("Not enough X derivatives supplied",ERR,ERROR,*999) + CALL FlagError("Not enough X derivatives supplied",err,error,*999) ENDIF CASE(PART_DERIV_S1_S1) - CALL FlagError("Not implemented",ERR,ERROR,*999) + CALL FlagError("Not implemented",err,error,*999) CASE(PART_DERIV_S2) IF(SIZE(X,2)>=4) THEN SELECT CASE(COORDINATE_SYSTEM%NUMBER_OF_DIMENSIONS) @@ -3062,13 +3073,13 @@ SUBROUTINE COORDINATE_DERIVATIVE_CONVERT_TO_RC_SP(COORDINATE_SYSTEM,PART_DERIV_T Z(2)=SIN(X(2,1))*X(1,4)+X(1,1)*COS(X(2,1))*X(2,4) !d(y)/d(s2) Z(3)=X(3,4) !d(z)/d(s2) CASE DEFAULT - CALL FlagError("Invalid number of coordinates",ERR,ERROR,*999) + CALL FlagError("Invalid number of coordinates",err,error,*999) END SELECT ELSE - CALL FlagError("Not enough X derivatives supplied",ERR,ERROR,*999) + CALL FlagError("Not enough X derivatives supplied",err,error,*999) ENDIF CASE(PART_DERIV_S2_S2) - CALL FlagError("Not implemented",ERR,ERROR,*999) + CALL FlagError("Not implemented",err,error,*999) CASE(PART_DERIV_S1_S2) IF(SIZE(X,2)>=6) THEN SELECT CASE(COORDINATE_SYSTEM%NUMBER_OF_DIMENSIONS) @@ -3088,10 +3099,10 @@ SUBROUTINE COORDINATE_DERIVATIVE_CONVERT_TO_RC_SP(COORDINATE_SYSTEM,PART_DERIV_T & X(2,2)*X(2,4)+X(1,1)*COS(X(2,1))*X(2,6)) !d2(y)/d(s1)d(s2) Z(3)=X(3,6) !d2(z)/d(s1)d(s2) CASE DEFAULT - CALL FlagError("Invalid number of coordinates",ERR,ERROR,*999) + CALL FlagError("Invalid number of coordinates",err,error,*999) END SELECT ELSE - CALL FlagError("Not enough X derivatives supplied",ERR,ERROR,*999) + CALL FlagError("Not enough X derivatives supplied",err,error,*999) ENDIF CASE(PART_DERIV_S3) IF(SIZE(X,2)>=7) THEN @@ -3104,13 +3115,13 @@ SUBROUTINE COORDINATE_DERIVATIVE_CONVERT_TO_RC_SP(COORDINATE_SYSTEM,PART_DERIV_T Z(2)=SIN(X(2,1))*X(1,7)+X(1,1)*COS(X(2,1))*X(2,7) !d(y)/d(s3) Z(3)=X(3,7) !d(z)/d(s3) CASE DEFAULT - CALL FlagError("Invalid number of coordinates",ERR,ERROR,*999) + CALL FlagError("Invalid number of coordinates",err,error,*999) END SELECT ELSE - CALL FlagError("Not enough X derivatives supplied",ERR,ERROR,*999) + CALL FlagError("Not enough X derivatives supplied",err,error,*999) ENDIF CASE(PART_DERIV_S3_S3) - CALL FlagError("Not implemented",ERR,ERROR,*999) + CALL FlagError("Not implemented",err,error,*999) CASE(PART_DERIV_S1_S3) IF(SIZE(X,2)>=9) THEN SELECT CASE(COORDINATE_SYSTEM%NUMBER_OF_DIMENSIONS) @@ -3126,10 +3137,10 @@ SUBROUTINE COORDINATE_DERIVATIVE_CONVERT_TO_RC_SP(COORDINATE_SYSTEM,PART_DERIV_T & X(2,2)*X(2,7)+X(1,1)*COS(X(2,1))*X(2,9)) !d2(y)/d(s1)d(s3) Z(3)=X(3,9) !d2(z)/d(s1)d(s3) CASE DEFAULT - CALL FlagError("Invalid number of coordinates",ERR,ERROR,*999) + CALL FlagError("Invalid number of coordinates",err,error,*999) END SELECT ELSE - CALL FlagError("Not enough X derivatives supplied",ERR,ERROR,*999) + CALL FlagError("Not enough X derivatives supplied",err,error,*999) ENDIF CASE(PART_DERIV_S2_S3) IF(SIZE(X,2)>=10) THEN @@ -3146,10 +3157,10 @@ SUBROUTINE COORDINATE_DERIVATIVE_CONVERT_TO_RC_SP(COORDINATE_SYSTEM,PART_DERIV_T & X(2,4)*X(2,7)+X(1,1)*COS(X(2,1))*X(2,10)) !d2(y)/d(s2)d(s3) Z(3)=X(3,10) !d2(z)/d(s2)d(s3) CASE DEFAULT - CALL FlagError("Invalid number of coordinates",ERR,ERROR,*999) + CALL FlagError("Invalid number of coordinates",err,error,*999) END SELECT ELSE - CALL FlagError("Not enough X derivatives supplied",ERR,ERROR,*999) + CALL FlagError("Not enough X derivatives supplied",err,error,*999) ENDIF CASE(PART_DERIV_S1_S2_S3) IF(SIZE(X,2)>=11) THEN @@ -3180,37 +3191,37 @@ SUBROUTINE COORDINATE_DERIVATIVE_CONVERT_TO_RC_SP(COORDINATE_SYSTEM,PART_DERIV_T & COS(X(2,1))*X(2,11) !d3(y)/d(s1)d(s2)d(s3) Z(3)=X(3,11) !d3(z)/d(s1)d(s2)d(s3) CASE DEFAULT - CALL FlagError("Invalid number of coordinates",ERR,ERROR,*999) + CALL FlagError("Invalid number of coordinates",err,error,*999) END SELECT ELSE - CALL FlagError("Not enough X derivatives supplied",ERR,ERROR,*999) + CALL FlagError("Not enough X derivatives supplied",err,error,*999) ENDIF CASE DEFAULT - CALL FlagError("Invalid partial derivative type",ERR,ERROR,*999) + CALL FlagError("Invalid partial derivative type",err,error,*999) END SELECT CASE(COORDINATE_SPHERICAL_POLAR_TYPE) IF(COORDINATE_SYSTEM%NUMBER_OF_DIMENSIONS==3) THEN SELECT CASE(PART_DERIV_TYPE) CASE(NO_PART_DERIV) - Z=COORDINATE_CONVERT_TO_RC(COORDINATE_SYSTEM,X(:,1),ERR,ERROR) - IF(ERR/=0) GOTO 999 + Z=COORDINATE_CONVERT_TO_RC(COORDINATE_SYSTEM,X(:,1),err,error) + IF(err/=0) GOTO 999 CASE(PART_DERIV_S1,PART_DERIV_S1_S1,PART_DERIV_S2,PART_DERIV_S2_S2,& & PART_DERIV_S1_S2,PART_DERIV_S3,PART_DERIV_S3_S3,& & PART_DERIV_S1_S3,PART_DERIV_S2_S3,PART_DERIV_S1_S2_S3) - CALL FlagError("Not implemented",ERR,ERROR,*999) + CALL FlagError("Not implemented",err,error,*999) CASE DEFAULT - CALL FlagError("Invalid partial derivative type",ERR,ERROR,*999) + CALL FlagError("Invalid partial derivative type",err,error,*999) END SELECT ELSE - CALL FlagError("Invalid number of coordinates",ERR,ERROR,*999) + CALL FlagError("Invalid number of coordinates",err,error,*999) ENDIF CASE(COORDINATE_PROLATE_SPHEROIDAL_TYPE) IF(COORDINATE_SYSTEM%NUMBER_OF_DIMENSIONS==3) THEN FOCUS=REAL(COORDINATE_SYSTEM%FOCUS,SP) SELECT CASE(PART_DERIV_TYPE) CASE(NO_PART_DERIV) - Z=COORDINATE_CONVERT_TO_RC(COORDINATE_SYSTEM,X(:,1),ERR,ERROR) - IF(ERR/=0) GOTO 999 + Z=COORDINATE_CONVERT_TO_RC(COORDINATE_SYSTEM,X(:,1),err,error) + IF(err/=0) GOTO 999 CASE(PART_DERIV_S1) IF(SIZE(X,2)>=2) THEN Z(1)=FOCUS*SINH(X(1,1))*COS(X(2,1))*X(1,2)-& @@ -3225,10 +3236,10 @@ SUBROUTINE COORDINATE_DERIVATIVE_CONVERT_TO_RC_SP(COORDINATE_SYSTEM,PART_DERIV_T & X(3,2) !d(z)/d(s1) ELSE CALL FlagError("Not enough X derivatives supplied", & - & ERR,ERROR,*999) + & err,error,*999) ENDIF CASE(PART_DERIV_S1_S1) - CALL FlagError("Not implemented",ERR,ERROR,*999) + CALL FlagError("Not implemented",err,error,*999) CASE(PART_DERIV_S2) IF(SIZE(X,2)>=4) THEN Z(1)=FOCUS*SINH(X(1,1))*COS(X(2,1))*X(1,4)-& @@ -3243,10 +3254,10 @@ SUBROUTINE COORDINATE_DERIVATIVE_CONVERT_TO_RC_SP(COORDINATE_SYSTEM,PART_DERIV_T & X(3,4) !d(z)/d(s2) ELSE CALL FlagError("Not enough X derivatives supplied",& - & ERR,ERROR,*999) + & err,error,*999) ENDIF CASE(PART_DERIV_S2_S2) - CALL FlagError("Not implemented",ERR,ERROR,*999) + CALL FlagError("Not implemented",err,error,*999) CASE(PART_DERIV_S1_S2) IF(SIZE(X,2)>=6) THEN Z(1)=FOCUS*(SINH(X(1,1))*COS(X(2,1))*X(1,6)+& @@ -3283,7 +3294,7 @@ SUBROUTINE COORDINATE_DERIVATIVE_CONVERT_TO_RC_SP(COORDINATE_SYSTEM,PART_DERIV_T & X(3,4))) !d2(z)/d(s1)d(s2) ELSE CALL FlagError("Not enough X derivatives supplied",& - & ERR,ERROR,*999) + & err,error,*999) ENDIF CASE(PART_DERIV_S3) IF(SIZE(X,2)>=7) THEN @@ -3299,10 +3310,10 @@ SUBROUTINE COORDINATE_DERIVATIVE_CONVERT_TO_RC_SP(COORDINATE_SYSTEM,PART_DERIV_T & X(3,7) !d(z)/d(s3) ELSE CALL FlagError("Not enough X derivatives supplied",& - & ERR,ERROR,*999) + & err,error,*999) ENDIF CASE(PART_DERIV_S3_S3) - CALL FlagError("Not implemented",ERR,ERROR,*999) + CALL FlagError("Not implemented",err,error,*999) CASE(PART_DERIV_S1_S3) IF(SIZE(X,2)>=9) THEN Z(1)=FOCUS*(SINH(X(1,1))*COS(X(2,1))*X(1,9)+& @@ -3339,7 +3350,7 @@ SUBROUTINE COORDINATE_DERIVATIVE_CONVERT_TO_RC_SP(COORDINATE_SYSTEM,PART_DERIV_T & X(3,7))) !d2(z)/d(s1)d(s3) ELSE CALL FlagError("Not enough X derivatives supplied",& - & ERR,ERROR,*999) + & err,error,*999) ENDIF CASE(PART_DERIV_S2_S3) IF(SIZE(X,2)>=10) THEN @@ -3377,7 +3388,7 @@ SUBROUTINE COORDINATE_DERIVATIVE_CONVERT_TO_RC_SP(COORDINATE_SYSTEM,PART_DERIV_T & X(3,7))) !d2(z)/d(s2)d(s3) ELSE CALL FlagError("Not enough X derivatives supplied",& - & ERR,ERROR,*999) + & err,error,*999) ENDIF CASE(PART_DERIV_S1_S2_S3) IF(SIZE(X,2)>=11) THEN @@ -3517,39 +3528,39 @@ SUBROUTINE COORDINATE_DERIVATIVE_CONVERT_TO_RC_SP(COORDINATE_SYSTEM,PART_DERIV_T & X(3,11)) !d3(z)/d(s1)d(s2)d(s3) ELSE CALL FlagError("Not enough X derivatives supplied",& - & ERR,ERROR,*999) + & err,error,*999) ENDIF CASE DEFAULT - CALL FlagError("Invalid partial derivative type",ERR,ERROR,*999) + CALL FlagError("Invalid partial derivative type",err,error,*999) END SELECT ENDIF CASE(COORDINATE_OBLATE_SPHEROIDAL_TYPE) IF(COORDINATE_SYSTEM%NUMBER_OF_DIMENSIONS==3) THEN SELECT CASE(PART_DERIV_TYPE) CASE(NO_PART_DERIV) - Z=COORDINATE_CONVERT_TO_RC(COORDINATE_SYSTEM,X(:,1),ERR,ERROR) - IF(ERR/=0) GOTO 999 + Z=COORDINATE_CONVERT_TO_RC(COORDINATE_SYSTEM,X(:,1),err,error) + IF(err/=0) GOTO 999 CASE(PART_DERIV_S1,PART_DERIV_S1_S1,PART_DERIV_S2,PART_DERIV_S2_S2,& & PART_DERIV_S1_S2,PART_DERIV_S3,PART_DERIV_S3_S3,& & PART_DERIV_S1_S3,PART_DERIV_S2_S3,PART_DERIV_S1_S2_S3) - CALL FlagError("Not implemented",ERR,ERROR,*999) + CALL FlagError("Not implemented",err,error,*999) CASE DEFAULT - CALL FlagError("Invalid partial derivative type",ERR,ERROR,*999) + CALL FlagError("Invalid partial derivative type",err,error,*999) END SELECT ELSE - CALL FlagError("Invalid number of coordinates",ERR,ERROR,*999) + CALL FlagError("Invalid number of coordinates",err,error,*999) ENDIF CASE DEFAULT - CALL FlagError("Invalid coordinate type",ERR,ERROR,*999) + CALL FlagError("Invalid coordinate type",err,error,*999) END SELECT ELSE CALL FlagError("The sizes of the vectors X and Z do not match",& - & ERR,ERROR,*999) + & err,error,*999) ENDIF EXITS("COORDINATE_DERIVATIVE_CONVERT_TO_RC_SP") RETURN -999 ERRORSEXITS("COORDINATE_DERIVATIVE_CONVERT_TO_RC_SP",ERR,ERROR) +999 ERRORSEXITS("COORDINATE_DERIVATIVE_CONVERT_TO_RC_SP",err,error) RETURN 1 END SUBROUTINE COORDINATE_DERIVATIVE_CONVERT_TO_RC_SP @@ -3560,21 +3571,21 @@ END SUBROUTINE COORDINATE_DERIVATIVE_CONVERT_TO_RC_SP !>Calculates the norm of a derivative in a coordinate system identified by COORDINATE_SYSTEM at the given interpolated !>point and returns the value in NORM for single precision coordinates. PART_DERIV_INDEX is used to select the !>appropriate partial derivative (i.e., wrt S1, S2 or S3) to normalise. - SUBROUTINE COORDINATE_DERIVATIVE_NORM(COORDINATE_SYSTEM,PART_DERIV_INDEX,INTERPOLATED_POINT,DERIV_NORM,ERR,ERROR,*) + SUBROUTINE COORDINATE_DERIVATIVE_NORM(COORDINATE_SYSTEM,PART_DERIV_INDEX,INTERPOLATED_POINT,DERIV_NORM,err,error,*) !Argument variables TYPE(COORDINATE_SYSTEM_TYPE), POINTER :: COORDINATE_SYSTEM !Adjusts the interpolation for non-rectangular cartesian coordinate systems. - SUBROUTINE COORDINATE_INTERPOLATION_ADJUST(COORDINATE_SYSTEM,PARTIAL_DERIVATIVE_INDEX,VALUE,ERR,ERROR,*) + SUBROUTINE COORDINATE_INTERPOLATION_ADJUST(COORDINATE_SYSTEM,PARTIAL_DERIVATIVE_INDEX,VALUE,err,error,*) !Argument variables TYPE(COORDINATE_SYSTEM_TYPE), POINTER :: COORDINATE_SYSTEM !Adjusts the interpolation parameters for non-rectangular cartesian coordinate systems. - SUBROUTINE COORDINATE_INTERPOLATION_PARAMETERS_ADJUST(COORDINATE_SYSTEM,INTERPOLATION_PARAMETERS,ERR,ERROR,*) + SUBROUTINE COORDINATE_INTERPOLATION_PARAMETERS_ADJUST(COORDINATE_SYSTEM,INTERPOLATION_PARAMETERS,err,error,*) !Argument variables TYPE(COORDINATE_SYSTEM_TYPE), POINTER :: COORDINATE_SYSTEM !Finalises the coordinate systems and destroys all coordinate systems. - SUBROUTINE COORDINATE_SYSTEMS_FINALISE(ERR,ERROR,*) + SUBROUTINE CoordinateSystems_Finalise(coordinateSystems,err,error,*) !Argument variables - INTEGER(INTG), INTENT(OUT) :: ERR !Initialises the coordinate systems and creates the world coordinate system. - SUBROUTINE COORDINATE_SYSTEMS_INITIALISE(ERR,ERROR,*) + !>Initialises the coordinate systems and creates the world coordinate system for a context. + SUBROUTINE CoordinateSystems_Initialise(context,err,error,*) !Argument variables - INTEGER(INTG), INTENT(OUT) :: ERR !context + context%coordinateSystems%numberOfCoordinateSystems=0 + NULLIFY(context%coordinateSystems%coordinateSystems) + !Add in a world coordinate system + ALLOCATE(context%coordinateSystems%coordinateSystems(1),STAT=err) + IF(err/=0) CALL FlagError("Could not allocate list of coordinate systems.",err,error,*999) !Create the default RC World cooordinate system - ALLOCATE(coordinateSystems%coordinateSystems(1)%ptr,STAT=ERR) - IF(ERR/=0) CALL FlagError("Could not allocate world coordinate system.",ERR,ERROR,*999) - coordinateSystems%coordinateSystems(1)%ptr%USER_NUMBER=0 - coordinateSystems%coordinateSystems(1)%ptr%TYPE=COORDINATE_RECTANGULAR_CARTESIAN_TYPE - coordinateSystems%coordinateSystems(1)%ptr%NUMBER_OF_DIMENSIONS=3 - coordinateSystems%coordinateSystems(1)%ptr%FOCUS=1.0_DP - coordinateSystems%coordinateSystems(1)%ptr%ORIGIN=(/0.0_DP,0.0_DP,0.0_DP/) - coordinateSystems%coordinateSystems(1)%ptr%ORIENTATION=RESHAPE(& - & (/1.0_DP,0.0_DP,0.0_DP, & - & 0.0_DP,1.0_DP,0.0_DP, & - & 0.0_DP,0.0_DP,1.0_DP/), & - & (/3,3/)) - coordinateSystems%coordinateSystems(1)%ptr%COORDINATE_SYSTEM_FINISHED=.TRUE. - coordinateSystems%numberOfCoordinateSystems=1 + ALLOCATE(context%coordinateSystems%coordinateSystems(1)%ptr,STAT=err) + IF(err/=0) CALL FlagError("Could not allocate world coordinate system.",err,error,*999) + context%coordinateSystems%coordinateSystems(1)%ptr%USER_NUMBER=0 + context%coordinateSystems%coordinateSystems(1)%ptr%type=COORDINATE_RECTANGULAR_CARTESIAN_TYPE + context%coordinateSystems%coordinateSystems(1)%ptr%NUMBER_OF_DIMENSIONS=3 + context%coordinateSystems%coordinateSystems(1)%ptr%focus=1.0_DP + context%coordinateSystems%coordinateSystems(1)%ptr%origin=[0.0_DP,0.0_DP,0.0_DP] + context%coordinateSystems%coordinateSystems(1)%ptr%orientation=RESHAPE(& + & [1.0_DP,0.0_DP,0.0_DP, & + & 0.0_DP,1.0_DP,0.0_DP, & + & 0.0_DP,0.0_DP,1.0_DP], & + & [3,3]) + context%coordinateSystems%coordinateSystems(1)%ptr%COORDINATE_SYSTEM_FINISHED=.TRUE. + context%coordinateSystems%numberOfCoordinateSystems=1 - EXITS("COORDINATE_SYSTEMS_INITIALISE") + EXITS("CoordinateSystems_Initialise") RETURN -999 ERRORSEXITS("COORDINATE_SYSTEMS_INITIALISE",ERR,ERROR) +999 CALL CoordinateSystems_Finalise(context%coordinateSystems,dummyErr,dummyError,*998) +998 ERRORSEXITS("CoordinateSystems_Initialise",err,error) RETURN 1 - END SUBROUTINE COORDINATE_SYSTEMS_INITIALISE + + END SUBROUTINE CoordinateSystems_Initialise ! !================================================================================================================================ diff --git a/src/data_point_access_routines.f90 b/src/data_point_access_routines.f90 index 1dd06a69..c203d6f8 100644 --- a/src/data_point_access_routines.f90 +++ b/src/data_point_access_routines.f90 @@ -46,6 +46,7 @@ MODULE DataPointAccessRoutines USE BaseRoutines USE Kinds + USE ISO_VARYING_STRING USE Strings USE Types diff --git a/src/data_projection_access_routines.f90 b/src/data_projection_access_routines.f90 index 1d831ea5..9f020495 100644 --- a/src/data_projection_access_routines.f90 +++ b/src/data_projection_access_routines.f90 @@ -46,6 +46,7 @@ MODULE DataProjectionAccessRoutines USE BaseRoutines USE Kinds + USE ISO_VARYING_STRING USE Strings USE Types diff --git a/src/data_projection_routines.f90 b/src/data_projection_routines.f90 index 77704487..15b9af60 100644 --- a/src/data_projection_routines.f90 +++ b/src/data_projection_routines.f90 @@ -1352,7 +1352,7 @@ SUBROUTINE DataProjection_DataPointsProjectionEvaluate(dataProjection,projection TYPE(DOMAIN_MAPPING_TYPE), POINTER :: domainMappingElements TYPE(DOMAIN_MAPPINGS_TYPE), POINTER :: domainMappings TYPE(DOMAIN_TOPOLOGY_TYPE), POINTER :: domainTopology - INTEGER(INTG) :: myComputationalNode,numberOfWorldComputationNodes !1) THEN + IF(numberOfGroupComputationNodes>1) THEN !Use MPI !Allocate arrays for MPI communication ALLOCATE(globalToLocalNumberOfClosestCandidates(numberOfDataPoints),STAT=err) IF(err/=0) CALL FlagError("Could not allocate global to local number of closest elements.",err,error,*999) - ALLOCATE(globalNumberOfClosestCandidates(numberOfWorldComputationNodes),STAT=err) + ALLOCATE(globalNumberOfClosestCandidates(numberOfGroupComputationNodes),STAT=err) IF(err/=0) CALL FlagError("Could not allocate global number of closest candidates.",err,error,*999) - ALLOCATE(globalMPIDisplacements(numberOfWorldComputationNodes),STAT=err) + ALLOCATE(globalMPIDisplacements(numberOfGroupComputationNodes),STAT=err) IF(err/=0) CALL FlagError("Could not allocate global MPI displacements.",err,error,*999) - ALLOCATE(globalNumberOfProjectedPoints(numberOfWorldComputationNodes),STAT=err) + ALLOCATE(globalNumberOfProjectedPoints(numberOfGroupComputationNodes),STAT=err) IF(err/=0) CALL FlagError("Could not allocate all number of projected points.",err,error,*999) ALLOCATE(projectionExitTag(numberOfDataPoints),STAT=err) IF(err/=0) CALL FlagError("Could not allocate projected.",err,error,*999) @@ -1682,7 +1685,7 @@ SUBROUTINE DataProjection_DataPointsProjectionEvaluate(dataProjection,projection IF(err/=0) CALL FlagError("Could not allocate sorting indices 2.",err,error,*999) !gather and distribute the number of closest elements from all computation nodes CALL MPI_ALLGATHER(numberOfClosestCandidates,1,MPI_INTEGER,globalNumberOfClosestCandidates,1,MPI_INTEGER, & - & worldCommunicator,MPIIError) + & groupCommunicator,MPIIError) CALL MPI_ERROR_CHECK("MPI_ALLGATHER",MPIIError,err,error,*999) !Sum all number of closest candidates from all computation nodes totalNumberOfClosestCandidates=SUM(globalNumberOfClosestCandidates,1) @@ -1700,14 +1703,14 @@ SUBROUTINE DataProjection_DataPointsProjectionEvaluate(dataProjection,projection CALL MPI_ERROR_CHECK("MPI_TYPE_COMMIT",MPIIError,err,error,*999) !Create displacement vectors for MPI_ALLGATHERV globalMPIDisplacements(1)=0 - DO computationNodeIdx=1,(numberOfWorldComputationNodes-1) + DO computationNodeIdx=1,(numberOfGroupComputationNodes-1) globalMPIDisplacements(computationNodeIdx+1)=globalMPIDisplacements(computationNodeIdx)+ & & globalNumberOfClosestCandidates(computationNodeIdx) ENDDO !computationNodeIdx !Share closest element distances between all domains CALL MPI_ALLGATHERV(closestDistances(1,1),numberOfClosestCandidates,MPIClosestDistances, & & globalClosestDistances,globalNumberOfClosestCandidates,globalMPIDisplacements, & - & MPIClosestDistances,worldCommunicator,MPIIError) + & MPIClosestDistances,groupCommunicator,MPIIError) CALL MPI_ERROR_CHECK("MPI_ALLGATHERV",MPIIError,err,error,*999) reducedNumberOfCLosestCandidates=MIN(dataProjection%numberOfClosestElements,totalNumberOfClosestCandidates) projectedDistance(2,:)=myComputationNode @@ -1814,46 +1817,46 @@ SUBROUTINE DataProjection_DataPointsProjectionEvaluate(dataProjection,projection END SELECT !Find the shortest projected distance in all domains CALL MPI_ALLREDUCE(MPI_IN_PLACE,projectedDistance,numberOfDataPoints,MPI_2DOUBLE_PRECISION,MPI_MINLOC, & - & worldCommunicator,MPIIError) + & groupCommunicator,MPIIError) CALL MPI_ERROR_CHECK("MPI_ALLREDUCE",MPIIError,err,error,*999) !Sort the computation node/rank from 0 to number of computation node CALL Sorting_BubbleIndexSort(projectedDistance(2,:),sortingIndices2,err,error,*999) - DO computationNodeIdx=0,(numberOfWorldComputationNodes-1) + DO computationNodeIdx=0,(numberOfGroupComputationNodes-1) globalNumberOfProjectedPoints(computationNodeIdx+1)=COUNT(ABS(projectedDistance(2,:)- & & REAL(computationNodeIdx))1 + ENDIF !numberOfGroupComputationNodes>1 !Compute full elemental xi IF(dataProjection%numberOfXi==dataProjection%numberOfElementXi) THEN DO dataPointIdx=1,numberOfDataPoints @@ -4686,7 +4689,7 @@ SUBROUTINE DataProjection_ResultAnalysisOutput(dataProjection,filename,err,error TYPE(VARYING_STRING), INTENT(OUT) :: error !=1) THEN - IF(numberOfWorldComputationNodes>1) THEN - WRITE(analFilename,('(A,A,I0)')) filename(1:filenameLength),".opdataproj.",myWorldComputationNodeNumber + IF(numberOfGroupComputationNodes>1) THEN + WRITE(analFilename,('(A,A,I0)')) filename(1:filenameLength),".opdataproj.",myGroupComputationNodeNumber ELSE analFilename=filename(1:filenameLength)//".opdataproj" ENDIF diff --git a/src/distributed_matrix_vector.f90 b/src/distributed_matrix_vector.f90 index 0466793b..77290799 100755 --- a/src/distributed_matrix_vector.f90 +++ b/src/distributed_matrix_vector.f90 @@ -59,6 +59,7 @@ MODULE DistributedMatrixVector #ifndef NOMPIMOD USE MPI #endif + USE CMISSPETScTypes, ONLY : PetscMatType,PetscVecType USE Strings USE Types USE LINKEDLIST_ROUTINES @@ -2468,7 +2469,7 @@ SUBROUTINE DistributedMatrix_PETScCreateFinish(petscMatrix,err,error,*) INTEGER(INTG), INTENT(OUT) :: err !0) THEN - CALL ComputationEnvironment_WorldNodeNumberGet(computationEnvironment,myComputationNodeNumber,err,error,*999) + CALL WorkGroup_GroupNodeNumberGet(domainMapping%workGroup,myComputationNodeNumber,err,error,*999) IF(distributedVector%ghostingType==DISTRIBUTED_MATRIX_VECTOR_INCLUDE_GHOSTS_TYPE) THEN ALLOCATE(cmissVector%transfers(domainMapping%NUMBER_OF_ADJACENT_DOMAINS),STAT=err) IF(err/=0) CALL FlagError("Could not allocate CMISS distributed vector transfer buffers.",err,error,*999) @@ -6872,7 +6873,7 @@ SUBROUTINE DistributedVector_PETScCreateFinish(petscVector,err,error,*) INTEGER(INTG), INTENT(OUT) :: err !1) THEN CALL DistributedVector_UpdateWaitFinished(distributedVector,err,error,*999) !Copy the receive buffers back to the ghost positions in the data vector @@ -7348,7 +7349,7 @@ SUBROUTINE DistributedVector_UpdateStart(distributedVector,err,error,*) INTEGER(INTG), INTENT(OUT) :: err !1) THEN IF(domainMapping%NUMBER_OF_ADJACENT_DOMAINS>0) THEN !Fill in the send buffers with the send ghost values @@ -7410,7 +7411,7 @@ SUBROUTINE DistributedVector_UpdateStart(distributedVector,err,error,*) & cmissVector%transfers(domainIdx)%receiveBufferSize,MPI_INTEGER, & & domainMapping%ADJACENT_DOMAINS(domainIdx)%DOMAIN_NUMBER, & & cmissVector%transfers(domainIdx)%receiveTagNumber, & - & worldCommunicator,cmissVector%transfers(domainIdx)%mpiReceiveRequest,mpiIError) + & groupCommunicator,cmissVector%transfers(domainIdx)%mpiReceiveRequest,mpiIError) CALL MPI_ErrorCheck("MPI_IRECV",mpiIError,err,error,*999) IF(diagnostics5) THEN CALL WriteString(DIAGNOSTIC_OUTPUT_TYPE,"MPI IRECV call posted:",err,error,*999) @@ -7421,7 +7422,7 @@ SUBROUTINE DistributedVector_UpdateStart(distributedVector,err,error,*) & DOMAIN_NUMBER,err,error,*999) CALL WriteStringValue(DIAGNOSTIC_OUTPUT_TYPE," Receive tag = ",cmissVector%transfers(domainIdx)% & & receiveTagNumber,err,error,*999) - CALL WriteStringValue(DIAGNOSTIC_OUTPUT_TYPE," Receive comm = ",worldCommunicator,err,error,*999) + CALL WriteStringValue(DIAGNOSTIC_OUTPUT_TYPE," Receive comm = ",groupCommunicator,err,error,*999) CALL WriteStringValue(DIAGNOSTIC_OUTPUT_TYPE," Receive request = ",cmissVector%transfers(domainIdx)% & & mpiReceiveRequest,err,error,*999) ENDIF @@ -7430,7 +7431,7 @@ SUBROUTINE DistributedVector_UpdateStart(distributedVector,err,error,*) & cmissVector%transfers(domainIdx)%receiveBufferSize,MPI_REAL, & & domainMapping%ADJACENT_DOMAINS(domainIdx)%DOMAIN_NUMBER, & & cmissVector%transfers(domainIdx)%receiveTagNumber, & - & worldCommunicator,cmissVector%transfers(domainIdx)%mpiReceiveRequest,mpiIError) + & groupCommunicator,cmissVector%transfers(domainIdx)%mpiReceiveRequest,mpiIError) CALL MPI_ErrorCheck("MPI_IRECV",mpiIError,err,error,*999) IF(diagnostics5) THEN CALL WriteString(DIAGNOSTIC_OUTPUT_TYPE,"MPI IRECV call posted:",err,error,*999) @@ -7441,7 +7442,7 @@ SUBROUTINE DistributedVector_UpdateStart(distributedVector,err,error,*) & DOMAIN_NUMBER,err,error,*999) CALL WriteStringValue(DIAGNOSTIC_OUTPUT_TYPE," Receive tag = ",cmissVector%transfers(domainIdx)% & & receiveTagNumber,err,error,*999) - CALL WriteStringValue(DIAGNOSTIC_OUTPUT_TYPE," Receive comm = ",worldCommunicator,err,error,*999) + CALL WriteStringValue(DIAGNOSTIC_OUTPUT_TYPE," Receive comm = ",groupCommunicator,err,error,*999) CALL WriteStringValue(DIAGNOSTIC_OUTPUT_TYPE," Receive request = ",cmissVector%transfers(domainIdx)% & & mpiReceiveRequest,err,error,*999) ENDIF @@ -7450,7 +7451,7 @@ SUBROUTINE DistributedVector_UpdateStart(distributedVector,err,error,*) & cmissVector%transfers(domainIdx)%receiveBufferSize,MPI_DOUBLE_PRECISION, & & domainMapping%ADJACENT_DOMAINS(domainIdx)%DOMAIN_NUMBER, & & cmissVector%transfers(domainIdx)%receiveTagNumber, & - & worldCommunicator,cmissVector%transfers(domainIdx)%mpiReceiveRequest,mpiIError) + & groupCommunicator,cmissVector%transfers(domainIdx)%mpiReceiveRequest,mpiIError) CALL MPI_ErrorCheck("MPI_IRECV",mpiIError,err,error,*999) IF(diagnostics5) THEN CALL WriteString(DIAGNOSTIC_OUTPUT_TYPE,"MPI IRECV call posted:",err,error,*999) @@ -7461,7 +7462,7 @@ SUBROUTINE DistributedVector_UpdateStart(distributedVector,err,error,*) & DOMAIN_NUMBER,err,error,*999) CALL WriteStringValue(DIAGNOSTIC_OUTPUT_TYPE," Receive tag = ",cmissVector%transfers(domainIdx)%receiveTagNumber, & & err,error,*999) - CALL WriteStringValue(DIAGNOSTIC_OUTPUT_TYPE," Receive comm = ",worldCommunicator,err,error,*999) + CALL WriteStringValue(DIAGNOSTIC_OUTPUT_TYPE," Receive comm = ",groupCommunicator,err,error,*999) CALL WriteStringValue(DIAGNOSTIC_OUTPUT_TYPE," Receive request = ",cmissVector%transfers(domainIdx)% & & mpiReceiveRequest,err,error,*999) ENDIF @@ -7470,7 +7471,7 @@ SUBROUTINE DistributedVector_UpdateStart(distributedVector,err,error,*) & cmissVector%transfers(domainIdx)%receiveBufferSize,MPI_LOGICAL, & & domainMapping%ADJACENT_DOMAINS(domainIdx)%DOMAIN_NUMBER, & & cmissVector%transfers(domainIdx)%receiveTagNumber, & - & worldCommunicator,cmissVector%transfers(domainIdx)%mpiReceiveRequest,mpiIError) + & groupCommunicator,cmissVector%transfers(domainIdx)%mpiReceiveRequest,mpiIError) CALL MPI_ErrorCheck("MPI_IRECV",mpiIError,err,error,*999) IF(diagnostics5) THEN CALL WriteString(DIAGNOSTIC_OUTPUT_TYPE,"MPI IRECV call posted:",err,error,*999) @@ -7481,7 +7482,7 @@ SUBROUTINE DistributedVector_UpdateStart(distributedVector,err,error,*) & DOMAIN_NUMBER,err,error,*999) CALL WriteStringValue(DIAGNOSTIC_OUTPUT_TYPE," Receive tag = ",cmissVector%transfers(domainIdx)% & & receiveTagNumber,err,error,*999) - CALL WriteStringValue(DIAGNOSTIC_OUTPUT_TYPE," Receive comm = ",worldCommunicator,err,error,*999) + CALL WriteStringValue(DIAGNOSTIC_OUTPUT_TYPE," Receive comm = ",groupCommunicator,err,error,*999) CALL WriteStringValue(DIAGNOSTIC_OUTPUT_TYPE," Receive request = ",cmissVector%transfers(domainIdx)% & & mpiReceiveRequest,err,error,*999) ENDIF @@ -7503,7 +7504,7 @@ SUBROUTINE DistributedVector_UpdateStart(distributedVector,err,error,*) & cmissVector%transfers(domainIdx)%sendBufferSize,MPI_INTEGER, & & domainMapping%ADJACENT_DOMAINS(domainIdx)%DOMAIN_NUMBER, & & cmissVector%transfers(domainIdx)%sendTagNumber, & - & worldCommunicator,cmissVector%transfers(domainIdx)%mpiSendRequest,mpiIError) + & groupCommunicator,cmissVector%transfers(domainIdx)%mpiSendRequest,mpiIError) CALL MPI_ErrorCheck("MPI_ISEND",mpiIError,err,error,*999) IF(diagnostics5) THEN CALL WriteString(DIAGNOSTIC_OUTPUT_TYPE,"MPI ISEND call posted:",err,error,*999) @@ -7514,7 +7515,7 @@ SUBROUTINE DistributedVector_UpdateStart(distributedVector,err,error,*) & DOMAIN_NUMBER,err,error,*999) CALL WriteStringValue(DIAGNOSTIC_OUTPUT_TYPE," Send tag = ",cmissVector%transfers(domainIdx)%sendTagNumber, & & err,error,*999) - CALL WriteStringValue(DIAGNOSTIC_OUTPUT_TYPE," Send comm = ",worldCommunicator,err,error,*999) + CALL WriteStringValue(DIAGNOSTIC_OUTPUT_TYPE," Send comm = ",groupCommunicator,err,error,*999) CALL WriteStringValue(DIAGNOSTIC_OUTPUT_TYPE," Send request = ",cmissVector%transfers(domainIdx)% & & mpiSendRequest,err,error,*999) ENDIF @@ -7523,7 +7524,7 @@ SUBROUTINE DistributedVector_UpdateStart(distributedVector,err,error,*) & cmissVector%transfers(domainIdx)%sendBufferSize,MPI_REAL, & & domainMapping%ADJACENT_DOMAINS(domainIdx)%DOMAIN_NUMBER, & & cmissVector%transfers(domainIdx)%sendTagNumber, & - & worldCommunicator,cmissVector%transfers(domainIdx)%mpiSendRequest,mpiIError) + & groupCommunicator,cmissVector%transfers(domainIdx)%mpiSendRequest,mpiIError) CALL MPI_ErrorCheck("MPI_ISEND",mpiIError,err,error,*999) IF(diagnostics5) THEN CALL WriteString(DIAGNOSTIC_OUTPUT_TYPE,"MPI ISEND call posted:",err,error,*999) @@ -7534,7 +7535,7 @@ SUBROUTINE DistributedVector_UpdateStart(distributedVector,err,error,*) & DOMAIN_NUMBER,err,error,*999) CALL WriteStringValue(DIAGNOSTIC_OUTPUT_TYPE," Send tag = ",cmissVector%transfers(domainIdx)%sendTagNumber, & & err,error,*999) - CALL WriteStringValue(DIAGNOSTIC_OUTPUT_TYPE," Send comm = ",worldCommunicator,err,error,*999) + CALL WriteStringValue(DIAGNOSTIC_OUTPUT_TYPE," Send comm = ",groupCommunicator,err,error,*999) CALL WriteStringValue(DIAGNOSTIC_OUTPUT_TYPE," Send request = ",cmissVector%transfers(domainIdx)% & & mpiSendRequest,err,error,*999) ENDIF @@ -7543,7 +7544,7 @@ SUBROUTINE DistributedVector_UpdateStart(distributedVector,err,error,*) & cmissVector%transfers(domainIdx)%sendBufferSize,MPI_DOUBLE_PRECISION, & & domainMapping%ADJACENT_DOMAINS(domainIdx)%DOMAIN_NUMBER, & & cmissVector%transfers(domainIdx)%sendTagNumber, & - & worldCommunicator,cmissVector%transfers(domainIdx)%mpiSendRequest,mpiIError) + & groupCommunicator,cmissVector%transfers(domainIdx)%mpiSendRequest,mpiIError) CALL MPI_ErrorCheck("MPI_ISEND",mpiIError,err,error,*999) IF(diagnostics5) THEN CALL WriteString(DIAGNOSTIC_OUTPUT_TYPE,"MPI ISEND call posted:",err,error,*999) @@ -7554,7 +7555,7 @@ SUBROUTINE DistributedVector_UpdateStart(distributedVector,err,error,*) & DOMAIN_NUMBER,err,error,*999) CALL WriteStringValue(DIAGNOSTIC_OUTPUT_TYPE," Send tag = ",cmissVector%transfers(domainIdx)%sendTagNumber, & & err,error,*999) - CALL WriteStringValue(DIAGNOSTIC_OUTPUT_TYPE," Send comm = ",worldCommunicator,err,error,*999) + CALL WriteStringValue(DIAGNOSTIC_OUTPUT_TYPE," Send comm = ",groupCommunicator,err,error,*999) CALL WriteStringValue(DIAGNOSTIC_OUTPUT_TYPE," Send request = ",cmissVector%transfers(domainIdx)%mpiSendRequest, & & err,error,*999) ENDIF @@ -7563,7 +7564,7 @@ SUBROUTINE DistributedVector_UpdateStart(distributedVector,err,error,*) & cmissVector%transfers(domainIdx)%sendBufferSize,MPI_LOGICAL, & & domainMapping%ADJACENT_DOMAINS(domainIdx)%DOMAIN_NUMBER, & & cmissVector%transfers(domainIdx)%sendTagNumber, & - & worldCommunicator,cmissVector%transfers(domainIdx)%mpiSendRequest,mpiIError) + & groupCommunicator,cmissVector%transfers(domainIdx)%mpiSendRequest,mpiIError) CALL MPI_ErrorCheck("MPI_ISEND",mpiIError,err,error,*999) IF(diagnostics5) THEN CALL WriteString(DIAGNOSTIC_OUTPUT_TYPE,"MPI ISEND call posted:",err,error,*999) @@ -7574,7 +7575,7 @@ SUBROUTINE DistributedVector_UpdateStart(distributedVector,err,error,*) & DOMAIN_NUMBER,err,error,*999) CALL WriteStringValue(DIAGNOSTIC_OUTPUT_TYPE," Send tag = ",cmissVector%transfers(domainIdx)%sendTagNumber, & & err,error,*999) - CALL WriteStringValue(DIAGNOSTIC_OUTPUT_TYPE," Send comm = ",worldCommunicator,err,error,*999) + CALL WriteStringValue(DIAGNOSTIC_OUTPUT_TYPE," Send comm = ",groupCommunicator,err,error,*999) CALL WriteStringValue(DIAGNOSTIC_OUTPUT_TYPE," Send request = ",cmissVector%transfers(domainIdx)%mpiSendRequest, & & err,error,*999) ENDIF diff --git a/src/distributed_matrix_vector_access.f90 b/src/distributed_matrix_vector_access.f90 index 0a6d9daa..20193cb3 100644 --- a/src/distributed_matrix_vector_access.f90 +++ b/src/distributed_matrix_vector_access.f90 @@ -46,6 +46,7 @@ MODULE DistributedMatrixVectorAccessRoutines USE BaseRoutines USE Kinds + USE ISO_VARYING_STRING USE Strings USE Types diff --git a/src/domain_mappings.f90 b/src/domain_mappings.f90 index a7dfa5dd..aa028a76 100755 --- a/src/domain_mappings.f90 +++ b/src/domain_mappings.f90 @@ -79,7 +79,7 @@ MODULE DOMAIN_MAPPINGS PUBLIC DOMAIN_LOCAL_INTERNAL,DOMAIN_LOCAL_BOUNDARY,DOMAIN_LOCAL_GHOST - PUBLIC DOMAIN_MAPPINGS_MAPPING_FINALISE,DOMAIN_MAPPINGS_MAPPING_INITIALISE,DOMAIN_MAPPINGS_MAPPING_GLOBAL_INITIALISE, & + PUBLIC DOMAIN_MAPPINGS_MAPPING_FINALISE,DomainMappings_MappingInitialise,DOMAIN_MAPPINGS_MAPPING_GLOBAL_INITIALISE, & & DOMAIN_MAPPINGS_GLOBAL_TO_LOCAL_GET,DOMAIN_MAPPINGS_LOCAL_FROM_GLOBAL_CALCULATE CONTAINS @@ -89,15 +89,15 @@ MODULE DOMAIN_MAPPINGS ! !>Finalises the adjacent domain and deallocates all memory for a domain mapping. - SUBROUTINE DOMAIN_MAPPINGS_ADJACENT_DOMAIN_FINALISE(ADJACENT_DOMAIN,ERR,ERROR,*) + SUBROUTINE DOMAIN_MAPPINGS_ADJACENT_DOMAIN_FINALISE(ADJACENT_DOMAIN,err,error,*) !Argument variables TYPE(DOMAIN_ADJACENT_DOMAIN_TYPE) :: ADJACENT_DOMAIN !Initialise the adjacent domain for a domain mapping. - SUBROUTINE DOMAIN_MAPPINGS_ADJACENT_DOMAIN_INITIALISE(ADJACENT_DOMAIN,ERR,ERROR,*) + SUBROUTINE DOMAIN_MAPPINGS_ADJACENT_DOMAIN_INITIALISE(ADJACENT_DOMAIN,err,error,*) !Argument variables TYPE(DOMAIN_ADJACENT_DOMAIN_TYPE) :: ADJACENT_DOMAIN !Returns the local number, if it exists on the rank, for the specifed global number - SUBROUTINE DOMAIN_MAPPINGS_GLOBAL_TO_LOCAL_GET(DOMAIN_MAPPING,GLOBAL_NUMBER,LOCAL_EXISTS,LOCAL_NUMBER,ERR,ERROR,*) + SUBROUTINE DOMAIN_MAPPINGS_GLOBAL_TO_LOCAL_GET(DOMAIN_MAPPING,GLOBAL_NUMBER,LOCAL_EXISTS,LOCAL_NUMBER,err,error,*) !Argument variables TYPE(DOMAIN_MAPPING_TYPE), POINTER :: DOMAIN_MAPPING !=1.AND.GLOBAL_NUMBER<=DOMAIN_MAPPING%NUMBER_OF_GLOBAL) THEN - CALL ComputationEnvironment_WorldNodeNumberGet(computationEnvironment,myWorldComputationNodeNumber,err,error,*999) - IF(DOMAIN_MAPPING%GLOBAL_TO_LOCAL_MAP(GLOBAL_NUMBER)%DOMAIN_NUMBER(1)==myWorldComputationNodeNumber) THEN + CALL WorkGroup_GroupNodeNumberGet(DOMAIN_MAPPING%workGroup,myGroupComputationNodeNumber,err,error,*999) + IF(DOMAIN_MAPPING%GLOBAL_TO_LOCAL_MAP(GLOBAL_NUMBER)%DOMAIN_NUMBER(1)==myGroupComputationNodeNumber) THEN LOCAL_NUMBER=DOMAIN_MAPPING%GLOBAL_TO_LOCAL_MAP(GLOBAL_NUMBER)%LOCAL_NUMBER(1) LOCAL_EXISTS=.TRUE. ENDIF ELSE - LOCAL_ERROR="The specified global number of "//TRIM(NUMBER_TO_VSTRING(GLOBAL_NUMBER,"*",ERR,ERROR))// & + LOCAL_ERROR="The specified global number of "//TRIM(NUMBER_TO_VSTRING(GLOBAL_NUMBER,"*",err,error))// & & " is invalid. The number must be between 1 and "// & - & TRIM(NUMBER_TO_VSTRING(DOMAIN_MAPPING%NUMBER_OF_GLOBAL,"*",ERR,ERROR))//"." - CALL FlagError(LOCAL_ERROR,ERR,ERROR,*999) + & TRIM(NUMBER_TO_VSTRING(DOMAIN_MAPPING%NUMBER_OF_GLOBAL,"*",err,error))//"." + CALL FlagError(LOCAL_ERROR,err,error,*999) ENDIF ELSE - CALL FlagError("Domain mapping is not associated.",ERR,ERROR,*999) + CALL FlagError("Domain mapping is not associated.",err,error,*999) ENDIF EXITS("DOMAIN_MAPPINGS_GLOBAL_TO_LOCAL_GET") RETURN -999 ERRORSEXITS("DOMAIN_MAPPINGS_GLOBAL_TO_LOCAL_GET",ERR,ERROR) +999 ERRORSEXITS("DOMAIN_MAPPINGS_GLOBAL_TO_LOCAL_GET",err,error) RETURN 1 END SUBROUTINE DOMAIN_MAPPINGS_GLOBAL_TO_LOCAL_GET @@ -186,15 +186,15 @@ END SUBROUTINE DOMAIN_MAPPINGS_GLOBAL_TO_LOCAL_GET ! !>Calculates the domain mappings local map from a domain mappings global map. - SUBROUTINE DOMAIN_MAPPINGS_LOCAL_FROM_GLOBAL_CALCULATE(DOMAIN_MAPPING,ERR,ERROR,*) + SUBROUTINE DOMAIN_MAPPINGS_LOCAL_FROM_GLOBAL_CALCULATE(DOMAIN_MAPPING,err,error,*) !Argument variables TYPE(DOMAIN_MAPPING_TYPE), POINTER :: DOMAIN_MAPPING !0) THEN TOTAL_NUMBER_OF_ADJACENT_DOMAINS=TOTAL_NUMBER_OF_ADJACENT_DOMAINS+1 - IF(domain_no==myWorldComputationNodeNumber) NUMBER_OF_ADJACENT_DOMAINS=NUMBER_OF_ADJACENT_DOMAINS+1 + IF(domain_no==myGroupComputationNodeNumber) NUMBER_OF_ADJACENT_DOMAINS=NUMBER_OF_ADJACENT_DOMAINS+1 ENDIF ENDIF ENDDO !domain_no2 ENDDO !domain_no ALLOCATE(DOMAIN_MAPPING%ADJACENT_DOMAINS_PTR(0:DOMAIN_MAPPING%NUMBER_OF_DOMAINS),STAT=ERR) - IF(ERR/=0) CALL FlagError("Could not allocate adjacent domains ptr.",ERR,ERROR,*999) + IF(ERR/=0) CALL FlagError("Could not allocate adjacent domains ptr.",err,error,*999) ALLOCATE(DOMAIN_MAPPING%ADJACENT_DOMAINS_LIST(TOTAL_NUMBER_OF_ADJACENT_DOMAINS),STAT=ERR) - IF(ERR/=0) CALL FlagError("Could not allocate adjacent domains list.",ERR,ERROR,*999) + IF(ERR/=0) CALL FlagError("Could not allocate adjacent domains list.",err,error,*999) ! store the adjacent domains for a domain in ADJACENT_DOMAINS_LIST starting at index COUNT and store the starting index COUNT in ADJACENT_DOMAINS_PTR ! the adjacent domains for a domain are then ADJACENT_DOMAINS_LIST(ADJACENT_DOMAINS_PTR(domain) : ADJACENT_DOMAINS_PTR(domain+1)) @@ -335,9 +335,9 @@ SUBROUTINE DOMAIN_MAPPINGS_LOCAL_FROM_GLOBAL_CALCULATE(DOMAIN_MAPPING,ERR,ERROR, !compute domain list for my computational node ALLOCATE(DOMAIN_MAPPING%DOMAIN_LIST(NUMBER_INTERNAL+NUMBER_BOUNDARY+NUMBER_GHOST),STAT=ERR) - IF(ERR/=0) CALL FlagError("Could not allocate domain map domain list.",ERR,ERROR,*999) + IF(ERR/=0) CALL FlagError("Could not allocate domain map domain list.",err,error,*999) ALLOCATE(DOMAIN_MAPPING%LOCAL_TO_GLOBAL_MAP(NUMBER_INTERNAL+NUMBER_BOUNDARY+NUMBER_GHOST),STAT=ERR) - IF(ERR/=0) CALL FlagError("Could not allocate domain map local to global list.",ERR,ERROR,*999) + IF(ERR/=0) CALL FlagError("Could not allocate domain map local to global list.",err,error,*999) !set constants DOMAIN_MAPPING%TOTAL_NUMBER_OF_LOCAL=NUMBER_INTERNAL+NUMBER_BOUNDARY+NUMBER_GHOST @@ -354,46 +354,46 @@ SUBROUTINE DOMAIN_MAPPINGS_LOCAL_FROM_GLOBAL_CALCULATE(DOMAIN_MAPPING,ERR,ERROR, ! adjacent_domains maps a domain index (index between 1 and DOMAIN_MAPPING%NUMBER_OF_ADJACENT_DOMAINS) to the domain number ALLOCATE(DOMAIN_MAPPING%ADJACENT_DOMAINS(NUMBER_OF_ADJACENT_DOMAINS),STAT=ERR) - IF(ERR/=0) CALL FlagError("Could not allocate adjacent domains.",ERR,ERROR,*999) + IF(ERR/=0) CALL FlagError("Could not allocate adjacent domains.",err,error,*999) DOMAIN_MAPPING%NUMBER_OF_ADJACENT_DOMAINS=NUMBER_OF_ADJACENT_DOMAINS ! adjacent_domain_map maps a domain number back to its index (index between 1 and DOMAIN_MAPPING%NUMBER_OF_ADJACENT_DOMAINS) ALLOCATE(ADJACENT_DOMAIN_MAP(0:DOMAIN_MAPPING%NUMBER_OF_DOMAINS-1),STAT=ERR) - IF(ERR/=0) CALL FlagError("Could not allocate adjacent domain map.",ERR,ERROR,*999) + IF(ERR/=0) CALL FlagError("Could not allocate adjacent domain map.",err,error,*999) ! ghost_send_lists contains a list for each adjacent domain with elements in my domain (by local element numbers) that will be sent to that foreign domain ALLOCATE(GHOST_SEND_LISTS(DOMAIN_MAPPING%NUMBER_OF_ADJACENT_DOMAINS),STAT=ERR) - IF(ERR/=0) CALL FlagError("Could not allocate ghost send list.",ERR,ERROR,*999) + IF(ERR/=0) CALL FlagError("Could not allocate ghost send list.",err,error,*999) ! ghost_receive_lists contains a list for each adjacent domain and contains the local numbers of ghost elements that can be received from that foreign domain ALLOCATE(GHOST_RECEIVE_LISTS(DOMAIN_MAPPING%NUMBER_OF_ADJACENT_DOMAINS),STAT=ERR) - IF(ERR/=0) CALL FlagError("Could not allocate ghost recieve list.",ERR,ERROR,*999) + IF(ERR/=0) CALL FlagError("Could not allocate ghost recieve list.",err,error,*999) ! set adjacent domains data structures and initialize ghost send and receive lists ! loop over adjacent domains of my computational node DO domain_idx=1,DOMAIN_MAPPING%NUMBER_OF_ADJACENT_DOMAINS ! set variables to 0 - CALL DOMAIN_MAPPINGS_ADJACENT_DOMAIN_INITIALISE(DOMAIN_MAPPING%ADJACENT_DOMAINS(domain_idx),ERR,ERROR,*999) + CALL DOMAIN_MAPPINGS_ADJACENT_DOMAIN_INITIALISE(DOMAIN_MAPPING%ADJACENT_DOMAINS(domain_idx),err,error,*999) ! get number of current adjacent domain domain_no= & - & DOMAIN_MAPPING%ADJACENT_DOMAINS_LIST(DOMAIN_MAPPING%ADJACENT_DOMAINS_PTR(myWorldComputationNodeNumber)+domain_idx-1) + & DOMAIN_MAPPING%ADJACENT_DOMAINS_LIST(DOMAIN_MAPPING%ADJACENT_DOMAINS_PTR(myGroupComputationNodeNumber)+domain_idx-1) ! set number in adjacent_domains and adjacent_domain_map DOMAIN_MAPPING%ADJACENT_DOMAINS(domain_idx)%DOMAIN_NUMBER=domain_no ADJACENT_DOMAIN_MAP(domain_no)=domain_idx ! initialize send and receive lists for ghosts NULLIFY(GHOST_SEND_LISTS(domain_idx)%PTR) - CALL LIST_CREATE_START(GHOST_SEND_LISTS(domain_idx)%PTR,ERR,ERROR,*999) - CALL LIST_DATA_TYPE_SET(GHOST_SEND_LISTS(domain_idx)%PTR,LIST_INTG_TYPE,ERR,ERROR,*999) - CALL LIST_INITIAL_SIZE_SET(GHOST_SEND_LISTS(domain_idx)%PTR,MAX(DOMAIN_MAPPING%NUMBER_OF_GHOST,1),ERR,ERROR,*999) - CALL LIST_CREATE_FINISH(GHOST_SEND_LISTS(domain_idx)%PTR,ERR,ERROR,*999) + CALL LIST_CREATE_START(GHOST_SEND_LISTS(domain_idx)%PTR,err,error,*999) + CALL LIST_DATA_TYPE_SET(GHOST_SEND_LISTS(domain_idx)%PTR,LIST_INTG_TYPE,err,error,*999) + CALL LIST_INITIAL_SIZE_SET(GHOST_SEND_LISTS(domain_idx)%PTR,MAX(DOMAIN_MAPPING%NUMBER_OF_GHOST,1),err,error,*999) + CALL LIST_CREATE_FINISH(GHOST_SEND_LISTS(domain_idx)%PTR,err,error,*999) NULLIFY(GHOST_RECEIVE_LISTS(domain_idx)%PTR) - CALL LIST_CREATE_START(GHOST_RECEIVE_LISTS(domain_idx)%PTR,ERR,ERROR,*999) - CALL LIST_DATA_TYPE_SET(GHOST_RECEIVE_LISTS(domain_idx)%PTR,LIST_INTG_TYPE,ERR,ERROR,*999) - CALL LIST_INITIAL_SIZE_SET(GHOST_RECEIVE_LISTS(domain_idx)%PTR,MAX(DOMAIN_MAPPING%NUMBER_OF_GHOST,1),ERR,ERROR,*999) - CALL LIST_CREATE_FINISH(GHOST_RECEIVE_LISTS(domain_idx)%PTR,ERR,ERROR,*999) + CALL LIST_CREATE_START(GHOST_RECEIVE_LISTS(domain_idx)%PTR,err,error,*999) + CALL LIST_DATA_TYPE_SET(GHOST_RECEIVE_LISTS(domain_idx)%PTR,LIST_INTG_TYPE,err,error,*999) + CALL LIST_INITIAL_SIZE_SET(GHOST_RECEIVE_LISTS(domain_idx)%PTR,MAX(DOMAIN_MAPPING%NUMBER_OF_GHOST,1),err,error,*999) + CALL LIST_CREATE_FINISH(GHOST_RECEIVE_LISTS(domain_idx)%PTR,err,error,*999) ENDDO !domain_idx NUMBER_INTERNAL=0 @@ -431,22 +431,22 @@ SUBROUTINE DOMAIN_MAPPINGS_LOCAL_FROM_GLOBAL_CALCULATE(DOMAIN_MAPPING,ERR,ERROR, local_type=DOMAIN_MAPPING%GLOBAL_TO_LOCAL_MAP(global_number)%LOCAL_TYPE(domain_idx) IF(local_type/=DOMAIN_LOCAL_GHOST) THEN - IF(domain_no==myWorldComputationNodeNumber) SEND_GLOBAL=.TRUE. + IF(domain_no==myGroupComputationNodeNumber) SEND_GLOBAL=.TRUE. IF(RECEIVE_FROM_DOMAIN==-1) THEN RECEIVE_FROM_DOMAIN=domain_no ELSE - LOCAL_ERROR="Invalid domain mapping. Global number "//TRIM(NUMBER_TO_VSTRING(global_number,"*",ERR,ERROR))// & - & " is owned by domain number "//TRIM(NUMBER_TO_VSTRING(RECEIVE_FROM_DOMAIN,"*",ERR,ERROR))// & - & " as well as domain number "//TRIM(NUMBER_TO_VSTRING(domain_no,"*",ERR,ERROR))//"." - CALL FlagError(LOCAL_ERROR,ERR,ERROR,*999) + LOCAL_ERROR="Invalid domain mapping. Global number "//TRIM(NUMBER_TO_VSTRING(global_number,"*",err,error))// & + & " is owned by domain number "//TRIM(NUMBER_TO_VSTRING(RECEIVE_FROM_DOMAIN,"*",err,error))// & + & " as well as domain number "//TRIM(NUMBER_TO_VSTRING(domain_no,"*",err,error))//"." + CALL FlagError(LOCAL_ERROR,err,error,*999) ENDIF ENDIF ENDDO !domain_idx IF(RECEIVE_FROM_DOMAIN==-1) THEN - LOCAL_ERROR="Invalid domain mapping. Global number "//TRIM(NUMBER_TO_VSTRING(global_number,"*",ERR,ERROR))// & + LOCAL_ERROR="Invalid domain mapping. Global number "//TRIM(NUMBER_TO_VSTRING(global_number,"*",err,error))// & & " is not owned by any domain." - CALL FlagError(LOCAL_ERROR,ERR,ERROR,*999) + CALL FlagError(LOCAL_ERROR,err,error,*999) ENDIF ENDIF ENDIF @@ -457,7 +457,7 @@ SUBROUTINE DOMAIN_MAPPINGS_LOCAL_FROM_GLOBAL_CALCULATE(DOMAIN_MAPPING,ERR,ERROR, local_number=DOMAIN_MAPPING%GLOBAL_TO_LOCAL_MAP(global_number)%LOCAL_NUMBER(domain_idx) local_type=DOMAIN_MAPPING%GLOBAL_TO_LOCAL_MAP(global_number)%LOCAL_TYPE(domain_idx) - IF(domain_no==myWorldComputationNodeNumber) THEN + IF(domain_no==myGroupComputationNodeNumber) THEN ! set local number DOMAIN_MAPPING%LOCAL_TO_GLOBAL_MAP(local_number)=global_number @@ -474,16 +474,16 @@ SUBROUTINE DOMAIN_MAPPINGS_LOCAL_FROM_GLOBAL_CALCULATE(DOMAIN_MAPPING,ERR,ERROR, DOMAIN_MAPPING%DOMAIN_LIST(DOMAIN_MAPPING%BOUNDARY_FINISH+NUMBER_GHOST)=local_number ! add local number of ghost element to receive list of domain from which to receive - CALL LIST_ITEM_ADD(GHOST_RECEIVE_LISTS(ADJACENT_DOMAIN_MAP(RECEIVE_FROM_DOMAIN))%PTR,local_number,ERR,ERROR,*999) + CALL LIST_ITEM_ADD(GHOST_RECEIVE_LISTS(ADJACENT_DOMAIN_MAP(RECEIVE_FROM_DOMAIN))%PTR,local_number,err,error,*999) CASE DEFAULT LOCAL_ERROR="The domain local type of "//TRIM(NUMBER_TO_VSTRING(DOMAIN_MAPPING%GLOBAL_TO_LOCAL_MAP( & - & global_number)%LOCAL_TYPE(domain_idx),"*",ERR,ERROR))//" is invalid." - CALL FlagError(LOCAL_ERROR,ERR,ERROR,*999) + & global_number)%LOCAL_TYPE(domain_idx),"*",err,error))//" is invalid." + CALL FlagError(LOCAL_ERROR,err,error,*999) END SELECT ELSE IF(SEND_GLOBAL.AND.local_type==DOMAIN_LOCAL_GHOST) THEN local_number2=DOMAIN_MAPPING%GLOBAL_TO_LOCAL_MAP(global_number)%LOCAL_NUMBER(1) !The local number for this node - CALL LIST_ITEM_ADD(GHOST_SEND_LISTS(ADJACENT_DOMAIN_MAP(domain_no))%PTR,local_number2,ERR,ERROR,*999) + CALL LIST_ITEM_ADD(GHOST_SEND_LISTS(ADJACENT_DOMAIN_MAP(domain_no))%PTR,local_number2,err,error,*999) ENDIF ENDDO !domain_idx ENDDO !global_number @@ -492,11 +492,11 @@ SUBROUTINE DOMAIN_MAPPINGS_LOCAL_FROM_GLOBAL_CALCULATE(DOMAIN_MAPPING,ERR,ERROR, DO domain_idx=1,DOMAIN_MAPPING%NUMBER_OF_ADJACENT_DOMAINS ! transfer the ghost_send_list for adjacent domain to LOCAL_GHOST_SEND_INDICES - CALL LIST_REMOVE_DUPLICATES(GHOST_SEND_LISTS(domain_idx)%PTR,ERR,ERROR,*999) - CALL LIST_DETACH_AND_DESTROY(GHOST_SEND_LISTS(domain_idx)%PTR,NUMBER_OF_GHOST_SEND,SEND_LIST,ERR,ERROR,*999) + CALL LIST_REMOVE_DUPLICATES(GHOST_SEND_LISTS(domain_idx)%PTR,err,error,*999) + CALL LIST_DETACH_AND_DESTROY(GHOST_SEND_LISTS(domain_idx)%PTR,NUMBER_OF_GHOST_SEND,SEND_LIST,err,error,*999) ALLOCATE(DOMAIN_MAPPING%ADJACENT_DOMAINS(domain_idx)%LOCAL_GHOST_SEND_INDICES(NUMBER_OF_GHOST_SEND),STAT=ERR) - IF(ERR/=0) CALL FlagError("Could not allocate local ghost send inidices.",ERR,ERROR,*999) + IF(ERR/=0) CALL FlagError("Could not allocate local ghost send inidices.",err,error,*999) DOMAIN_MAPPING%ADJACENT_DOMAINS(domain_idx)%LOCAL_GHOST_SEND_INDICES(1:NUMBER_OF_GHOST_SEND)= & & SEND_LIST(1:NUMBER_OF_GHOST_SEND) @@ -505,11 +505,11 @@ SUBROUTINE DOMAIN_MAPPINGS_LOCAL_FROM_GLOBAL_CALCULATE(DOMAIN_MAPPING,ERR,ERROR, DEALLOCATE(SEND_LIST) ! transfer the ghost_receive_lists for the current adjacent domain to LOCAL_GHOST_RECEIVE_INDICES - CALL LIST_REMOVE_DUPLICATES(GHOST_RECEIVE_LISTS(domain_idx)%PTR,ERR,ERROR,*999) - CALL LIST_DETACH_AND_DESTROY(GHOST_RECEIVE_LISTS(domain_idx)%PTR,NUMBER_OF_GHOST_RECEIVE,RECEIVE_LIST,ERR,ERROR,*999) + CALL LIST_REMOVE_DUPLICATES(GHOST_RECEIVE_LISTS(domain_idx)%PTR,err,error,*999) + CALL LIST_DETACH_AND_DESTROY(GHOST_RECEIVE_LISTS(domain_idx)%PTR,NUMBER_OF_GHOST_RECEIVE,RECEIVE_LIST,err,error,*999) ALLOCATE(DOMAIN_MAPPING%ADJACENT_DOMAINS(domain_idx)%LOCAL_GHOST_RECEIVE_INDICES(NUMBER_OF_GHOST_RECEIVE),STAT=ERR) - IF(ERR/=0) CALL FlagError("Could not allocate local ghost receive inidices.",ERR,ERROR,*999) + IF(ERR/=0) CALL FlagError("Could not allocate local ghost receive inidices.",err,error,*999) DOMAIN_MAPPING%ADJACENT_DOMAINS(domain_idx)%LOCAL_GHOST_RECEIVE_INDICES(1:NUMBER_OF_GHOST_RECEIVE)= & & RECEIVE_LIST(1:NUMBER_OF_GHOST_RECEIVE) @@ -524,83 +524,83 @@ SUBROUTINE DOMAIN_MAPPINGS_LOCAL_FROM_GLOBAL_CALCULATE(DOMAIN_MAPPING,ERR,ERROR, DEALLOCATE(GHOST_RECEIVE_LISTS) IF(DIAGNOSTICS1) THEN - CALL WRITE_STRING(DIAGNOSTIC_OUTPUT_TYPE,"Domain mappings:",ERR,ERROR,*999) - CALL WRITE_STRING_VALUE(DIAGNOSTIC_OUTPUT_TYPE," Number of domains = ",DOMAIN_MAPPING%NUMBER_OF_DOMAINS,ERR,ERROR,*999) - CALL WRITE_STRING_VALUE(DIAGNOSTIC_OUTPUT_TYPE," Number of global = ",DOMAIN_MAPPING%NUMBER_OF_GLOBAL,ERR,ERROR,*999) - CALL WRITE_STRING_VALUE(DIAGNOSTIC_OUTPUT_TYPE," Number of local = ",DOMAIN_MAPPING%NUMBER_OF_LOCAL,ERR,ERROR,*999) + CALL WRITE_STRING(DIAGNOSTIC_OUTPUT_TYPE,"Domain mappings:",err,error,*999) + CALL WRITE_STRING_VALUE(DIAGNOSTIC_OUTPUT_TYPE," Number of domains = ",DOMAIN_MAPPING%NUMBER_OF_DOMAINS,err,error,*999) + CALL WRITE_STRING_VALUE(DIAGNOSTIC_OUTPUT_TYPE," Number of global = ",DOMAIN_MAPPING%NUMBER_OF_GLOBAL,err,error,*999) + CALL WRITE_STRING_VALUE(DIAGNOSTIC_OUTPUT_TYPE," Number of local = ",DOMAIN_MAPPING%NUMBER_OF_LOCAL,err,error,*999) CALL WRITE_STRING_VALUE(DIAGNOSTIC_OUTPUT_TYPE," Total number of local = ",DOMAIN_MAPPING%TOTAL_NUMBER_OF_LOCAL, & - & ERR,ERROR,*999) - CALL WRITE_STRING(DIAGNOSTIC_OUTPUT_TYPE," Domain numbers:",ERR,ERROR,*999) + & err,error,*999) + CALL WRITE_STRING(DIAGNOSTIC_OUTPUT_TYPE," Domain numbers:",err,error,*999) CALL WRITE_STRING_VECTOR(DIAGNOSTIC_OUTPUT_TYPE,1,1,DOMAIN_MAPPING%NUMBER_OF_DOMAINS,8,8,DOMAIN_MAPPING% & - & NUMBER_OF_DOMAIN_LOCAL,'(" Number of domain local :",8(X,I10))','(26X,8(X,I10))',ERR,ERROR,*999) + & NUMBER_OF_DOMAIN_LOCAL,'(" Number of domain local :",8(X,I10))','(26X,8(X,I10))',err,error,*999) CALL WRITE_STRING_VECTOR(DIAGNOSTIC_OUTPUT_TYPE,1,1,DOMAIN_MAPPING%NUMBER_OF_DOMAINS,8,8,DOMAIN_MAPPING% & - & NUMBER_OF_DOMAIN_GHOST,'(" Number of domain ghost :",8(X,I10))','(26X,8(X,I10))',ERR,ERROR,*999) - CALL WRITE_STRING(DIAGNOSTIC_OUTPUT_TYPE," Domain list:",ERR,ERROR,*999) - CALL WRITE_STRING_VALUE(DIAGNOSTIC_OUTPUT_TYPE," Number of internal = ",DOMAIN_MAPPING%NUMBER_OF_INTERNAL,ERR,ERROR,*999) - CALL WRITE_STRING_VALUE(DIAGNOSTIC_OUTPUT_TYPE," Number of boundary = ",DOMAIN_MAPPING%NUMBER_OF_BOUNDARY,ERR,ERROR,*999) - CALL WRITE_STRING_VALUE(DIAGNOSTIC_OUTPUT_TYPE," Number of ghost = ",DOMAIN_MAPPING%NUMBER_OF_GHOST,ERR,ERROR,*999) - CALL WRITE_STRING_VALUE(DIAGNOSTIC_OUTPUT_TYPE," Internal start = ",DOMAIN_MAPPING%INTERNAL_START,ERR,ERROR,*999) - CALL WRITE_STRING_VALUE(DIAGNOSTIC_OUTPUT_TYPE," Internal finish = ",DOMAIN_MAPPING%INTERNAL_FINISH,ERR,ERROR,*999) - CALL WRITE_STRING_VALUE(DIAGNOSTIC_OUTPUT_TYPE," Boundary start = ",DOMAIN_MAPPING%BOUNDARY_START,ERR,ERROR,*999) - CALL WRITE_STRING_VALUE(DIAGNOSTIC_OUTPUT_TYPE," Boundary finish = ",DOMAIN_MAPPING%BOUNDARY_FINISH,ERR,ERROR,*999) - CALL WRITE_STRING_VALUE(DIAGNOSTIC_OUTPUT_TYPE," Ghost start = ",DOMAIN_MAPPING%GHOST_START,ERR,ERROR,*999) - CALL WRITE_STRING_VALUE(DIAGNOSTIC_OUTPUT_TYPE," Ghost finish = ",DOMAIN_MAPPING%GHOST_FINISH,ERR,ERROR,*999) + & NUMBER_OF_DOMAIN_GHOST,'(" Number of domain ghost :",8(X,I10))','(26X,8(X,I10))',err,error,*999) + CALL WRITE_STRING(DIAGNOSTIC_OUTPUT_TYPE," Domain list:",err,error,*999) + CALL WRITE_STRING_VALUE(DIAGNOSTIC_OUTPUT_TYPE," Number of internal = ",DOMAIN_MAPPING%NUMBER_OF_INTERNAL,err,error,*999) + CALL WRITE_STRING_VALUE(DIAGNOSTIC_OUTPUT_TYPE," Number of boundary = ",DOMAIN_MAPPING%NUMBER_OF_BOUNDARY,err,error,*999) + CALL WRITE_STRING_VALUE(DIAGNOSTIC_OUTPUT_TYPE," Number of ghost = ",DOMAIN_MAPPING%NUMBER_OF_GHOST,err,error,*999) + CALL WRITE_STRING_VALUE(DIAGNOSTIC_OUTPUT_TYPE," Internal start = ",DOMAIN_MAPPING%INTERNAL_START,err,error,*999) + CALL WRITE_STRING_VALUE(DIAGNOSTIC_OUTPUT_TYPE," Internal finish = ",DOMAIN_MAPPING%INTERNAL_FINISH,err,error,*999) + CALL WRITE_STRING_VALUE(DIAGNOSTIC_OUTPUT_TYPE," Boundary start = ",DOMAIN_MAPPING%BOUNDARY_START,err,error,*999) + CALL WRITE_STRING_VALUE(DIAGNOSTIC_OUTPUT_TYPE," Boundary finish = ",DOMAIN_MAPPING%BOUNDARY_FINISH,err,error,*999) + CALL WRITE_STRING_VALUE(DIAGNOSTIC_OUTPUT_TYPE," Ghost start = ",DOMAIN_MAPPING%GHOST_START,err,error,*999) + CALL WRITE_STRING_VALUE(DIAGNOSTIC_OUTPUT_TYPE," Ghost finish = ",DOMAIN_MAPPING%GHOST_FINISH,err,error,*999) CALL WRITE_STRING_VECTOR(DIAGNOSTIC_OUTPUT_TYPE,DOMAIN_MAPPING%INTERNAL_START,1,DOMAIN_MAPPING%INTERNAL_FINISH,8,8, & - & DOMAIN_MAPPING%DOMAIN_LIST,'(" Internal list :",8(X,I10))','(19X,8(X,I10))',ERR,ERROR,*999) + & DOMAIN_MAPPING%DOMAIN_LIST,'(" Internal list :",8(X,I10))','(19X,8(X,I10))',err,error,*999) CALL WRITE_STRING_VECTOR(DIAGNOSTIC_OUTPUT_TYPE,DOMAIN_MAPPING%BOUNDARY_START,1,DOMAIN_MAPPING%BOUNDARY_FINISH,8,8, & - & DOMAIN_MAPPING%DOMAIN_LIST,'(" Boundary list :",8(X,I10))','(19X,8(X,I10))',ERR,ERROR,*999) + & DOMAIN_MAPPING%DOMAIN_LIST,'(" Boundary list :",8(X,I10))','(19X,8(X,I10))',err,error,*999) CALL WRITE_STRING_VECTOR(DIAGNOSTIC_OUTPUT_TYPE,DOMAIN_MAPPING%GHOST_START,1,DOMAIN_MAPPING%GHOST_FINISH,8,8, & - & DOMAIN_MAPPING%DOMAIN_LIST,'(" Ghost list :",8(X,I10))','(19X,8(X,I10))',ERR,ERROR,*999) - CALL WRITE_STRING(DIAGNOSTIC_OUTPUT_TYPE," Local to global map:",ERR,ERROR,*999) + & DOMAIN_MAPPING%DOMAIN_LIST,'(" Ghost list :",8(X,I10))','(19X,8(X,I10))',err,error,*999) + CALL WRITE_STRING(DIAGNOSTIC_OUTPUT_TYPE," Local to global map:",err,error,*999) DO idx=1,DOMAIN_MAPPING%TOTAL_NUMBER_OF_LOCAL - CALL WRITE_STRING_VALUE(DIAGNOSTIC_OUTPUT_TYPE," Local index : ",idx,ERR,ERROR,*999) + CALL WRITE_STRING_VALUE(DIAGNOSTIC_OUTPUT_TYPE," Local index : ",idx,err,error,*999) CALL WRITE_STRING_VALUE(DIAGNOSTIC_OUTPUT_TYPE," Global index = ",DOMAIN_MAPPING%LOCAL_TO_GLOBAL_MAP(idx), & - & ERR,ERROR,*999) + & err,error,*999) ENDDO !idx - CALL WRITE_STRING(DIAGNOSTIC_OUTPUT_TYPE," Global to local map:",ERR,ERROR,*999) + CALL WRITE_STRING(DIAGNOSTIC_OUTPUT_TYPE," Global to local map:",err,error,*999) DO idx=1,DOMAIN_MAPPING%NUMBER_OF_GLOBAL - CALL WRITE_STRING_VALUE(DIAGNOSTIC_OUTPUT_TYPE," Global idx : ",idx,ERR,ERROR,*999) + CALL WRITE_STRING_VALUE(DIAGNOSTIC_OUTPUT_TYPE," Global idx : ",idx,err,error,*999) CALL WRITE_STRING_VALUE(DIAGNOSTIC_OUTPUT_TYPE," Number of domains = ", & - & DOMAIN_MAPPING%GLOBAL_TO_LOCAL_MAP(idx)%NUMBER_OF_DOMAINS,ERR,ERROR,*999) + & DOMAIN_MAPPING%GLOBAL_TO_LOCAL_MAP(idx)%NUMBER_OF_DOMAINS,err,error,*999) CALL WRITE_STRING_VECTOR(DIAGNOSTIC_OUTPUT_TYPE,1,1,DOMAIN_MAPPING%GLOBAL_TO_LOCAL_MAP(idx)% & & NUMBER_OF_DOMAINS,8,8,DOMAIN_MAPPING%GLOBAL_TO_LOCAL_MAP(idx)%LOCAL_NUMBER, & - & '(" Local number :",8(X,I10))','(21X,8(X,I10))',ERR,ERROR,*999) + & '(" Local number :",8(X,I10))','(21X,8(X,I10))',err,error,*999) CALL WRITE_STRING_VECTOR(DIAGNOSTIC_OUTPUT_TYPE,1,1,DOMAIN_MAPPING%GLOBAL_TO_LOCAL_MAP(idx)% & & NUMBER_OF_DOMAINS,8,8,DOMAIN_MAPPING%GLOBAL_TO_LOCAL_MAP(idx)%DOMAIN_NUMBER, & - & '(" Domain number :",8(X,I10))','(21X,8(X,I10))',ERR,ERROR,*999) + & '(" Domain number :",8(X,I10))','(21X,8(X,I10))',err,error,*999) CALL WRITE_STRING_VECTOR(DIAGNOSTIC_OUTPUT_TYPE,1,1,DOMAIN_MAPPING%GLOBAL_TO_LOCAL_MAP(idx)% & & NUMBER_OF_DOMAINS,8,8,DOMAIN_MAPPING%GLOBAL_TO_LOCAL_MAP(IDX)%LOCAL_TYPE, & - & '(" Local type :",8(X,I10))','(21X,8(X,I10))',ERR,ERROR,*999) + & '(" Local type :",8(X,I10))','(21X,8(X,I10))',err,error,*999) ENDDO !ne - CALL WRITE_STRING(DIAGNOSTIC_OUTPUT_TYPE," Adjacent domains:",ERR,ERROR,*999) + CALL WRITE_STRING(DIAGNOSTIC_OUTPUT_TYPE," Adjacent domains:",err,error,*999) CALL WRITE_STRING_VALUE(DIAGNOSTIC_OUTPUT_TYPE," Number of adjacent domains = ", & - & DOMAIN_MAPPING%NUMBER_OF_ADJACENT_DOMAINS,ERR,ERROR,*999) + & DOMAIN_MAPPING%NUMBER_OF_ADJACENT_DOMAINS,err,error,*999) CALL WRITE_STRING_VECTOR(DIAGNOSTIC_OUTPUT_TYPE,1,1,DOMAIN_MAPPING%NUMBER_OF_DOMAINS+1,8,8, & - & DOMAIN_MAPPING%ADJACENT_DOMAINS_PTR,'(" Adjacent domains ptr :",8(X,I5))','(27X,8(X,I5))',ERR,ERROR,*999) + & DOMAIN_MAPPING%ADJACENT_DOMAINS_PTR,'(" Adjacent domains ptr :",8(X,I5))','(27X,8(X,I5))',err,error,*999) IF(DOMAIN_MAPPING%NUMBER_OF_ADJACENT_DOMAINS>0) THEN CALL WRITE_STRING_VECTOR(DIAGNOSTIC_OUTPUT_TYPE,1,1,DOMAIN_MAPPING%ADJACENT_DOMAINS_PTR( & & DOMAIN_MAPPING%NUMBER_OF_DOMAINS)-1,8,8,DOMAIN_MAPPING%ADJACENT_DOMAINS_LIST, & - '(" Adjacent domains list :",8(X,I5))','(27X,8(X,I5))',ERR,ERROR,*999) + '(" Adjacent domains list :",8(X,I5))','(27X,8(X,I5))',err,error,*999) DO domain_idx=1,DOMAIN_MAPPING%NUMBER_OF_ADJACENT_DOMAINS - CALL WRITE_STRING_VALUE(DIAGNOSTIC_OUTPUT_TYPE," Adjacent domain idx : ",domain_idx,ERR,ERROR,*999) + CALL WRITE_STRING_VALUE(DIAGNOSTIC_OUTPUT_TYPE," Adjacent domain idx : ",domain_idx,err,error,*999) CALL WRITE_STRING_VALUE(DIAGNOSTIC_OUTPUT_TYPE," Domain number = ", & - & DOMAIN_MAPPING%ADJACENT_DOMAINS(domain_idx)%DOMAIN_NUMBER,ERR,ERROR,*999) + & DOMAIN_MAPPING%ADJACENT_DOMAINS(domain_idx)%DOMAIN_NUMBER,err,error,*999) CALL WRITE_STRING_VALUE(DIAGNOSTIC_OUTPUT_TYPE," Number of send ghosts = ", & - & DOMAIN_MAPPING%ADJACENT_DOMAINS(domain_idx)%NUMBER_OF_SEND_GHOSTS,ERR,ERROR,*999) + & DOMAIN_MAPPING%ADJACENT_DOMAINS(domain_idx)%NUMBER_OF_SEND_GHOSTS,err,error,*999) CALL WRITE_STRING_VECTOR(DIAGNOSTIC_OUTPUT_TYPE,1,1,DOMAIN_MAPPING%ADJACENT_DOMAINS(domain_idx)% & & NUMBER_OF_SEND_GHOSTS,8,8,DOMAIN_MAPPING%ADJACENT_DOMAINS(domain_idx)%LOCAL_GHOST_SEND_INDICES, & - & '(" Local send ghost indices :",8(X,I10))','(39X,8(X,I10))',ERR,ERROR,*999) + & '(" Local send ghost indices :",8(X,I10))','(39X,8(X,I10))',err,error,*999) CALL WRITE_STRING_VALUE(DIAGNOSTIC_OUTPUT_TYPE," Number of receive ghosts = ", & - & DOMAIN_MAPPING%ADJACENT_DOMAINS(domain_idx)%NUMBER_OF_RECEIVE_GHOSTS,ERR,ERROR,*999) + & DOMAIN_MAPPING%ADJACENT_DOMAINS(domain_idx)%NUMBER_OF_RECEIVE_GHOSTS,err,error,*999) CALL WRITE_STRING_VECTOR(DIAGNOSTIC_OUTPUT_TYPE,1,1,DOMAIN_MAPPING%ADJACENT_DOMAINS(domain_idx)% & & NUMBER_OF_RECEIVE_GHOSTS,8,8,DOMAIN_MAPPING%ADJACENT_DOMAINS(domain_idx)%LOCAL_GHOST_RECEIVE_INDICES, & - & '(" Local receive ghost indices :",8(X,I10))','(39X,8(X,I10))',ERR,ERROR,*999) + & '(" Local receive ghost indices :",8(X,I10))','(39X,8(X,I10))',err,error,*999) ENDDO !domain_idx ENDIF ENDIF ELSE - CALL FlagError("Domain mapping is not associated.",ERR,ERROR,*999) + CALL FlagError("Domain mapping is not associated.",err,error,*999) ENDIF EXITS("DOMAIN_MAPPINGS_LOCAL_FROM_GLOBAL_CALCULATE") @@ -623,7 +623,7 @@ SUBROUTINE DOMAIN_MAPPINGS_LOCAL_FROM_GLOBAL_CALCULATE(DOMAIN_MAPPING,ERR,ERROR, ENDDO ! domain_idx 997 DEALLOCATE(GHOST_RECEIVE_LISTS) ENDIF - ERRORSEXITS("DOMAIN_MAPPINGS_LOCAL_FROM_GLOBAL_CALCULATE",ERR,ERROR) + ERRORSEXITS("DOMAIN_MAPPINGS_LOCAL_FROM_GLOBAL_CALCULATE",err,error) RETURN 1 END SUBROUTINE DOMAIN_MAPPINGS_LOCAL_FROM_GLOBAL_CALCULATE @@ -633,16 +633,16 @@ END SUBROUTINE DOMAIN_MAPPINGS_LOCAL_FROM_GLOBAL_CALCULATE ! !>Finalises the mapping for a domain mappings mapping and deallocates all memory. - SUBROUTINE DOMAIN_MAPPINGS_MAPPING_FINALISE(DOMAIN_MAPPING,ERR,ERROR,*) + SUBROUTINE DOMAIN_MAPPINGS_MAPPING_FINALISE(DOMAIN_MAPPING,err,error,*) !Argument variables TYPE(DOMAIN_MAPPING_TYPE), POINTER :: DOMAIN_MAPPING ! Finalises the global mapping in the given domain mappings. - SUBROUTINE DOMAIN_MAPPINGS_MAPPING_GLOBAL_FINALISE(MAPPING_GLOBAL_MAP,ERR,ERROR,*) + SUBROUTINE DOMAIN_MAPPINGS_MAPPING_GLOBAL_FINALISE(MAPPING_GLOBAL_MAP,err,error,*) !Argument variables TYPE(DOMAIN_GLOBAL_MAPPING_TYPE) :: MAPPING_GLOBAL_MAP !Finalises the global mapping in the given domain mappings. - SUBROUTINE DOMAIN_MAPPINGS_MAPPING_GLOBAL_INITIALISE(MAPPING_GLOBAL_MAP,ERR,ERROR,*) + SUBROUTINE DOMAIN_MAPPINGS_MAPPING_GLOBAL_INITIALISE(MAPPING_GLOBAL_MAP,err,error,*) !Argument variables TYPE(DOMAIN_GLOBAL_MAPPING_TYPE) :: MAPPING_GLOBAL_MAP !Initialises the mapping for a domain mappings mapping. - SUBROUTINE DOMAIN_MAPPINGS_MAPPING_INITIALISE(DOMAIN_MAPPING,NUMBER_OF_DOMAINS,ERR,ERROR,*) + SUBROUTINE DomainMappings_MappingInitialise(workGroup,domainMapping,err,error,*) !Argument variables - TYPE(DOMAIN_MAPPING_TYPE), POINTER :: DOMAIN_MAPPING !0) THEN - DOMAIN_MAPPING%TOTAL_NUMBER_OF_LOCAL=0 - DOMAIN_MAPPING%NUMBER_OF_LOCAL=0 - DOMAIN_MAPPING%NUMBER_OF_GLOBAL=0 - DOMAIN_MAPPING%NUMBER_OF_DOMAINS=NUMBER_OF_DOMAINS - DOMAIN_MAPPING%NUMBER_OF_INTERNAL=0 - DOMAIN_MAPPING%NUMBER_OF_BOUNDARY=0 - DOMAIN_MAPPING%NUMBER_OF_GHOST=0 - DOMAIN_MAPPING%INTERNAL_START=0 - DOMAIN_MAPPING%INTERNAL_FINISH=0 - DOMAIN_MAPPING%BOUNDARY_START=0 - DOMAIN_MAPPING%BOUNDARY_FINISH=0 - DOMAIN_MAPPING%GHOST_START=0 - DOMAIN_MAPPING%GHOST_FINISH=0 - DOMAIN_MAPPING%NUMBER_OF_ADJACENT_DOMAINS=0 - ELSE - LOCAL_ERROR="The specified number of domains of "//TRIM(NUMBER_TO_VSTRING(NUMBER_OF_DOMAINS,"*",ERR,ERROR))// & - & " is invalid. The number of domains must be > 0." - CALL FlagError(LOCAL_ERROR,ERR,ERROR,*999) - ENDIF - ENDIF + INTEGER(INTG) :: numberOfDomains + + ENTERS("DomainMappings_MappingInitialise",err,error,*999) + + IF(.NOT.ASSOCIATED(workGroup)) CALL FlagError("WorkGroup is not associated.",err,error,*999) + IF(.NOT.ASSOCIATED(domainMapping)) CALL FlagError("Domain mapping is not associated.",err,error,*999) + + CALL WorkGroup_NumberOfGroupNodesGet(workGroup,numberOfDomains,err,error,*999) + + domainMapping%workGroup=>workGroup + domainMapping%TOTAL_NUMBER_OF_LOCAL=0 + domainMapping%NUMBER_OF_LOCAL=0 + domainMapping%NUMBER_OF_GLOBAL=0 + domainMapping%NUMBER_OF_DOMAINS=numberOfDomains + domainMapping%NUMBER_OF_INTERNAL=0 + domainMapping%NUMBER_OF_BOUNDARY=0 + domainMapping%NUMBER_OF_GHOST=0 + domainMapping%INTERNAL_START=0 + domainMapping%INTERNAL_FINISH=0 + domainMapping%BOUNDARY_START=0 + domainMapping%BOUNDARY_FINISH=0 + domainMapping%GHOST_START=0 + domainMapping%GHOST_FINISH=0 + domainMapping%NUMBER_OF_ADJACENT_DOMAINS=0 - EXITS("DOMAIN_MAPPINGS_MAPPING_INITIALISE") + EXITS("DomainMappings_MappingInitialise") RETURN -999 ERRORSEXITS("DOMAIN_MAPPINGS_MAPPING_INITIALISE",ERR,ERROR) +999 ERRORSEXITS("DomainMappings_MappingInitialise",err,error) RETURN 1 - END SUBROUTINE DOMAIN_MAPPINGS_MAPPING_INITIALISE + + END SUBROUTINE DomainMappings_MappingInitialise ! !================================================================================================================================ diff --git a/src/electrophysiology_cell_routines.f90 b/src/electrophysiology_cell_routines.f90 index 60ca1511..07b22352 100755 --- a/src/electrophysiology_cell_routines.f90 +++ b/src/electrophysiology_cell_routines.f90 @@ -43,11 +43,12 @@ module electrophysiology_cell_routines USE BaseRoutines - USE field_routines + USE FIELD_ROUTINES USE FieldAccessRoutines - use kinds - use strings - use types + USE ISO_VARYING_STRING + use Kinds + use Strings + use Types #include "macros.h" diff --git a/src/equations_access_routines.f90 b/src/equations_access_routines.f90 index c8feeece..a1a4b394 100644 --- a/src/equations_access_routines.f90 +++ b/src/equations_access_routines.f90 @@ -46,6 +46,7 @@ MODULE EquationsAccessRoutines USE BaseRoutines USE FieldAccessRoutines + USE ISO_VARYING_STRING USE Kinds USE Strings USE Types diff --git a/src/equations_mapping_access_routines.f90 b/src/equations_mapping_access_routines.f90 index 66019653..2452729d 100644 --- a/src/equations_mapping_access_routines.f90 +++ b/src/equations_mapping_access_routines.f90 @@ -45,6 +45,7 @@ MODULE EquationsMappingAccessRoutines USE BaseRoutines + USE ISO_VARYING_STRING USE Kinds USE Strings USE Types diff --git a/src/equations_matrices_access_routines.f90 b/src/equations_matrices_access_routines.f90 index bc2b2db9..457de983 100644 --- a/src/equations_matrices_access_routines.f90 +++ b/src/equations_matrices_access_routines.f90 @@ -45,6 +45,7 @@ MODULE EquationsMatricesAccessRoutines USE BaseRoutines + USE ISO_VARYING_STRING USE Kinds USE Strings USE Types diff --git a/src/equations_set_access_routines.f90 b/src/equations_set_access_routines.f90 index 9258cbd8..e1d3f223 100644 --- a/src/equations_set_access_routines.f90 +++ b/src/equations_set_access_routines.f90 @@ -46,6 +46,7 @@ MODULE EquationsSetAccessRoutines USE BaseRoutines USE Kinds + USE ISO_VARYING_STRING USE Strings USE Types diff --git a/src/equations_set_routines.f90 b/src/equations_set_routines.f90 index 0b42e9ac..d640f994 100644 --- a/src/equations_set_routines.f90 +++ b/src/equations_set_routines.f90 @@ -6271,17 +6271,19 @@ SUBROUTINE EQUATIONS_SET_BOUNDARY_CONDITIONS_INCREMENT(EQUATIONS_SET,BOUNDARY_CO TYPE(VARYING_STRING), INTENT(OUT) :: error !EQUATIONS_SET%DEPENDENT%DEPENDENT_FIELD IF(ASSOCIATED(dependentField)) THEN + NULLIFY(decomposition) + CALL Field_DecompositionGet(dependentField,decomposition,err,error,*999) + NULLIFY(workGroup) + CALL Decomposition_WorkGroupGet(decomposition,workGroup,err,error,*999) + CALL WorkGroup_GroupNodeNumberGet(workGroup,myGroupComputationNodeNumber,err,error,*999) IF(ALLOCATED(dependentField%VARIABLES)) THEN !Loop over the variables associated with this equations set !\todo: Looping over all field variables is not safe when volume-coupled problem is solved. Look at matrix and rhs mapping instead? @@ -6340,7 +6346,7 @@ SUBROUTINE EQUATIONS_SET_BOUNDARY_CONDITIONS_INCREMENT(EQUATIONS_SET,BOUNDARY_CO & BOUNDARY_CONDITION_MOVED_WALL_INCREMENTED) !Convert dof index to local index IF(DOMAIN_MAPPING%GLOBAL_TO_LOCAL_MAP(dirichlet_dof_idx)%DOMAIN_NUMBER(1)== & - & myWorldComputationNodeNumber) THEN + & myGroupComputationNodeNumber) THEN dirichlet_dof_idx=DOMAIN_MAPPING%GLOBAL_TO_LOCAL_MAP(dirichlet_dof_idx)%LOCAL_NUMBER(1) IF(0FIELD%VARIABLES(variable_idx)%COMPONENTS(component_idx) - variable_local_ny=1+VARIABLE_LOCAL_DOFS_OFFSETS(myWorldComputationNodeNumber) + variable_local_ny=1+VARIABLE_LOCAL_DOFS_OFFSETS(myGroupComputationNodeNumber) !Allocate and set up global to local domain map for variable mapping IF(ASSOCIATED(FIELD_VARIABLE_DOFS_MAPPING)) THEN variable_global_ny=1+VARIABLE_GLOBAL_DOFS_OFFSET CALL DOMAIN_MAPPINGS_MAPPING_GLOBAL_INITIALISE(FIELD_VARIABLE_DOFS_MAPPING% & & GLOBAL_TO_LOCAL_MAP(variable_global_ny),ERR,ERROR,*999) - NUMBER_OF_DOMAINS=NUMBER_OF_COMPUTATION_NODES !Constant is in all domains + NUMBER_OF_DOMAINS=numberOfGroupComputationNodes !Constant is in all domains ALLOCATE(FIELD_VARIABLE_DOFS_MAPPING%GLOBAL_TO_LOCAL_MAP(variable_global_ny)%LOCAL_NUMBER(NUMBER_OF_DOMAINS), & & STAT=ERR) IF(ERR/=0) CALL FlagError("Could not allocate field variable dofs global to local map local number.", & @@ -10710,7 +10717,7 @@ SUBROUTINE FIELD_MAPPINGS_CALCULATE(FIELD,ERR,ERROR,*) DO component_idx=1,FIELD%VARIABLES(variable_idx)%NUMBER_OF_COMPONENTS FIELD_COMPONENT=>FIELD%VARIABLES(variable_idx)%COMPONENTS(component_idx) element_ny=element_ny+1 - variable_local_ny=element_ny+VARIABLE_LOCAL_DOFS_OFFSETS(myWorldComputationNodeNumber) + variable_local_ny=element_ny+VARIABLE_LOCAL_DOFS_OFFSETS(myGroupComputationNodeNumber) element_nyy=element_nyy+1 !Setup dof to parameter map FIELD%VARIABLES(variable_idx)%DOF_TO_PARAM_MAP%DOF_TYPE(1,variable_local_ny)=FIELD_ELEMENT_DOF_TYPE @@ -10817,7 +10824,7 @@ SUBROUTINE FIELD_MAPPINGS_CALCULATE(FIELD,ERR,ERROR,*) FIELD_COMPONENT=>FIELD%VARIABLES(variable_idx)%COMPONENTS(component_idx) DOMAIN=>FIELD_COMPONENT%DOMAIN node_ny=node_ny+1 - variable_local_ny=node_ny+VARIABLE_LOCAL_DOFS_OFFSETS(myWorldComputationNodeNumber) + variable_local_ny=node_ny+VARIABLE_LOCAL_DOFS_OFFSETS(myGroupComputationNodeNumber) node_nyy=node_nyy+1 version_idx=DOMAIN%TOPOLOGY%DOFS%DOF_INDEX(1,ny) derivative_idx=DOMAIN%TOPOLOGY%DOFS%DOF_INDEX(2,ny) @@ -10918,7 +10925,7 @@ SUBROUTINE FIELD_MAPPINGS_CALCULATE(FIELD,ERR,ERROR,*) FIELD_COMPONENT=>FIELD%VARIABLES(variable_idx)%COMPONENTS(component_idx) DOMAIN=>FIELD_COMPONENT%DOMAIN element_ny=element_ny+1 - variable_local_ny=element_ny+VARIABLE_LOCAL_DOFS_OFFSETS(myWorldComputationNodeNumber) + variable_local_ny=element_ny+VARIABLE_LOCAL_DOFS_OFFSETS(myGroupComputationNodeNumber) node_nyy=node_nyy+1 !Setup dof to parameter map FIELD%VARIABLES(variable_idx)%DOF_TO_PARAM_MAP%DOF_TYPE(1,variable_local_ny)=FIELD_GAUSS_POINT_DOF_TYPE @@ -31136,8 +31143,8 @@ SUBROUTINE FIELD_VARIABLE_INITIALISE(FIELD,VARIABLE_NUMBER,ERR,ERROR,*) FIELD_VARIABLE%NUMBER_OF_GLOBAL_DOFS=0 ALLOCATE(FIELD_VARIABLE%DOMAIN_MAPPING,STAT=ERR) IF(ERR/=0) CALL FlagError("Could not allocate field variable domain mapping.",ERR,ERROR,*999) - CALL DOMAIN_MAPPINGS_MAPPING_INITIALISE(FIELD_VARIABLE%DOMAIN_MAPPING, & - & FIELD%DECOMPOSITION%NUMBER_OF_DOMAINS,ERR,ERROR,*999) + CALL DOMAIN_MAPPINGS_MAPPING_INITIALISE(FIELD%DECOMPOSITION%workGroup, & + & FIELD_VARIABLE%DOMAIN_MAPPING,ERR,ERROR,*999) CALL FIELD_DOF_TO_PARAM_MAP_INITIALISE(FIELD_VARIABLE%DOF_TO_PARAM_MAP,ERR,ERROR,*999) ELSE LOCAL_ERROR="Variable number "//TRIM(NumberToVString(VARIABLE_NUMBER,"*",ERR,ERROR))// & diff --git a/src/fieldml_input_routines.f90 b/src/fieldml_input_routines.f90 index 5ce715a3..3ce44ec6 100755 --- a/src/fieldml_input_routines.f90 +++ b/src/fieldml_input_routines.f90 @@ -59,6 +59,7 @@ MODULE FIELDML_INPUT_ROUTINES USE FIELDML_TYPES USE FIELDML_UTIL_ROUTINES USE INPUT_OUTPUT + USE ISO_VARYING_STRING USE LISTS USE MESH_ROUTINES USE NODE_ROUTINES @@ -562,11 +563,12 @@ END SUBROUTINE FIELDML_INPUT_CHECK_FIELD_COMPATIBLE ! !>Creates an OpenCMISS coordinate system using relevant parameters from FieldML. Does not call CreateFinish. - SUBROUTINE FieldmlInput_CoordinateSystemCreateStart( FIELDML_INFO, EVALUATOR_NAME, COORDINATE_SYSTEM, USER_NUMBER, & - & ERR, ERROR, * ) + SUBROUTINE FieldmlInput_CoordinateSystemCreateStart( FIELDML_INFO, EVALUATOR_NAME, coordinateSystems, COORDINATE_SYSTEM, & + & USER_NUMBER, ERR, ERROR, * ) !Arguments TYPE(FIELDML_IO_TYPE), POINTER :: FIELDML_INFO !Creates an OpenCMISS basis object using relevant parameters from FieldML. Does not call CreateFinish. - SUBROUTINE FIELDML_INPUT_BASIS_CREATE_START( FIELDML_INFO, EVALUATOR_NAME, USER_NUMBER, BASIS, ERR, ERROR, * ) + SUBROUTINE FIELDML_INPUT_BASIS_CREATE_START( FIELDML_INFO, EVALUATOR_NAME, basisFunctions, USER_NUMBER, BASIS, ERR, ERROR, * ) !Arguments TYPE(FIELDML_IO_TYPE), POINTER :: FIELDML_INFO !EQUATIONS_SET%DEPENDENT%DEPENDENT_FIELD IF(ASSOCIATED(DEPENDENT_FIELD)) THEN + + NULLIFY(decomposition) + CALL Field_DecompositionGet(DEPENDENT_FIELD,decomposition,err,error,*999) + NULLIFY(workGroup) + CALL Decomposition_WorkGroupGet(decomposition,workGroup,err,error,*999) + + CALL WorkGroup_GroupNodeNumberGet(workGroup,myGroupComputationNodeNumber,err,error,*999) + CALL WorkGroup_GroupCommunicatorGet(workGroup,groupCommuicator,err,error,*999) + GEOMETRIC_FIELD=>EQUATIONS_SET%GEOMETRY%GEOMETRIC_FIELD IF(ASSOCIATED(GEOMETRIC_FIELD)) THEN CALL FIELD_NUMBER_OF_COMPONENTS_GET(GEOMETRIC_FIELD,FIELD_U_VARIABLE_TYPE,NUMBER_OF_DIMENSIONS,err,error,*999) @@ -229,7 +236,7 @@ SUBROUTINE FiniteElasticity_BoundaryConditionsAnalyticCalculate(EQUATIONS_SET,BO user_node=INNER_SURFACE_NODES(node_idx) !Need to test if this node is in current decomposition CALL DECOMPOSITION_NODE_DOMAIN_GET(DECOMPOSITION,user_node,1,DOMAIN_NUMBER,err,error,*999) - IF(DOMAIN_NUMBER==myWorldComputationNodeNumber) THEN + IF(DOMAIN_NUMBER==myGroupComputationNodeNumber) THEN !Default to version 1 of each node derivative CALL BOUNDARY_CONDITIONS_SET_NODE(BOUNDARY_CONDITIONS,DEPENDENT_FIELD,FIELD_DELUDELN_VARIABLE_TYPE,1,1, & & user_node,ABS(INNER_NORMAL_XI),BOUNDARY_CONDITION_PRESSURE_INCREMENTED,PIN,err,error,*999) @@ -241,7 +248,7 @@ SUBROUTINE FiniteElasticity_BoundaryConditionsAnalyticCalculate(EQUATIONS_SET,BO user_node=OUTER_SURFACE_NODES(node_idx) !Need to test if this node is in current decomposition CALL DECOMPOSITION_NODE_DOMAIN_GET(DECOMPOSITION,user_node,1,DOMAIN_NUMBER,err,error,*999) - IF(DOMAIN_NUMBER==myWorldComputationNodeNumber) THEN + IF(DOMAIN_NUMBER==myGroupComputationNodeNumber) THEN !Default to version 1 of each node derivative CALL BOUNDARY_CONDITIONS_SET_NODE(BOUNDARY_CONDITIONS,DEPENDENT_FIELD,FIELD_DELUDELN_VARIABLE_TYPE,1,1, & & user_node,ABS(OUTER_NORMAL_XI),BOUNDARY_CONDITION_PRESSURE_INCREMENTED,POUT,err,error,*999) @@ -253,7 +260,7 @@ SUBROUTINE FiniteElasticity_BoundaryConditionsAnalyticCalculate(EQUATIONS_SET,BO user_node=TOP_SURFACE_NODES(node_idx) !Need to test if this node is in current decomposition CALL DECOMPOSITION_NODE_DOMAIN_GET(DECOMPOSITION,user_node,1,DOMAIN_NUMBER,err,error,*999) - IF(DOMAIN_NUMBER==myWorldComputationNodeNumber) THEN + IF(DOMAIN_NUMBER==myGroupComputationNodeNumber) THEN CALL MeshTopology_NodeCheckExists(MESH,1,user_node,NODE_EXISTS,global_node,err,error,*999) IF(.NOT.NODE_EXISTS) CYCLE CALL DOMAIN_MAPPINGS_GLOBAL_TO_LOCAL_GET(NODES_MAPPING,global_node,NODE_EXISTS,local_node,err,error,*999) @@ -271,7 +278,7 @@ SUBROUTINE FiniteElasticity_BoundaryConditionsAnalyticCalculate(EQUATIONS_SET,BO user_node=BOTTOM_SURFACE_NODES(node_idx) !Need to check this node exists in the current domain CALL DECOMPOSITION_NODE_DOMAIN_GET(DECOMPOSITION,user_node,1,DOMAIN_NUMBER,err,error,*999) - IF(DOMAIN_NUMBER==myWorldComputationNodeNumber) THEN + IF(DOMAIN_NUMBER==myGroupComputationNodeNumber) THEN !Default to version 1 of each node derivative CALL BOUNDARY_CONDITIONS_SET_NODE(BOUNDARY_CONDITIONS,DEPENDENT_FIELD,FIELD_U_VARIABLE_TYPE,1,1, & & user_node,ABS(BOTTOM_NORMAL_XI),BOUNDARY_CONDITION_FIXED,0.0_DP,err,error,*999) @@ -284,7 +291,7 @@ SUBROUTINE FiniteElasticity_BoundaryConditionsAnalyticCalculate(EQUATIONS_SET,BO DO node_idx=1,SIZE(BOTTOM_SURFACE_NODES,1) user_node=BOTTOM_SURFACE_NODES(node_idx) CALL DECOMPOSITION_NODE_DOMAIN_GET(DECOMPOSITION,user_node,1,DOMAIN_NUMBER,err,error,*999) - IF(DOMAIN_NUMBER==myWorldComputationNodeNumber) THEN + IF(DOMAIN_NUMBER==myGroupComputationNodeNumber) THEN CALL MeshTopology_NodeCheckExists(MESH,1,user_node,NODE_EXISTS,global_node,err,error,*999) IF(.NOT.NODE_EXISTS) CYCLE CALL DOMAIN_MAPPINGS_GLOBAL_TO_LOCAL_GET(NODES_MAPPING,global_node,NODE_EXISTS,local_node,err,error,*999) @@ -317,9 +324,9 @@ SUBROUTINE FiniteElasticity_BoundaryConditionsAnalyticCalculate(EQUATIONS_SET,BO ENDIF ENDDO !Check it went well - CALL MPI_REDUCE(X_FIXED,X_OKAY,1,MPI_LOGICAL,MPI_LOR,0,worldCommunicator,MPI_IERROR) - CALL MPI_REDUCE(Y_FIXED,Y_OKAY,1,MPI_LOGICAL,MPI_LOR,0,worldCommunicator,MPI_IERROR) - IF(myWorldComputationNodeNumber==0) THEN + CALL MPI_REDUCE(X_FIXED,X_OKAY,1,MPI_LOGICAL,MPI_LOR,0,groupCommuicator,MPI_IERROR) + CALL MPI_REDUCE(Y_FIXED,Y_OKAY,1,MPI_LOGICAL,MPI_LOR,0,groupCommuicator,MPI_IERROR) + IF(myGroupComputationNodeNumber==0) THEN IF(.NOT.(X_OKAY.AND.Y_OKAY)) THEN CALL FlagError("Could not fix nodes to prevent rigid body motion",err,error,*999) ENDIF @@ -436,7 +443,7 @@ SUBROUTINE FiniteElasticity_BoundaryConditionsAnalyticCalculate(EQUATIONS_SET,BO IF(NODE_EXISTS) THEN CALL DECOMPOSITION_NODE_DOMAIN_GET(DECOMPOSITION,user_node, & & DOMAIN_PRESSURE%MESH_COMPONENT_NUMBER,DOMAIN_NUMBER,err,error,*999) - IF(DOMAIN_NUMBER==myWorldComputationNodeNumber) THEN + IF(DOMAIN_NUMBER==myGroupComputationNodeNumber) THEN !\todo: test the domain node mappings pointer properly local_node=DOMAIN_PRESSURE%mappings%nodes%global_to_local_map(global_node)%local_number(1) !Default to version 1 of each node derivative diff --git a/src/fluid_mechanics_IO_routines.f90 b/src/fluid_mechanics_IO_routines.f90 index 53f227e0..3eb6a3c7 100755 --- a/src/fluid_mechanics_IO_routines.f90 +++ b/src/fluid_mechanics_IO_routines.f90 @@ -46,14 +46,16 @@ MODULE FLUID_MECHANICS_IO_ROUTINES - USE BaseRoutines - USE EquationsSetConstants - USE FIELD_ROUTINES - USE FieldAccessRoutines - USE TYPES - USE INPUT_OUTPUT - USE KINDS - + USE BaseRoutines + USE Constants + USE EquationsSetConstants + USE FIELD_ROUTINES + USE FieldAccessRoutines + USE INPUT_OUTPUT + USE ISO_VARYING_STRING + USE KINDS + USE TYPES + #include "macros.h" #include "dllexport.h" diff --git a/src/generated_mesh_access_routines.f90 b/src/generated_mesh_access_routines.f90 index ac18ddc0..f4e90149 100644 --- a/src/generated_mesh_access_routines.f90 +++ b/src/generated_mesh_access_routines.f90 @@ -46,6 +46,7 @@ MODULE GeneratedMeshAccessRoutines USE BaseRoutines USE Kinds + USE ISO_VARYING_STRING USE MeshAccessRoutines USE Strings USE Types diff --git a/src/generated_mesh_routines.f90 b/src/generated_mesh_routines.f90 index eeba9d63..2e753830 100755 --- a/src/generated_mesh_routines.f90 +++ b/src/generated_mesh_routines.f90 @@ -3582,12 +3582,21 @@ SUBROUTINE GeneratedMesh_EllipsoidGeometricParametersCalculate(ELLIPSOID_MESH,FI REAL(DP) :: DELTA(3),DELTAi(3),RECT_COORDS(3),t,phi,alpha,xi,nu,x,y,z REAL(DP) :: ELLIPSOID_EXTENT(4) TYPE(VARYING_STRING) :: LOCAL_ERROR + TYPE(WorkGroupType), POINTER :: workGroup NULLIFY(BASIS,DOMAIN,DECOMPOSITION,DOMAIN_NODES,FIELD_VARIABLE,FIELD_VARIABLE_COMPONENT) ENTERS("GeneratedMesh_EllipsoidGeometricParametersCalculate",ERR,ERROR,*999) - CALL ComputationEnvironment_WorldNodeNumberGet(computationEnvironment,MY_COMPUTATION_NODE,err,error,*999) + IF(.NOT.ASSOCIATED(field)) CALL FlagError("Field is not associated.",err,error,*999) + + NULLIFY(decomposition) + CALL Field_DecompositionGet(field,decomposition,err,error,*999) + NULLIFY(workGroup) + CALL Decomposition_WorkGroupGet(decomposition,workGroup,err,error,*999) + + CALL WorkGroup_GroupNodeNumberGet(workGroup,MY_COMPUTATION_NODE,err,error,*999) + ! assign to the field np=0 diff --git a/src/interface_access_routines.f90 b/src/interface_access_routines.f90 index 7c8fb999..a52ed72c 100644 --- a/src/interface_access_routines.f90 +++ b/src/interface_access_routines.f90 @@ -48,6 +48,7 @@ MODULE InterfaceAccessRoutines USE DataPointAccessRoutines USE FieldAccessRoutines USE InterfaceConditionAccessRoutines + USE ISO_VARYING_STRING USE Kinds USE MeshAccessRoutines USE Strings diff --git a/src/interface_condition_access_routines.f90 b/src/interface_condition_access_routines.f90 index 68fc2430..d35b09a2 100644 --- a/src/interface_condition_access_routines.f90 +++ b/src/interface_condition_access_routines.f90 @@ -46,6 +46,7 @@ MODULE InterfaceConditionAccessRoutines USE BaseRoutines USE Kinds + USE ISO_VARYING_STRING USE Strings USE Types diff --git a/src/interface_equations_access_routines.f90 b/src/interface_equations_access_routines.f90 index e0bb9b8c..fc206a06 100644 --- a/src/interface_equations_access_routines.f90 +++ b/src/interface_equations_access_routines.f90 @@ -45,6 +45,7 @@ MODULE InterfaceEquationsAccessRoutines USE BaseRoutines + USE ISO_VARYING_STRING USE Kinds USE Strings USE Types diff --git a/src/mesh_access_routines.f90 b/src/mesh_access_routines.f90 index 1c671f24..14476edf 100644 --- a/src/mesh_access_routines.f90 +++ b/src/mesh_access_routines.f90 @@ -46,6 +46,7 @@ MODULE MeshAccessRoutines USE BaseRoutines USE Kinds + USE ISO_VARYING_STRING USE Strings USE Types diff --git a/src/mesh_routines.f90 b/src/mesh_routines.f90 index 2fa8fa6d..614bc092 100644 --- a/src/mesh_routines.f90 +++ b/src/mesh_routines.f90 @@ -51,6 +51,7 @@ MODULE MESH_ROUTINES USE CMISS_PARMETIS USE ComputationRoutines USE ComputationAccessRoutines + USE Constants USE COORDINATE_ROUTINES USE DataProjectionAccessRoutines USE DOMAIN_MAPPINGS @@ -353,8 +354,11 @@ SUBROUTINE DECOMPOSITION_CREATE_START(USER_NUMBER,MESH,DECOMPOSITION,ERR,ERROR,* TYPE(VARYING_STRING), INTENT(OUT) :: ERROR !worldWorkGroup @@ -592,8 +599,7 @@ SUBROUTINE DECOMPOSITION_DESTROY(DECOMPOSITION,ERR,ERROR,*) END SUBROUTINE DECOMPOSITION_DESTROY ! - !================================================================================================================================ - ! + !================================================================================================================================ ! !>Calculates the element domains for a decomposition of a mesh. \see OpenCMISS::Iron::cmfe_Decomposition_ElementDomainCalculate SUBROUTINE DECOMPOSITION_ELEMENT_DOMAIN_CALCULATE(DECOMPOSITION,ERR,ERROR,*) @@ -603,20 +609,21 @@ SUBROUTINE DECOMPOSITION_ELEMENT_DOMAIN_CALCULATE(DECOMPOSITION,ERR,ERROR,*) INTEGER(INTG), INTENT(OUT) :: ERR !(MESH%NUMBER_OF_ELEMENTS-ELEMENT_STOP)) & - & ELEMENT_STOP=MESH%NUMBER_OF_ELEMENTS-(number_computation_nodes-1-no_computation_node) + IF((numberOfComputationNodes-1-no_computation_node)>(MESH%NUMBER_OF_ELEMENTS-ELEMENT_STOP)) & + & ELEMENT_STOP=MESH%NUMBER_OF_ELEMENTS-(numberOfComputationNodes-1-no_computation_node) IF(ELEMENT_START>MESH%NUMBER_OF_ELEMENTS) ELEMENT_START=MESH%NUMBER_OF_ELEMENTS IF(ELEMENT_STOP>MESH%NUMBER_OF_ELEMENTS) ELEMENT_STOP=MESH%NUMBER_OF_ELEMENTS DISPLACEMENTS(no_computation_node)=ELEMENT_START-1 @@ -670,7 +677,7 @@ SUBROUTINE DECOMPOSITION_ELEMENT_DOMAIN_CALCULATE(DECOMPOSITION,ERR,ERROR,*) NUMBER_OF_ELEMENTS=ELEMENT_STOP-ELEMENT_START+1 RECEIVE_COUNTS(no_computation_node)=NUMBER_OF_ELEMENTS IF(NUMBER_OF_ELEMENTS>MAX_NUMBER_ELEMENTS_PER_NODE) MAX_NUMBER_ELEMENTS_PER_NODE=NUMBER_OF_ELEMENTS - IF(no_computation_node==my_computation_node_number) THEN + IF(no_computation_node==myComputationNodeNumber) THEN MY_ELEMENT_START=ELEMENT_START MY_ELEMENT_STOP=ELEMENT_STOP MY_NUMBER_OF_ELEMENTS=ELEMENT_STOP-ELEMENT_START+1 @@ -705,6 +712,8 @@ SUBROUTINE DECOMPOSITION_ELEMENT_DOMAIN_CALCULATE(DECOMPOSITION,ERR,ERROR,*) ENDDO !ne !Set up ParMETIS variables + CALL WorkGroup_ContextGet(decomposition%workGroup,context,err,error,*999) + CALL Context_RandomSeedsGet(context,randomSeeds,err,error,*999) WEIGHT_FLAG=0 !No weights ELEMENT_WEIGHT(1)=1 !Isn't used due to weight flag NUMBER_FLAG=0 !C Numbering as there is a bug with Fortran numbering @@ -715,25 +724,25 @@ SUBROUTINE DECOMPOSITION_ELEMENT_DOMAIN_CALCULATE(DECOMPOSITION,ERR,ERROR,*) NUMBER_OF_COMMON_NODES=2 ENDIF !ParMETIS now has doule precision for these - !TPWGTS=1.0_SP/REAL(DECOMPOSITION%NUMBER_OF_DOMAINS,SP) + !TPWGTS=1.0_SP/REAL(DECOMPOSITION%NUMBER_OF_DOMAINS,SP) !UBVEC=1.05_SP TPWGTS=1.0_DP/REAL(DECOMPOSITION%NUMBER_OF_DOMAINS,DP) UBVEC=1.05_DP PARMETIS_OPTIONS(0)=1 !If zero, defaults are used, otherwise next two values are used PARMETIS_OPTIONS(1)=7 !Level of information to output - PARMETIS_OPTIONS(2)=cmissRandomSeeds(1) !Seed for random number generator + PARMETIS_OPTIONS(2)=randomSeeds(1) !Seed for random number generator !Call ParMETIS to calculate the partitioning of the mesh graph. CALL PARMETIS_PARTMESHKWAY(ELEMENT_DISTANCE,ELEMENT_PTR,ELEMENT_INDICIES,ELEMENT_WEIGHT,WEIGHT_FLAG,NUMBER_FLAG, & & NUMBER_OF_CONSTRAINTS,NUMBER_OF_COMMON_NODES,DECOMPOSITION%NUMBER_OF_DOMAINS,TPWGTS,UBVEC,PARMETIS_OPTIONS, & - & DECOMPOSITION%NUMBER_OF_EDGES_CUT,DECOMPOSITION%ELEMENT_DOMAIN(DISPLACEMENTS(my_computation_node_number)+1:), & - & worldCommunicator,ERR,ERROR,*999) + & DECOMPOSITION%NUMBER_OF_EDGES_CUT,DECOMPOSITION%ELEMENT_DOMAIN(DISPLACEMENTS(myComputationNodeNumber)+1:), & + & groupCommunicator,ERR,ERROR,*999) !Transfer all the element domain information to the other computation nodes so that each rank has all the info - IF(number_computation_nodes>1) THEN + IF(numberOfComputationNodes>1) THEN !This should work on a single processor but doesn't for mpich2 under windows. Maybe a bug? Avoid for now. CALL MPI_ALLGATHERV(MPI_IN_PLACE,MAX_NUMBER_ELEMENTS_PER_NODE,MPI_INTEGER,DECOMPOSITION%ELEMENT_DOMAIN, & - & RECEIVE_COUNTS,DISPLACEMENTS,MPI_INTEGER,worldCommunicator,MPI_IERROR) + & RECEIVE_COUNTS,DISPLACEMENTS,MPI_INTEGER,groupCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ALLGATHERV",MPI_IERROR,ERR,ERROR,*999) ENDIF @@ -753,22 +762,22 @@ SUBROUTINE DECOMPOSITION_ELEMENT_DOMAIN_CALCULATE(DECOMPOSITION,ERR,ERROR,*) END SELECT !Check decomposition and check that each domain has an element in it. - ALLOCATE(ELEMENT_COUNT(0:number_computation_nodes-1),STAT=ERR) + ALLOCATE(ELEMENT_COUNT(0:numberOfComputationNodes-1),STAT=ERR) IF(ERR/=0) CALL FlagError("Could not allocate element count.",ERR,ERROR,*999) ELEMENT_COUNT=0 DO elem_index=1,MESH%NUMBER_OF_ELEMENTS no_computation_node=DECOMPOSITION%ELEMENT_DOMAIN(elem_index) - IF(no_computation_node>=0.AND.no_computation_node=0.AND.no_computation_nodeMESH%TOPOLOGY(DECOMPOSITION%MESH_COMPONENT_NUMBER)%PTR IF(ASSOCIATED(MESH_TOPOLOGY)) THEN IF(GLOBAL_ELEMENT_NUMBER>0.AND.GLOBAL_ELEMENT_NUMBER<=MESH_TOPOLOGY%ELEMENTS%NUMBER_OF_ELEMENTS) THEN - CALL ComputationEnvironment_NumberOfWorldNodesGet(computationEnvironment,number_computation_nodes, & - & err,error,*999) - IF(DOMAIN_NUMBER>=0.AND.DOMAIN_NUMBER=0.AND.DOMAIN_NUMBERdecompositionData%DECOMPOSITION IF(ASSOCIATED(decomposition)) THEN - CALL ComputationEnvironment_WorldCommunicatorGet(computationEnvironment,worldCommunicator,err,error,*999) + CALL WorkGroup_GroupCommunicatorGet(decomposition%workGroup,groupCommunicator,err,error,*999) decompositionElements=>TOPOLOGY%ELEMENTS IF(ASSOCIATED(decompositionElements)) THEN elementsMapping=>decomposition%DOMAIN(decomposition%MESH_COMPONENT_NUMBER)%PTR%MAPPINGS%ELEMENTS @@ -1336,12 +1344,10 @@ SUBROUTINE DecompositionTopology_DataPointsCalculate(TOPOLOGY,ERR,ERROR,*) meshComponentNumber=decomposition%MESH_COMPONENT_NUMBER meshData=>decomposition%MESH%TOPOLOGY(meshComponentNumber)%PTR%dataPoints IF(ASSOCIATED(meshData)) THEN - CALL ComputationEnvironment_NumberOfWorldNodesGet(computationEnvironment,NUMBER_OF_COMPUTATION_NODES, & - & err,error,*999) - CALL ComputationEnvironment_WorldNodeNumberGet(computationEnvironment,myWorldComputationNodeNumber, & - & err,error,*999) - ALLOCATE(decompositionData%numberOfDomainLocal(0:NUMBER_OF_COMPUTATION_NODES-1),STAT=ERR) - ALLOCATE(decompositionData%numberOfDomainGhost(0:NUMBER_OF_COMPUTATION_NODES-1),STAT=ERR) + CALL WorkGroup_NumberOfGroupNodesGet(decomposition%workGroup,numberOfComputationNodes,err,error,*999) + CALL WorkGroup_GroupNodeNumberGet(decomposition%workGroup,myGroupComputationNodeNumber,err,error,*999) + ALLOCATE(decompositionData%numberOfDomainLocal(0:numberOfComputationNodes-1),STAT=ERR) + ALLOCATE(decompositionData%numberOfDomainGhost(0:numberOfComputationNodes-1),STAT=ERR) ALLOCATE(decompositionData%numberOfElementDataPoints(decompositionElements%NUMBER_OF_GLOBAL_ELEMENTS),STAT=ERR) ALLOCATE(decompositionData%elementDataPoint(decompositionElements%TOTAL_NUMBER_OF_ELEMENTS),STAT=ERR) IF(ERR/=0) CALL FlagError("Could not allocate decomposition element data points.",ERR,ERROR,*999) @@ -1384,11 +1390,11 @@ SUBROUTINE DecompositionTopology_DataPointsCalculate(TOPOLOGY,ERR,ERROR,*) NUMBER_OF_GHOST_DATA=decompositionData%totalNumberOfDataPoints-decompositionData%numberOfDataPoints !Gather number of local data points on all computation nodes CALL MPI_ALLGATHER(NUMBER_OF_LOCAL_DATA,1,MPI_INTEGER,decompositionData% & - & numberOfDomainLocal,1,MPI_INTEGER,worldCommunicator,MPI_IERROR) + & numberOfDomainLocal,1,MPI_INTEGER,groupCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ALLGATHER",MPI_IERROR,ERR,ERROR,*999) !Gather number of ghost data points on all computation nodes CALL MPI_ALLGATHER(NUMBER_OF_GHOST_DATA,1,MPI_INTEGER,decompositionData% & - & numberOfDomainGhost,1,MPI_INTEGER,worldCommunicator,MPI_IERROR) + & numberOfDomainGhost,1,MPI_INTEGER,groupCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_ALLGATHER",MPI_IERROR,ERR,ERROR,*999) ELSE CALL FlagError("Mesh data points topology is not associated.",ERR,ERROR,*999) @@ -4083,8 +4089,8 @@ SUBROUTINE DOMAIN_MAPPINGS_DOFS_INITIALISE(DOMAIN_MAPPINGS,ERR,ERROR,*) ELSE ALLOCATE(DOMAIN_MAPPINGS%DOFS,STAT=ERR) IF(ERR/=0) CALL FlagError("Could not allocate domain mappings dofs.",ERR,ERROR,*999) - CALL DOMAIN_MAPPINGS_MAPPING_INITIALISE(DOMAIN_MAPPINGS%DOFS,DOMAIN_MAPPINGS%DOMAIN%DECOMPOSITION%NUMBER_OF_DOMAINS, & - & ERR,ERROR,*999) + CALL DomainMappings_MappingInitialise(DOMAIN_MAPPINGS%DOMAIN%DECOMPOSITION%workGroup, & + & DOMAIN_MAPPINGS%DOFS,ERR,ERROR,*999) ENDIF ELSE CALL FlagError("Domain mapping is not associated.",ERR,ERROR,*999) @@ -4110,7 +4116,7 @@ SUBROUTINE DOMAIN_MAPPINGS_ELEMENTS_CALCULATE(DOMAIN,ERR,ERROR,*) TYPE(VARYING_STRING), INTENT(OUT) :: ERROR !DOMAIN%MESH component_idx=DOMAIN%MESH_COMPONENT_NUMBER - - CALL ComputationEnvironment_WorldNodeNumberGet(computationEnvironment,myWorldComputationNodeNumber, & - & err,error,*999) - + !Calculate the local and global numbers and set up the mappings ALLOCATE(ELEMENTS_MAPPING%GLOBAL_TO_LOCAL_MAP(MESH%NUMBER_OF_ELEMENTS),STAT=ERR) IF(ERR/=0) CALL FlagError("Could not allocate element mapping global to local map.",ERR,ERROR,*999) @@ -4400,9 +4403,9 @@ SUBROUTINE DOMAIN_MAPPINGS_ELEMENTS_INITIALISE(DOMAIN_MAPPINGS,ERR,ERROR,*) ELSE ALLOCATE(DOMAIN_MAPPINGS%ELEMENTS,STAT=ERR) IF(ERR/=0) CALL FlagError("Could not allocate domain mappings elements.",ERR,ERROR,*999) - CALL DOMAIN_MAPPINGS_MAPPING_INITIALISE(DOMAIN_MAPPINGS%ELEMENTS,DOMAIN_MAPPINGS%DOMAIN%DECOMPOSITION%NUMBER_OF_DOMAINS, & - & ERR,ERROR,*999) - ENDIF + CALL DomainMappings_MappingInitialise(DOMAIN_MAPPINGS%DOMAIN%DECOMPOSITION%workGroup, & + & DOMAIN_MAPPINGS%ELEMENTS,ERR,ERROR,*999) + ENDIF ELSE CALL FlagError("Domain mapping is not associated.",ERR,ERROR,*999) ENDIF @@ -4470,7 +4473,7 @@ SUBROUTINE DOMAIN_MAPPINGS_NODES_DOFS_CALCULATE(DOMAIN,ERR,ERROR,*) !Local Variables INTEGER(INTG) :: DUMMY_ERR,no_adjacent_element,no_computation_node,no_ghost_node,adjacent_element,ghost_node, & & NUMBER_OF_NODES_PER_DOMAIN,domain_idx,domain_idx2,domain_no,node_idx,derivative_idx,version_idx,ny,NUMBER_OF_DOMAINS, & - & MAX_NUMBER_DOMAINS,NUMBER_OF_GHOST_NODES,myWorldComputationNodeNumber,numberOfWorldComputationNodes,component_idx + & MAX_NUMBER_DOMAINS,NUMBER_OF_GHOST_NODES,myGroupComputationNodeNumber,numberOfGroupComputationNodes,component_idx INTEGER(INTG), ALLOCATABLE :: LOCAL_NODE_NUMBERS(:),LOCAL_DOF_NUMBERS(:),NODE_COUNT(:),NUMBER_INTERNAL_NODES(:), & & NUMBER_BOUNDARY_NODES(:) INTEGER(INTG), ALLOCATABLE :: DOMAINS(:),ALL_DOMAINS(:),GHOST_NODES(:) @@ -4502,9 +4505,9 @@ SUBROUTINE DOMAIN_MAPPINGS_NODES_DOFS_CALCULATE(DOMAIN,ERR,ERROR,*) component_idx=DOMAIN%MESH_COMPONENT_NUMBER MESH_TOPOLOGY=>MESH%TOPOLOGY(component_idx)%PTR - CALL ComputationEnvironment_NumberOfWorldNodesGet(computationEnvironment,numberOfWorldComputationNodes, & + CALL WorkGroup_NumberOfGroupNodesGet(NODES_MAPPING%workGroup,numberOfGroupComputationNodes, & & err,error,*999) - CALL ComputationEnvironment_WorldNodeNumberGet(computationEnvironment,myWorldComputationNodeNumber, & + CALL WorkGroup_GroupNodeNumberGet(NODES_MAPPING%workGroup,myGroupComputationNodeNumber, & & err,error,*999) !Calculate the local and global numbers and set up the mappings @@ -4738,23 +4741,23 @@ SUBROUTINE DOMAIN_MAPPINGS_NODES_DOFS_CALCULATE(DOMAIN,ERR,ERROR,*) ENDDO !domain_idx !Check decomposition and check that each domain has a node in it. - ALLOCATE(NODE_COUNT(0:numberOfWorldComputationNodes-1),STAT=ERR) + ALLOCATE(NODE_COUNT(0:numberOfGroupComputationNodes-1),STAT=ERR) IF(ERR/=0) CALL FlagError("Could not allocate node count.",ERR,ERROR,*999) NODE_COUNT=0 DO node_idx=1,MESH_TOPOLOGY%NODES%numberOfNodes no_computation_node=DOMAIN%NODE_DOMAIN(node_idx) - IF(no_computation_node>=0.AND.no_computation_node=0.AND.no_computation_nodeContains information on a context. + TYPE cmfe_ContextType + PRIVATE + TYPE(ContextType), POINTER :: context + END TYPE cmfe_ContextType + !>Contains information on a control loop. TYPE cmfe_ControlLoopType PRIVATE @@ -7821,10 +7827,6 @@ SUBROUTINE cmfe_Finalise(err) CALL cmfe_Finalise_(err,error,*999) -#ifdef TAUPROF - CALL TAU_STATIC_PHASE_STOP('OpenCMISS World Phase') -#endif - RETURN 999 CALL cmfe_HandleError(err,error) RETURN @@ -7835,28 +7837,20 @@ END SUBROUTINE cmfe_Finalise !================================================================================================================================ ! - !>Initialises CMISS returning a user number to the world coordinate system and region. - SUBROUTINE cmfe_InitialiseNumber(worldCoordinateSystemUserNumber,worldRegionUserNumber,err) + !>Initialises OpenCMISS context returning a user number new context. + SUBROUTINE cmfe_InitialiseNumber(newContextUserNumber,err) !DLLEXPORT(cmfe_InitialiseNumber) !Argument variables - INTEGER(INTG), INTENT(OUT) :: worldCoordinateSystemUserNumber !Initialises CMISS returning a pointer to the world coordinate system and region. - SUBROUTINE cmfe_InitialiseObj(worldCoordinateSystem,worldRegion,err) + !>Initialises OpenCMISS returning a pointer to the new context. + SUBROUTINE cmfe_InitialiseObj(newContext,err) !DLLEXPORT(cmfe_InitialiseObj) !Argument variables - TYPE(cmfe_CoordinateSystemType), INTENT(INOUT) :: worldCoordinateSystem !Returns the computation environment for an OpenCMISS context given by user number. + SUBROUTINE cmfe_Context_ComputationEnvironmentGetNumber(contextUserNumber,computationEnvironment,err) + !DLLEXPORT(cmfe_Context_WorldCoordinateSystemGetNumber) + + !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns a computation environment object for an OpenCMISS context object. + SUBROUTINE cmfe_Context_ComputationEnvironmentGetObj(context,computationEnvironment,err) + !DLLEXPORT(cmfe_Context_ComputationEnvironmentGetObj) + + !Argument variables + TYPE(cmfe_ContextType), INTENT(IN) :: context !Returns the world coordinate system user number for an OpenCMISS context given by user number. + SUBROUTINE cmfe_Context_WorldCoordinateSystemGetNumber(contextUserNumber,worldCoordinateSystemUserNumber,err) + !DLLEXPORT(cmfe_Context_WorldCoordinateSystemGetNumber) + + !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns a world coordinate system object for an OpenCMISS context object. + SUBROUTINE cmfe_Context_WorldCoordinateSystemGetObj(context,worldCoordinateSystem,err) + !DLLEXPORT(cmfe_Context_WorldCoordinateSystemGetObj) + + !Argument variables + TYPE(cmfe_ContextType), INTENT(IN) :: context !Returns the world region user number for an OpenCMISS context given by user number. + SUBROUTINE cmfe_Context_WorldRegionGetNumber(contextUserNumber,worldRegionUserNumber,err) + !DLLEXPORT(cmfe_Context_WorldRegionGetNumber) + + !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns a world region object for an OpenCMISS context object. + SUBROUTINE cmfe_Context_WorldRegionGetObj(context,worldRegion,err) + !DLLEXPORT(cmfe_Context_WorldRegionGetObj) + + !Argument variables + TYPE(cmfe_ContextType), INTENT(IN) :: context !Sets a PETSc option (so that they can be set from python when we don't have the command line.) SUBROUTINE cmfe_PetscOptionsSetValue(name,VALUE,err) !DLLEXPORT(cmfe_WorkingRealPrecisionGet) @@ -9710,7 +9859,7 @@ SUBROUTINE cmfe_AnalyticAnalysis_OutputNumber(regionUserNumber,fieldUserNumber,f NULLIFY(region) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL AnalyticAnalysis_Output(field,fileName,err,error,*999) @@ -9775,7 +9924,7 @@ SUBROUTINE cmfe_AnalyticAnalysis_AbsoluteErrorGetNodeNumber(regionUserNumber,fie NULLIFY(region) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL AnalyticAnalysis_AbsoluteErrorGetNode(field,variableType,versionNumber,derivativeNumber,nodeNumber,componentNumber, & & VALUE,err,error,*999) @@ -9850,7 +9999,7 @@ SUBROUTINE cmfe_AnalyticAnalysis_PercentageErrorGetNodeNumber(regionUserNumber,f NULLIFY(region) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL AnalyticAnalysis_PercentageErrorGetNode(field,variableType,versionNumber,derivativeNumber,nodeNumber, & & componentNumber,VALUE,err,error,*999) @@ -9926,7 +10075,7 @@ SUBROUTINE cmfe_AnalyticAnalysis_RelativeErrorGetNodeNumber(regionUserNumber,fie NULLIFY(region) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL AnalyticAnalysis_RelativeErrorGetNode(field,variableType,versionNumber,derivativeNumber,nodeNumber, & & componentNumber,VALUE,err,error,*999) @@ -9999,7 +10148,7 @@ SUBROUTINE cmfe_AnalyticAnalysis_AbsoluteErrorGetElementNumber(regionUserNumber, NULLIFY(region) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL AnalyticAnalysis_AbsoluteErrorGetElement(field,variableType,elementNumber,componentNumber,VALUE,err,error,*999) @@ -10067,7 +10216,7 @@ SUBROUTINE cmfe_AnalyticAnalysis_PercentageErrorGetElementNumber(regionUserNumbe NULLIFY(region) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL AnalyticAnalysis_PercentageErrorGetElement(field,variableType,elementNumber,componentNumber,VALUE,err,error,*999) @@ -10136,7 +10285,7 @@ SUBROUTINE cmfe_AnalyticAnalysis_RelativeErrorGetElementNumber(regionUserNumber, NULLIFY(region) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL AnalyticAnalysis_RelativeErrorGetElement(field,variableType,elementNumber,componentNumber,VALUE,err,error,*999) @@ -10203,7 +10352,7 @@ SUBROUTINE cmfe_AnalyticAnalysis_AbsoluteErrorGetConstantNumber(regionUserNumber NULLIFY(region) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL AnalyticAnalysis_AbsoluteErrorGetConstant(field,variableType,componentNumber,VALUE,err,error,*999) @@ -10269,7 +10418,7 @@ SUBROUTINE cmfe_AnalyticAnalysis_PercentageErrorGetConstantNumber(regionUserNumb NULLIFY(region) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL AnalyticAnalysis_PercentageErrorGetConstant(field,variableType,componentNumber,value,err,error,*999) @@ -10336,7 +10485,7 @@ SUBROUTINE cmfe_AnalyticAnalysis_RelativeErrorGetConstantNumber(regionUserNumber NULLIFY(region) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL AnalyticAnalysis_RelativeErrorGetConstant(field,variableType,componentNumber,value,err,error,*999) @@ -10405,7 +10554,7 @@ SUBROUTINE cmfe_AnalyticAnalysis_RMSErrorGetNodeNumber(regionUserNumber,fieldUse NULLIFY(region) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL AnalyticAnalysis_RMSErrorGetNode(field,variableType,componentNumber,errorType,localValue,localGhostValue, & & globalValue,err,error,*999) @@ -10478,7 +10627,7 @@ SUBROUTINE cmfe_AnalyticAnalysis_RMSErrorGetElementNumber(regionUserNumber,field NULLIFY(region) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL AnalyticAnalysis_RMSErrorGetElement(field,variableType,componentNumber,errorType,localValue,localGhostValue, & & globalValue,err,error,*999) @@ -10550,7 +10699,7 @@ SUBROUTINE cmfe_AnalyticAnalysis_IntegralNumericalValueGetNumber(regionUserNumbe NULLIFY(region) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL AnalyticAnalysis_IntegralNumericalValueGet(field,variableType,componentNumber,integralValue,ghostIntegralValue, & & err,error,*999) @@ -10621,7 +10770,7 @@ SUBROUTINE cmfe_AnalyticAnalysis_IntegralAnalyticValueGetNumber(regionUserNumber NULLIFY(region) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL AnalyticAnalysis_IntegralAnalyticValueGet(field,variableType,componentNumber,integralValue,ghostIntegralValue, & & err,error,*999) @@ -10692,7 +10841,7 @@ SUBROUTINE cmfe_AnalyticAnalysis_IntegralPercentageErrorGetNumber(regionUserNumb NULLIFY(region) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL AnalyticAnalysis_IntegralPercentageErrorGet(field,variableType,componentNumber,integralValue,ghostIntegralValue, & & err,error,*999) @@ -10763,7 +10912,7 @@ SUBROUTINE cmfe_AnalyticAnalysis_IntegralAbsoluteErrorGetNumber(regionUserNumber NULLIFY(region) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL AnalyticAnalysis_IntegralAbsoluteErrorGet(field,variableType,componentNumber,integralValue,ghostIntegralValue, & & err,error,*999) @@ -10834,7 +10983,7 @@ SUBROUTINE cmfe_AnalyticAnalysis_IntegralRelativeErrorGetNumber(regionUserNumber NULLIFY(region) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL AnalyticAnalysis_IntegralRelativeErrorGet(field,variableType,componentNumber,integralValue,ghostIntegralValue, & & err,error,*999) @@ -10905,7 +11054,7 @@ SUBROUTINE cmfe_AnalyticAnalysis_IntegralNIDNumericalValueGetNumber(regionUserNu NULLIFY(region) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL AnalyticAnalysis_IntegralNIDNumericalValueGet(field,variableType,componentNumber,integralValue, & & ghostIntegralValue,err,error,*999) @@ -10976,7 +11125,7 @@ SUBROUTINE cmfe_AnalyticAnalysis_IntegralNIDErrorGetNumber(regionUserNumber,fiel NULLIFY(region) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL AnalyticAnalysis_IntegralNIDErrorGet(field,variableType,componentNumber,integralValue,ghostIntegralValue,err, & & error,*999) @@ -11236,7 +11385,7 @@ SUBROUTINE cmfe_Basis_CollapsedXiGetNumber(userNumber,collapsedXi,err) ENTERS("cmfe_Basis_CollapsedXiGetNumber",err,error,*999) NULLIFY(basis) - CALL Basis_Get(userNumber,basis,err,error,*999) + CALL Basis_Get(basisFunctions,userNumber,basis,err,error,*999) CALL Basis_CollapsedXiGet(basis,collapsedXi,err,error,*999) EXITS("cmfe_Basis_CollapsedXiGetNumber") @@ -11291,7 +11440,7 @@ SUBROUTINE cmfe_Basis_CollapsedXiSetNumber(userNumber,collapsedXi,err) ENTERS("cmfe_Basis_CollapsedXiSetNumber",err,error,*999) NULLIFY(basis) - CALL Basis_Get(userNumber,basis,err,error,*999) + CALL Basis_Get(basisFunctions,userNumber,basis,err,error,*999) CALL Basis_CollapsedXiSet(basis,collapsedXi,err,error,*999) EXITS("cmfe_Basis_CollapsedXiSetNumber") @@ -11345,7 +11494,7 @@ SUBROUTINE cmfe_Basis_CreateFinishNumber(userNumber,err) ENTERS("cmfe_Basis_CreateFinishNumber",err,error,*999) NULLIFY(basis) - CALL Basis_Get(userNumber,basis,err,error,*999) + CALL Basis_Get(basisFunctions,userNumber,basis,err,error,*999) CALL Basis_CreateFinish(basis,err,error,*999) #ifdef TAUPROF @@ -11467,7 +11616,7 @@ SUBROUTINE cmfe_Basis_DestroyNumber(userNumber,err) ENTERS("cmfe_Basis_DestroyNumber",err,error,*999) NULLIFY(basis) - CALL Basis_Get(userNumber,basis,err,error,*999) + CALL Basis_Get(basisFunctions,userNumber,basis,err,error,*999) CALL Basis_Destroy(basis,err,error,*999) EXITS("cmfe_Basis_DestroyNumber") @@ -11521,7 +11670,7 @@ SUBROUTINE cmfe_Basis_InterpolationXiGetNumber(userNumber,interpolationXi,err) ENTERS("cmfe_Basis_InterpolationXiGetNumber",err,error,*999) NULLIFY(basis) - CALL Basis_Get(userNumber,basis,err,error,*999) + CALL Basis_Get(basisFunctions,userNumber,basis,err,error,*999) CALL Basis_InterpolationXiGet(basis,interpolationXi,err,error,*999) EXITS("cmfe_Basis_InterpolationXiGetNumber") @@ -11576,7 +11725,7 @@ SUBROUTINE cmfe_Basis_InterpolationXiSetNumber(userNumber,interpolationXi,err) ENTERS("cmfe_Basis_InterpolationXiSetNumber",err,error,*999) NULLIFY(basis) - CALL Basis_Get(userNumber,basis,err,error,*999) + CALL Basis_Get(basisFunctions,userNumber,basis,err,error,*999) CALL Basis_InterpolationXiSet(basis,interpolationXi,err,error,*999) EXITS("cmfe_Basis_InterpolationXiSetNumber") @@ -11631,7 +11780,7 @@ SUBROUTINE cmfe_Basis_NumberOfLocalNodesGetNumber(userNumber,numberOfLocalNodes, ENTERS("cmfe_Basis_NumberOfLocalNodesGetNumber",err,error,*999) NULLIFY(basis) - CALL Basis_Get(userNumber,basis,err,error,*999) + CALL Basis_Get(basisFunctions,userNumber,basis,err,error,*999) CALL Basis_NumberOfLocalNodesGet(basis,numberOfLocalNodes,err,error,*999) EXITS("cmfe_Basis_NumberOfLocalNodesGetNumber") @@ -11686,7 +11835,7 @@ SUBROUTINE cmfe_Basis_NumberOfXiGetNumber(userNumber,numberOfXi,err) ENTERS("cmfe_Basis_NumberOfXiGetNumber",err,error,*999) NULLIFY(basis) - CALL Basis_Get(userNumber,basis,err,error,*999) + CALL Basis_Get(basisFunctions,userNumber,basis,err,error,*999) CALL Basis_NumberOfXiGet(basis,numberOfXi,err,error,*999) EXITS("cmfe_Basis_NumberOfXiGetNumber") @@ -11741,7 +11890,7 @@ SUBROUTINE cmfe_Basis_NumberOfXiSetNumber(userNumber,numberOfXi,err) ENTERS("cmfe_Basis_NumberOfXiSetNumber",err,error,*999) NULLIFY(basis) - CALL Basis_Get(userNumber,basis,err,error,*999) + CALL Basis_Get(basisFunctions,userNumber,basis,err,error,*999) CALL Basis_NumberOfXiSet(basis,numberOfXi,err,error,*999) EXITS("cmfe_Basis_NumberOfXiSetNumber") @@ -11796,7 +11945,7 @@ SUBROUTINE cmfe_Basis_QuadratureNumberOfGaussXiGetNumber(userNumber,numberOfGaus ENTERS("cmfe_Basis_QuadratureNumberOfGaussXiGetNumber",err,error,*999) NULLIFY(basis) - CALL Basis_Get(userNumber,basis,err,error,*999) + CALL Basis_Get(basisFunctions,userNumber,basis,err,error,*999) CALL Basis_QuadratureNumberOfGaussXiGet(basis,numberOfGaussXi,err,error,*999) EXITS("cmfe_Basis_QuadratureNumberOfGaussXiGetNumber") @@ -11852,7 +12001,7 @@ SUBROUTINE cmfe_Basis_QuadratureNumberOfGaussXiSetNumber(userNumber,numberOfGaus ENTERS("cmfe_Basis_QuadratureNumberOfGaussXiSetNumber",err,error,*999) NULLIFY(basis) - CALL Basis_Get(userNumber,basis,err,error,*999) + CALL Basis_Get(basisFunctions,userNumber,basis,err,error,*999) CALL Basis_QuadratureNumberOfGaussXiSet(basis,numberOfGaussXi,err,error,*999) EXITS("cmfe_Basis_QuadratureNumberOfGaussXiSetNumber") @@ -11909,7 +12058,7 @@ SUBROUTINE cmfe_Basis_QuadratureSingleGaussXiGetNumber(userNumber,quadratureSche ENTERS("cmfe_Basis_QuadratureSingleGaussXiGetNumber",err,error,*999) NULLIFY(basis) - CALL Basis_Get(userNumber,basis,err,error,*999) + CALL Basis_Get(basisFunctions,userNumber,basis,err,error,*999) CALL Basis_QuadratureSingleGaussXiGet(basis,quadratureScheme,gaussPoint,gaussXi,err,error,*999) EXITS("cmfe_Basis_QuadratureSingleGaussXiGetNumber") @@ -11968,7 +12117,7 @@ SUBROUTINE cmfe_Basis_QuadratureMultipleGaussXiGetNumber(userNumber,quadratureSc ENTERS("cmfe_Basis_QuadratureMultipleGaussXiGetNumber",err,error,*999) NULLIFY(basis) - CALL Basis_Get(userNumber,basis,err,error,*999) + CALL Basis_Get(basisFunctions,userNumber,basis,err,error,*999) CALL Basis_QuadratureMultipleGaussXiGet(basis,quadratureScheme,gaussPoints,gaussXi,err,error,*999) EXITS("cmfe_Basis_QuadratureMultipleGaussXiGetNumber") @@ -12026,7 +12175,7 @@ SUBROUTINE cmfe_Basis_QuadratureOrderGetNumber(userNumber,quadratureOrder,err) ENTERS("cmfe_Basis_QuadratureOrderGetNumber",err,error,*999) NULLIFY(basis) - CALL Basis_Get(userNumber,basis,err,error,*999) + CALL Basis_Get(basisFunctions,userNumber,basis,err,error,*999) CALL Basis_QuadratureOrderGet(basis,quadratureOrder,err,error,*999) EXITS("cmfe_Basis_QuadratureOrderGetNumber") @@ -12082,7 +12231,7 @@ SUBROUTINE cmfe_Basis_QuadratureOrderSetNumber(userNumber,quadratureOrder,err) ENTERS("cmfe_Basis_QuadratureOrderSetNumber",err,error,*999) NULLIFY(basis) - CALL Basis_Get(userNumber,basis,err,error,*999) + CALL Basis_Get(basisFunctions,userNumber,basis,err,error,*999) CALL Basis_QuadratureOrderSet(basis,quadratureOrder,err,error,*999) EXITS("cmfe_Basis_QuadratureOrderSetNumber") @@ -12137,7 +12286,7 @@ SUBROUTINE cmfe_Basis_QuadratureTypeGetNumber(userNumber,quadratureType,err) ENTERS("cmfe_Basis_QuadratureTypeGetNumber",err,error,*999) NULLIFY(basis) - CALL Basis_Get(userNumber,basis,err,error,*999) + CALL Basis_Get(basisFunctions,userNumber,basis,err,error,*999) CALL Basis_QuadratureTypeGet(basis,quadratureType,err,error,*999) EXITS("cmfe_Basis_QuadratureTypeGetNumber") @@ -12192,7 +12341,7 @@ SUBROUTINE cmfe_Basis_QuadratureTypeSetNumber(userNumber,quadratureType,err) ENTERS("cmfe_Basis_QuadratureTypeSetNumber",err,error,*999) NULLIFY(basis) - CALL Basis_Get(userNumber,basis,err,error,*999) + CALL Basis_Get(basisFunctions,userNumber,basis,err,error,*999) CALL Basis_QuadratureTypeSet(basis,quadratureType,err,error,*999) EXITS("cmfe_Basis_QuadratureTypeSetNumber") @@ -12247,7 +12396,7 @@ SUBROUTINE cmfe_Basis_QuadratureLocalFaceGaussEvaluateSetNumber(userNumber,faceG ENTERS("cmfe_Basis_QuadratureLocalFaceGaussEvaluateSetNumber",err,error,*999) NULLIFY(basis) - CALL Basis_Get(userNumber,basis,err,error,*999) + CALL Basis_Get(basisFunctions,userNumber,basis,err,error,*999) CALL Basis_QuadratureLocalFaceGaussEvaluateSet(basis,faceGaussEvaluate,err,error,*999) EXITS("cmfe_Basis_QuadratureLocalFaceGaussEvaluateSetNumber") @@ -12303,7 +12452,7 @@ SUBROUTINE cmfe_Basis_TypeGetNumber(userNumber,basisType,err) ENTERS("cmfe_Basis_TypeGetNumber",err,error,*999) NULLIFY(basis) - CALL Basis_Get(userNumber,basis,err,error,*999) + CALL Basis_Get(basisFunctions,userNumber,basis,err,error,*999) CALL Basis_TypeGet(basis,basisType,err,error,*999) EXITS("cmfe_Basis_TypeGetNumber") @@ -12358,7 +12507,7 @@ SUBROUTINE cmfe_Basis_TypeSetNumber(userNumber,basisType,err) ENTERS("cmfe_Basis_TypeSetNumber",err,error,*999) NULLIFY(basis) - CALL Basis_Get(userNumber,basis,err,error,*999) + CALL Basis_Get(basisFunctions,userNumber,basis,err,error,*999) CALL Basis_TypeSet(basis,basisType,err,error,*999) EXITS("cmfe_Basis_TypeSetNumber") @@ -12421,7 +12570,7 @@ SUBROUTINE cmfe_BoundaryConditions_DestroyNumber0(problemUserNumber,controlLoopI NULLIFY(problem) NULLIFY(solverEquations) NULLIFY(boundaryConditions) - CALL Problem_Get(problemUserNumber,problem,err,error,*999) + CALL Problem_Get(problems,problemUserNumber,problem,err,error,*999) CALL Problem_SolverEquationsGet(problem,controlLoopIdentifier,solverIndex,solverEquations,err,error,*999) CALL SolverEquations_BoundaryConditionsGet(solverEquations,boundaryConditions,err,error,*999) CALL BOUNDARY_CONDITIONS_DESTROY(boundaryConditions,err,error,*999) @@ -12457,7 +12606,7 @@ SUBROUTINE cmfe_BoundaryConditions_DestroyNumber1(problemUserNumber,controlLoopI NULLIFY(problem) NULLIFY(solverEquations) NULLIFY(boundaryConditions) - CALL Problem_Get(problemUserNumber,problem,err,error,*999) + CALL Problem_Get(problems,problemUserNumber,problem,err,error,*999) CALL Problem_SolverEquationsGet(problem,controlLoopIdentifiers,solverIndex,solverEquations,err,error,*999) CALL SolverEquations_BoundaryConditionsGet(solverEquations,boundaryConditions,err,error,*999) CALL BOUNDARY_CONDITIONS_DESTROY(boundaryConditions,err,error,*999) @@ -12529,9 +12678,9 @@ SUBROUTINE cmfe_BoundaryConditions_AddConstantNumber(regionUserNumber,problemUse NULLIFY(solverEquations) NULLIFY(boundaryConditions) NULLIFY(dependentField) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,dependentField,err,error,*999) - CALL Problem_Get(problemUserNumber,problem,err,error,*999) + CALL Problem_Get(problems,problemUserNumber,problem,err,error,*999) CALL Problem_SolverEquationsGet(problem,controlLoopIdentifiers,solverIndex,solverEquations,err,error,*999) CALL SolverEquations_BoundaryConditionsGet(solverEquations,boundaryConditions,err,error,*999) CALL BOUNDARY_CONDITIONS_ADD_CONSTANT(boundaryConditions,dependentField,variableType,componentNumber, & @@ -12611,9 +12760,9 @@ SUBROUTINE cmfe_BoundaryConditions_SetConstantNumber(regionUserNumber,problemUse NULLIFY(solverEquations) NULLIFY(boundaryConditions) NULLIFY(dependentField) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,dependentField,err,error,*999) - CALL Problem_Get(problemUserNumber,problem,err,error,*999) + CALL Problem_Get(problems,problemUserNumber,problem,err,error,*999) CALL Problem_SolverEquationsGet(problem,controlLoopIdentifiers,solverIndex,solverEquations,err,error,*999) CALL SolverEquations_BoundaryConditionsGet(solverEquations,boundaryConditions,err,error,*999) CALL BOUNDARY_CONDITIONS_SET_CONSTANT(boundaryConditions,dependentField,variableType,componentNumber, & @@ -12693,9 +12842,9 @@ SUBROUTINE cmfe_BoundaryConditions_AddElementNumber(regionUserNumber,problemUser NULLIFY(solverEquations) NULLIFY(boundaryConditions) NULLIFY(dependentField) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,dependentField,err,error,*999) - CALL Problem_Get(problemUserNumber,problem,err,error,*999) + CALL Problem_Get(problems,problemUserNumber,problem,err,error,*999) CALL Problem_SolverEquationsGet(problem,controlLoopIdentifiers,solverIndex,solverEquations,err,error,*999) CALL SolverEquations_BoundaryConditionsGet(solverEquations,boundaryConditions,err,error,*999) CALL BOUNDARY_CONDITIONS_ADD_ELEMENT(boundaryConditions,dependentField,variableType,elementUserNumber, & @@ -12777,9 +12926,9 @@ SUBROUTINE cmfe_BoundaryConditions_SetElementNumber(regionUserNumber,problemUser NULLIFY(solverEquations) NULLIFY(boundaryConditions) NULLIFY(dependentField) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,dependentField,err,error,*999) - CALL Problem_Get(problemUserNumber,problem,err,error,*999) + CALL Problem_Get(problems,problemUserNumber,problem,err,error,*999) CALL Problem_SolverEquationsGet(problem,controlLoopIdentifiers,solverIndex,solverEquations,err,error,*999) CALL SolverEquations_BoundaryConditionsGet(solverEquations,boundaryConditions,err,error,*999) CALL BOUNDARY_CONDITIONS_SET_ELEMENT(boundaryConditions,dependentField,variableType,elementUserNumber, & @@ -12863,9 +13012,9 @@ SUBROUTINE cmfe_BoundaryConditions_AddNodeNumber(regionUserNumber,problemUserNum NULLIFY(solverEquations) NULLIFY(boundaryConditions) NULLIFY(dependentField) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,dependentField,err,error,*999) - CALL Problem_Get(problemUserNumber,problem,err,error,*999) + CALL Problem_Get(problems,problemUserNumber,problem,err,error,*999) CALL Problem_SolverEquationsGet(problem,controlLoopIdentifiers,solverIndex,solverEquations,err,error,*999) CALL SolverEquations_BoundaryConditionsGet(solverEquations,boundaryConditions,err,error,*999) CALL BOUNDARY_CONDITIONS_ADD_NODE(boundaryConditions,dependentField,variableType,versionNumber,derivativeNumber, & @@ -12951,9 +13100,9 @@ SUBROUTINE cmfe_BoundaryConditions_SetNodeNumber0(regionUserNumber,problemUserNu NULLIFY(solverEquations) NULLIFY(boundaryConditions) NULLIFY(dependentField) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,dependentField,err,error,*999) - CALL Problem_Get(problemUserNumber,problem,err,error,*999) + CALL Problem_Get(problems,problemUserNumber,problem,err,error,*999) CALL Problem_SolverEquationsGet(problem,controlLoopIdentifier,solverIndex,solverEquations,err,error,*999) CALL SolverEquations_BoundaryConditionsGet(solverEquations,boundaryConditions,err,error,*999) CALL BOUNDARY_CONDITIONS_SET_NODE(boundaryConditions,dependentField,variableType,versionNumber,derivativeNumber, & @@ -13004,9 +13153,9 @@ SUBROUTINE cmfe_BoundaryConditions_SetNodeNumber1(regionUserNumber,problemUserNu NULLIFY(solverEquations) NULLIFY(boundaryConditions) NULLIFY(dependentField) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,dependentField,err,error,*999) - CALL Problem_Get(problemUserNumber,problem,err,error,*999) + CALL Problem_Get(problems,problemUserNumber,problem,err,error,*999) CALL Problem_SolverEquationsGet(problem,controlLoopIdentifiers,solverIndex,solverEquations,err,error,*999) CALL SolverEquations_BoundaryConditionsGet(solverEquations,boundaryConditions,err,error,*999) CALL BOUNDARY_CONDITIONS_SET_NODE(boundaryConditions,dependentField,variableType,versionNumber,derivativeNumber, & @@ -13080,7 +13229,7 @@ SUBROUTINE cmfe_BoundaryConditions_NeumannSparsityTypeSetNumber0( & NULLIFY(problem) NULLIFY(solverEquations) NULLIFY(boundaryConditions) - CALL Problem_Get(problemUserNumber,problem,err,error,*999) + CALL Problem_Get(problems,problemUserNumber,problem,err,error,*999) CALL Problem_SolverEquationsGet(problem,controlLoopIdentifier,solverIndex,solverEquations,err,error,*999) CALL SolverEquations_BoundaryConditionsGet(solverEquations,boundaryConditions,err,error,*999) CALL BoundaryConditions_NeumannSparsityTypeSet(boundaryConditions,sparsityType,err,error,*999) @@ -13119,7 +13268,7 @@ SUBROUTINE cmfe_BoundaryConditions_NeumannSparsityTypeSetNumber1( & NULLIFY(problem) NULLIFY(solverEquations) NULLIFY(boundaryConditions) - CALL Problem_Get(problemUserNumber,problem,err,error,*999) + CALL Problem_Get(problems,problemUserNumber,problem,err,error,*999) CALL Problem_SolverEquationsGet(problem,controlLoopIdentifiers,solverIndex,solverEquations,err,error,*999) CALL SolverEquations_BoundaryConditionsGet(solverEquations,boundaryConditions,err,error,*999) CALL BoundaryConditions_NeumannSparsityTypeSet(boundaryConditions,sparsityType,err,error,*999) @@ -13196,9 +13345,9 @@ SUBROUTINE cmfe_BoundaryConditions_ConstrainNodeDofsEqualNumber(regionUserNumber NULLIFY(solverEquations) NULLIFY(field) NULLIFY(boundaryConditions) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) - CALL Problem_Get(problemUserNumber,problem,err,error,*999) + CALL Problem_Get(problems,problemUserNumber,problem,err,error,*999) CALL Problem_SolverEquationsGet(problem,controlLoopIdentifier,solverIndex,solverEquations,err,error,*999) CALL SolverEquations_BoundaryConditionsGet(solverEquations,boundaryConditions,err,error,*999) CALL BoundaryConditions_ConstrainNodeDofsEqual(boundaryConditions,field, & @@ -13532,7 +13681,7 @@ SUBROUTINE cmfe_CellML_VariableSetAsKnownNumberC(regionUserNumber,cellMLUserNumb NULLIFY(region) NULLIFY(cellml) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_CellMLGet(region,cellMLUserNumber,cellml,err,error,*999) CALL CELLML_VARIABLE_SET_AS_KNOWN(cellml,cellMLModelUserNumber,variableID,err,error,*999) @@ -13611,7 +13760,7 @@ SUBROUTINE cmfe_CellML_VariableSetAsKnownNumberVS(regionUserNumber,cellMLUserNum NULLIFY(region) NULLIFY(cellml) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_CellMLGet(region,cellMLUserNumber,cellml,err,error,*999) CALL CELLML_VARIABLE_SET_AS_KNOWN(cellml,cellMLModelUserNumber,variableID,err,error,*999) @@ -13688,7 +13837,7 @@ SUBROUTINE cmfe_CellML_VariableSetAsWantedNumberC(regionUserNumber,cellMLUserNum NULLIFY(region) NULLIFY(cellml) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_CellMLGet(region,cellMLUserNumber,cellml,err,error,*999) CALL CELLML_VARIABLE_SET_AS_WANTED(cellml,cellMLModelUserNumber,variableID,err,error,*999) @@ -13765,7 +13914,7 @@ SUBROUTINE cmfe_CellML_VariableSetAsWantedNumberVS(regionUserNumber,cellMLUserNu NULLIFY(region) NULLIFY(cellml) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_CellMLGet(region,cellMLUserNumber,cellml,err,error,*999) CALL CELLML_VARIABLE_SET_AS_WANTED(cellml,cellMLModelUserNumber,variableID,err,error,*999) @@ -13851,7 +14000,7 @@ SUBROUTINE cmfe_CellML_CreateCellMLToFieldMapNumberC(regionUserNumber,cellMLUser NULLIFY(region) NULLIFY(cellml) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_CellMLGet(region,cellMLUserNumber,cellml,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL CELLML_CREATE_CELLML_TO_FIELD_MAP(cellml,cellMLModelUserNumber,variableID,cellMLParameterSet, & @@ -13944,7 +14093,7 @@ SUBROUTINE cmfe_CellML_CreateCellMLToFieldMapNumberVS(regionUserNumber,cellMLUse NULLIFY(region) NULLIFY(cellml) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_CellMLGet(region,cellMLUserNumber,cellml,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL CELLML_CREATE_CELLML_TO_FIELD_MAP(cellml,cellMLModelUserNumber,variableID,cellMLParameterSet, & @@ -14037,7 +14186,7 @@ SUBROUTINE cmfe_CellML_CreateFieldToCellMLMapNumberC(regionUserNumber,cellMLUser NULLIFY(region) NULLIFY(cellml) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_CellMLGet(region,cellMLUserNumber,cellml,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL CELLML_CREATE_FIELD_TO_CELLML_MAP(cellml,field,variableType,componentNumber,fieldParameterSet, & @@ -14131,7 +14280,7 @@ SUBROUTINE cmfe_CellML_CreateFieldToCellMLMapNumberVS(regionUserNumber,cellMLUse NULLIFY(region) NULLIFY(cellml) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_CellMLGet(region,cellMLUserNumber,cellml,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL CELLML_CREATE_FIELD_TO_CELLML_MAP(cellml,field,variableType,componentNumber,fieldParameterSet, & @@ -14214,7 +14363,7 @@ SUBROUTINE cmfe_CellML_CreateFinishNumber(regionUserNumber,cellMLUserNumber,err) NULLIFY(region) NULLIFY(cellml) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_CellMLGet(region,cellMLUserNumber,cellml,err,error,*999) CALL CELLML_CREATE_FINISH(cellml,err,error,*999) @@ -14299,7 +14448,7 @@ SUBROUTINE cmfe_CellML_CreateStartNumber(cellMLUserNumber,regionUserNumber,err) NULLIFY(region) NULLIFY(cellml) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL CELLML_CREATE_START(cellMLUserNumber,region,cellml,err,error,*999) #else @@ -14377,7 +14526,7 @@ SUBROUTINE cmfe_CellML_DestroyNumber(regionUserNumber,cellMLUserNumber,err) NULLIFY(region) NULLIFY(cellml) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_CellMLGet(region,cellMLUserNumber,cellml,err,error,*999) CALL CELLML_DESTROY(cellml,err,error,*999) @@ -14450,7 +14599,7 @@ SUBROUTINE cmfe_CellML_FieldMapsCreateFinishNumber(regionUserNumber,cellMLUserNu NULLIFY(region) NULLIFY(cellml) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_CellMLGet(region,cellMLUserNumber,cellml,err,error,*999) CALL CELLML_FIELD_MAPS_CREATE_FINISH(cellml,err,error,*999) @@ -14528,7 +14677,7 @@ SUBROUTINE cmfe_CellML_FieldMapsCreateStartNumber(regionUserNumber,cellMLUserNum NULLIFY(region) NULLIFY(cellml) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_CellMLGet(region,cellMLUserNumber,cellml,err,error,*999) CALL CELLML_FIELD_MAPS_CREATE_START(cellml,err,error,*999) @@ -14605,7 +14754,7 @@ SUBROUTINE cmfe_CellML_ModelImportNumberC(regionUserNumber,cellMLUserNumber,URI, NULLIFY(region) NULLIFY(cellml) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_CellMLGet(region,cellMLUserNumber,cellml,err,error,*999) CALL CELLML_MODEL_IMPORT(cellml,URI,modelIndex,err,error,*999) @@ -14683,7 +14832,7 @@ SUBROUTINE cmfe_CellML_ModelImportNumberVS(regionUserNumber,cellMLUserNumber,URI NULLIFY(region) NULLIFY(cellml) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_CellMLGet(region,cellMLUserNumber,cellml,err,error,*999) CALL CELLML_MODEL_IMPORT(cellml,URI,modelIndex,err,error,*999) @@ -14758,7 +14907,7 @@ SUBROUTINE cmfe_CellML_ModelsFieldCreateFinishNumber(regionUserNumber,cellMLUser NULLIFY(region) NULLIFY(cellml) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_CellMLGet(region,cellMLUserNumber,cellml,err,error,*999) CALL CELLML_MODELS_FIELD_CREATE_FINISH(cellml,err,error,*999) @@ -14835,7 +14984,7 @@ SUBROUTINE cmfe_CellML_ModelsFieldCreateStartNumber(regionUserNumber,cellMLUserN NULLIFY(region) NULLIFY(field) NULLIFY(cellml) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_CellMLGet(region,cellMLUserNumber,cellml,err,error,*999) CALL CELLML_MODELS_FIELD_CREATE_START(cellMLModelsFieldUserNumber,cellml,field,err,error,*999) @@ -14914,7 +15063,7 @@ SUBROUTINE cmfe_CellML_ModelsFieldGetNumber(regionUserNumber,cellMLUserNumber,ce NULLIFY(region) NULLIFY(cellml) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_CellMLGet(region,cellMLUserNumber,cellml,err,error,*999) CALL CELLML_MODELS_FIELD_GET(cellml,field,err,error,*999) cellMLModelsFieldUserNumber = FIELD%USER_NUMBER @@ -14990,7 +15139,7 @@ SUBROUTINE cmfe_CellML_StateFieldCreateFinishNumber(regionUserNumber,cellMLUserN NULLIFY(region) NULLIFY(cellml) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_CellMLGet(region,cellMLUserNumber,cellml,err,error,*999) CALL CELLML_STATE_FIELD_CREATE_FINISH(cellml,err,error,*999) @@ -15066,7 +15215,7 @@ SUBROUTINE cmfe_CellML_StateFieldCreateStartNumber(regionUserNumber,cellMLUserNu NULLIFY(region) NULLIFY(cellml) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_CellMLGet(region,cellMLUserNumber,cellml,err,error,*999) CALL CELLML_STATE_FIELD_CREATE_START(cellMLStateFieldUserNumber,cellml,field,err,error,*999) @@ -15144,7 +15293,7 @@ SUBROUTINE cmfe_CellML_StateFieldGetNumber(regionUserNumber,cellMLUserNumber,cel NULLIFY(region) NULLIFY(cellml) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_CellMLGet(region,cellMLUserNumber,cellml,err,error,*999) CALL CELLML_STATE_FIELD_GET(cellml,field,err,error,*999) cellMLStateFieldUserNumber = field%USER_NUMBER @@ -15224,7 +15373,7 @@ SUBROUTINE cmfe_CellML_FieldComponentGetNumberC(regionUserNumber,cellMLUserNumbe NULLIFY(region) NULLIFY(cellml) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_CellMLGet(region,cellMLUserNumber,cellml,err,error,*999) CALL CELLML_FIELD_COMPONENT_GET(cellml,cellMLModelUserNumber,cellMLFieldType,variableID,fieldComponent,err,error,*999) @@ -15307,7 +15456,7 @@ SUBROUTINE cmfe_CellML_FieldComponentGetNumberVS(regionUserNumber,cellMLUserNumb NULLIFY(region) NULLIFY(cellml) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_CellMLGet(region,cellMLUserNumber,cellml,err,error,*999) CALL CELLML_FIELD_COMPONENT_GET(cellml,cellMLModelUserNumber,cellMLFieldType,variableID,fieldComponent,err,error,*999) @@ -15385,7 +15534,7 @@ SUBROUTINE cmfe_CellML_IntermediateFieldCreateFinishNumber(regionUserNumber,cell NULLIFY(region) NULLIFY(cellml) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_CellMLGet(region,cellMLUserNumber,cellml,err,error,*999) CALL CELLML_INTERMEDIATE_FIELD_CREATE_FINISH(cellml,err,error,*999) @@ -15463,7 +15612,7 @@ SUBROUTINE cmfe_CellML_IntermediateFieldCreateStartNumber(regionUserNumber,cellM NULLIFY(region) NULLIFY(cellml) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_CellMLGet(region,cellMLUserNumber,cellml,err,error,*999) CALL CELLML_INTERMEDIATE_FIELD_CREATE_START(cellMLIntermediateFieldUserNumber,cellml,field,err,error,*999) @@ -15542,7 +15691,7 @@ SUBROUTINE cmfe_CellML_IntermediateFieldGetNumber(regionUserNumber,cellMLUserNum NULLIFY(region) NULLIFY(cellml) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_CellMLGet(region,cellMLUserNumber,cellml,err,error,*999) CALL CELLML_INTERMEDIATE_FIELD_GET(cellml,field,err,error,*999) cellMLIntermediateFieldUserNumber = field%USER_NUMBER @@ -15617,7 +15766,7 @@ SUBROUTINE cmfe_CellML_ParametersFieldCreateFinishNumber(regionUserNumber,cellML NULLIFY(region) NULLIFY(cellml) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_CellMLGet(region,cellMLUserNumber,cellml,err,error,*999) CALL CELLML_PARAMETERS_FIELD_CREATE_FINISH(cellml,err,error,*999) @@ -15694,7 +15843,7 @@ SUBROUTINE cmfe_CellML_ParametersFieldCreateStartNumber(regionUserNumber,cellMLU NULLIFY(region) NULLIFY(cellml) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_CellMLGet(region,cellMLUserNumber,cellml,err,error,*999) CALL CELLML_PARAMETERS_FIELD_CREATE_START(cellMLParametersFieldUserNumber,cellml,field,err,error,*999) @@ -15773,7 +15922,7 @@ SUBROUTINE cmfe_CellML_ParametersFieldGetNumber(regionUserNumber,cellMLUserNumbe NULLIFY(region) NULLIFY(cellml) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_CellMLGet(region,cellMLUserNumber,cellml,err,error,*999) CALL CELLML_PARAMETERS_FIELD_GET(cellml,field,err,error,*999) cellMLParametersFieldUserNumber = field%USER_NUMBER @@ -15848,7 +15997,7 @@ SUBROUTINE cmfe_CellML_GenerateNumber(regionUserNumber,cellMLUserNumber,err) NULLIFY(region) NULLIFY(cellml) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_CellMLGet(region,cellMLUserNumber,cellml,err,error,*999) CALL CELLML_GENERATE(cellml,err,error,*999) @@ -16609,7 +16758,7 @@ SUBROUTINE cmfe_ControlLoop_CurrentTimesGetNumber0(problemUserNumber,controlLoop NULLIFY(controlLoop) NULLIFY(problem) - CALL Problem_Get(problemUserNumber,problem,err,error,*999) + CALL Problem_Get(problems,problemUserNumber,problem,err,error,*999) CALL Problem_ControlLoopGet(problem,controlLoopIdentifier,controlLoop,err,error,*999) CALL CONTROL_LOOP_CURRENT_TIMES_GET(controlLoop,currentTime,timeIncrement,err,error,*999) @@ -16643,7 +16792,7 @@ SUBROUTINE cmfe_ControlLoop_CurrentTimesGetNumber1(problemUserNumber,controlLoop NULLIFY(controlLoop) NULLIFY(problem) - CALL Problem_Get(problemUserNumber,problem,err,error,*999) + CALL Problem_Get(problems,problemUserNumber,problem,err,error,*999) CALL Problem_ControlLoopGet(problem,controlLoopIdentifiers,controlLoop,err,error,*999) CALL CONTROL_LOOP_CURRENT_TIMES_GET(controlLoop,currentTime,timeIncrement,err,error,*999) @@ -16702,7 +16851,7 @@ SUBROUTINE cmfe_ControlLoop_DestroyNumber0(problemUserNumber,controlLoopIdentifi NULLIFY(controlLoop) NULLIFY(problem) - CALL Problem_Get(problemUserNumber,problem,err,error,*999) + CALL Problem_Get(problems,problemUserNumber,problem,err,error,*999) CALL Problem_ControlLoopGet(problem,controlLoopIdentifier,controlLoop,err,error,*999) CALL ControlLoop_Destroy(controlLoop,err,error,*999) @@ -16734,7 +16883,7 @@ SUBROUTINE cmfe_ControlLoop_DestroyNumber1(problemUserNumber,controlLoopIdentifi NULLIFY(controlLoop) NULLIFY(problem) - CALL Problem_Get(problemUserNumber,problem,err,error,*999) + CALL Problem_Get(problems,problemUserNumber,problem,err,error,*999) CALL Problem_ControlLoopGet(problem,controlLoopIdentifiers,controlLoop,err,error,*999) CALL ControlLoop_Destroy(controlLoop,err,error,*999) @@ -16794,7 +16943,7 @@ SUBROUTINE cmfe_ControlLoop_ControlLoopGetNumber00(problemUserNumber,controlLoop NULLIFY(rootControlLoop) NULLIFY(problem) - CALL Problem_Get(problemUserNumber,problem,err,error,*999) + CALL Problem_Get(problems,problemUserNumber,problem,err,error,*999) CALL Problem_ControlLoopGet(problem,controlLoopRootIdentifier,rootControlLoop,err,error,*999) CALL CONTROL_LOOP_GET(rootControlLoop,controlLoopIdentifier,controlLoop%controlLoop,err,error,*999) @@ -16829,7 +16978,7 @@ SUBROUTINE cmfe_ControlLoop_ControlLoopGetNumber10(problemUserNumber,controlLoop NULLIFY(rootControlLoop) NULLIFY(problem) - CALL Problem_Get(problemUserNumber,problem,err,error,*999) + CALL Problem_Get(problems,problemUserNumber,problem,err,error,*999) CALL Problem_ControlLoopGet(problem,controlLoopRootIdentifiers,rootControlLoop,err,error,*999) CALL CONTROL_LOOP_GET(rootControlLoop,controlLoopIdentifier,controlLoop%controlLoop,err,error,*999) @@ -16864,7 +17013,7 @@ SUBROUTINE cmfe_ControlLoop_ControlLoopGetNumber01(problemUserNumber,controlLoop NULLIFY(rootControlLoop) NULLIFY(problem) - CALL Problem_Get(problemUserNumber,problem,err,error,*999) + CALL Problem_Get(problems,problemUserNumber,problem,err,error,*999) CALL Problem_ControlLoopGet(problem,controlLoopRootIdentifier,rootControlLoop,err,error,*999) CALL CONTROL_LOOP_GET(rootControlLoop,controlLoopIdentifiers,controlLoop%controlLoop,err,error,*999) @@ -16899,7 +17048,7 @@ SUBROUTINE cmfe_ControlLoop_ControlLoopGetNumber11(problemUserNumber,controlLoop NULLIFY(rootControlLoop) NULLIFY(problem) - CALL Problem_Get(problemUserNumber,problem,err,error,*999) + CALL Problem_Get(problems,problemUserNumber,problem,err,error,*999) CALL Problem_ControlLoopGet(problem,controlLoopRootIdentifiers,rootControlLoop,err,error,*999) CALL CONTROL_LOOP_GET(rootControlLoop,controlLoopIdentifiers,controlLoop%controlLoop,err,error,*999) @@ -16989,7 +17138,7 @@ SUBROUTINE cmfe_ControlLoop_IterationsSetNumber0(problemUserNumber,controlLoopId NULLIFY(controlLoop) NULLIFY(problem) - CALL Problem_Get(problemUserNumber,problem,err,error,*999) + CALL Problem_Get(problems,problemUserNumber,problem,err,error,*999) CALL Problem_ControlLoopGet(problem,controlLoopIdentifier,controlLoop,err,error,*999) CALL CONTROL_LOOP_ITERATIONS_SET(controlLoop,startIteration,stopIteration,iterationIncrement,err,error,*999) @@ -17025,7 +17174,7 @@ SUBROUTINE cmfe_ControlLoop_IterationsSetNumber1(problemUserNumber,controlLoopId NULLIFY(controlLoop) NULLIFY(problem) - CALL Problem_Get(problemUserNumber,problem,err,error,*999) + CALL Problem_Get(problems,problemUserNumber,problem,err,error,*999) CALL Problem_ControlLoopGet(problem,controlLoopIdentifiers,controlLoop,err,error,*999) CALL CONTROL_LOOP_ITERATIONS_SET(controlLoop,startIteration,stopIteration,iterationIncrement,err,error,*999) @@ -17085,7 +17234,7 @@ SUBROUTINE cmfe_ControlLoop_LabelGetCNumber0(problemUserNumber,controlLoopIdenti NULLIFY(controlLoop) NULLIFY(problem) - CALL Problem_Get(problemUserNumber,problem,err,error,*999) + CALL Problem_Get(problems,problemUserNumber,problem,err,error,*999) CALL Problem_ControlLoopGet(problem,controlLoopIdentifier,controlLoop,err,error,*999) CALL CONTROL_LOOP_LABEL_GET(controlLoop,label,err,error,*999) @@ -17118,7 +17267,7 @@ SUBROUTINE cmfe_ControlLoop_LabelGetCNumber1(problemUserNumber,controlLoopIdenti NULLIFY(controlLoop) NULLIFY(problem) - CALL Problem_Get(problemUserNumber,problem,err,error,*999) + CALL Problem_Get(problems,problemUserNumber,problem,err,error,*999) CALL Problem_ControlLoopGet(problem,controlLoopIdentifiers,controlLoop,err,error,*999) CALL CONTROL_LOOP_LABEL_GET(controlLoop,label,err,error,*999) @@ -17177,7 +17326,7 @@ SUBROUTINE cmfe_ControlLoop_LabelGetVSNumber0(problemUserNumber,controlLoopIdent NULLIFY(controlLoop) NULLIFY(problem) - CALL Problem_Get(problemUserNumber,problem,err,error,*999) + CALL Problem_Get(problems,problemUserNumber,problem,err,error,*999) CALL Problem_ControlLoopGet(problem,controlLoopIdentifier,controlLoop,err,error,*999) CALL CONTROL_LOOP_LABEL_GET(controlLoop,label,err,error,*999) @@ -17210,7 +17359,7 @@ SUBROUTINE cmfe_ControlLoop_LabelGetVSNumber1(problemUserNumber,controlLoopIdent NULLIFY(controlLoop) NULLIFY(problem) - CALL Problem_Get(problemUserNumber,problem,err,error,*999) + CALL Problem_Get(problems,problemUserNumber,problem,err,error,*999) CALL Problem_ControlLoopGet(problem,controlLoopIdentifiers,controlLoop,err,error,*999) CALL CONTROL_LOOP_LABEL_GET(controlLoop,label,err,error,*999) @@ -17269,7 +17418,7 @@ SUBROUTINE cmfe_ControlLoop_LabelSetCNumber0(problemUserNumber,controlLoopIdenti NULLIFY(controlLoop) NULLIFY(problem) - CALL Problem_Get(problemUserNumber,problem,err,error,*999) + CALL Problem_Get(problems,problemUserNumber,problem,err,error,*999) CALL Problem_ControlLoopGet(problem,controlLoopIdentifier,controlLoop,err,error,*999) CALL CONTROL_LOOP_LABEL_SET(controlLoop,label,err,error,*999) @@ -17302,7 +17451,7 @@ SUBROUTINE cmfe_ControlLoop_LabelSetCNumber1(problemUserNumber,controlLoopIdenti NULLIFY(controlLoop) NULLIFY(problem) - CALL Problem_Get(problemUserNumber,problem,err,error,*999) + CALL Problem_Get(problems,problemUserNumber,problem,err,error,*999) CALL Problem_ControlLoopGet(problem,controlLoopIdentifiers,controlLoop,err,error,*999) CALL CONTROL_LOOP_LABEL_SET(controlLoop,label,err,error,*999) @@ -17361,7 +17510,7 @@ SUBROUTINE cmfe_ControlLoop_LabelSetVSNumber0(problemUserNumber,controlLoopIdent NULLIFY(controlLoop) NULLIFY(problem) - CALL Problem_Get(problemUserNumber,problem,err,error,*999) + CALL Problem_Get(problems,problemUserNumber,problem,err,error,*999) CALL Problem_ControlLoopGet(problem,controlLoopIdentifier,controlLoop,err,error,*999) CALL CONTROL_LOOP_LABEL_SET(controlLoop,CHAR(label),err,error,*999) @@ -17394,7 +17543,7 @@ SUBROUTINE cmfe_ControlLoop_LabelSetVSNumber1(problemUserNumber,controlLoopIdent NULLIFY(controlLoop) NULLIFY(problem) - CALL Problem_Get(problemUserNumber,problem,err,error,*999) + CALL Problem_Get(problems,problemUserNumber,problem,err,error,*999) CALL Problem_ControlLoopGet(problem,controlLoopIdentifiers,controlLoop,err,error,*999) CALL CONTROL_LOOP_LABEL_SET(controlLoop,CHAR(label),err,error,*999) @@ -17453,7 +17602,7 @@ SUBROUTINE cmfe_ControlLoop_MaximumIterationsSetNumber0(problemUserNumber,contro NULLIFY(controlLoop) NULLIFY(problem) - CALL Problem_Get(problemUserNumber,problem,err,error,*999) + CALL Problem_Get(problems,problemUserNumber,problem,err,error,*999) CALL Problem_ControlLoopGet(problem,controlLoopIdentifier,controlLoop,err,error,*999) CALL CONTROL_LOOP_MAXIMUM_ITERATIONS_SET(controlLoop,maximumIterations,err,error,*999) @@ -17487,7 +17636,7 @@ SUBROUTINE cmfe_ControlLoop_MaximumIterationsSetNumber1(problemUserNumber,contro NULLIFY(controlLoop) NULLIFY(problem) - CALL Problem_Get(problemUserNumber,problem,err,error,*999) + CALL Problem_Get(problems,problemUserNumber,problem,err,error,*999) CALL Problem_ControlLoopGet(problem,controlLoopIdentifiers,controlLoop,err,error,*999) CALL CONTROL_LOOP_MAXIMUM_ITERATIONS_SET(controlLoop,maximumIterations,err,error,*999) @@ -17573,7 +17722,7 @@ SUBROUTINE cmfe_ControlLoop_AbsoluteToleranceSetNumber0(problemUserNumber,contro NULLIFY(controlLoop) NULLIFY(problem) - CALL Problem_Get(problemUserNumber,problem,err,error,*999) + CALL Problem_Get(problems,problemUserNumber,problem,err,error,*999) CALL Problem_ControlLoopGet(problem,controlLoopIdentifier,controlLoop,err,error,*999) CALL ControlLoop_AbsoluteToleranceSet(controlLoop,absoluteTolerance,err,error,*999) @@ -17607,7 +17756,7 @@ SUBROUTINE cmfe_ControlLoop_AbsoluteToleranceSetNumber1(problemUserNumber,contro NULLIFY(controlLoop) NULLIFY(problem) - CALL Problem_Get(problemUserNumber,problem,err,error,*999) + CALL Problem_Get(problems,problemUserNumber,problem,err,error,*999) CALL Problem_ControlLoopGet(problem,controlLoopIdentifiers,controlLoop,err,error,*999) CALL ControlLoop_AbsoluteToleranceSet(controlLoop,absoluteTolerance,err,error,*999) @@ -17875,7 +18024,7 @@ SUBROUTINE cmfe_ControlLoop_NumberOfSubLoopsGetNumber0(problemUserNumber,control NULLIFY(controlLoop) NULLIFY(problem) - CALL Problem_Get(problemUserNumber,problem,err,error,*999) + CALL Problem_Get(problems,problemUserNumber,problem,err,error,*999) CALL Problem_ControlLoopGet(problem,controlLoopIdentifier,controlLoop,err,error,*999) CALL CONTROL_LOOP_NUMBER_OF_SUB_LOOPS_GET(controlLoop,numberOfSubLoops,err,error,*999) @@ -17908,7 +18057,7 @@ SUBROUTINE cmfe_ControlLoop_NumberOfSubLoopsGetNumber1(problemUserNumber,control NULLIFY(controlLoop) NULLIFY(problem) - CALL Problem_Get(problemUserNumber,problem,err,error,*999) + CALL Problem_Get(problems,problemUserNumber,problem,err,error,*999) CALL Problem_ControlLoopGet(problem,controlLoopIdentifiers,controlLoop,err,error,*999) CALL CONTROL_LOOP_NUMBER_OF_SUB_LOOPS_GET(controlLoop,numberOfSubLoops,err,error,*999) @@ -17967,7 +18116,7 @@ SUBROUTINE cmfe_ControlLoop_NumberOfSubLoopsSetNumber0(problemUserNumber,control NULLIFY(controlLoop) NULLIFY(problem) - CALL Problem_Get(problemUserNumber,problem,err,error,*999) + CALL Problem_Get(problems,problemUserNumber,problem,err,error,*999) CALL Problem_ControlLoopGet(problem,controlLoopIdentifier,controlLoop,err,error,*999) CALL CONTROL_LOOP_NUMBER_OF_SUB_LOOPS_SET(controlLoop,numberOfSubLoops,err,error,*999) @@ -18000,7 +18149,7 @@ SUBROUTINE cmfe_ControlLoop_NumberOfSubLoopsSetNumber1(problemUserNumber,control NULLIFY(controlLoop) NULLIFY(problem) - CALL Problem_Get(problemUserNumber,problem,err,error,*999) + CALL Problem_Get(problems,problemUserNumber,problem,err,error,*999) CALL Problem_ControlLoopGet(problem,controlLoopIdentifiers,controlLoop,err,error,*999) CALL CONTROL_LOOP_NUMBER_OF_SUB_LOOPS_SET(controlLoop,numberOfSubLoops,err,error,*999) @@ -18059,7 +18208,7 @@ SUBROUTINE cmfe_ControlLoop_OutputTypeGetNumber0(problemUserNumber,controlLoopId NULLIFY(controlLoop) NULLIFY(problem) - CALL Problem_Get(problemUserNumber,problem,err,error,*999) + CALL Problem_Get(problems,problemUserNumber,problem,err,error,*999) CALL Problem_ControlLoopGet(problem,controlLoopIdentifier,controlLoop,err,error,*999) CALL CONTROL_LOOP_OUTPUT_TYPE_GET(controlLoop,outputType,err,error,*999) @@ -18092,7 +18241,7 @@ SUBROUTINE cmfe_ControlLoop_OutputTypeGetNumber1(problemUserNumber,controlLoopId NULLIFY(controlLoop) NULLIFY(problem) - CALL Problem_Get(problemUserNumber,problem,err,error,*999) + CALL Problem_Get(problems,problemUserNumber,problem,err,error,*999) CALL Problem_ControlLoopGet(problem,controlLoopIdentifiers,controlLoop,err,error,*999) CALL CONTROL_LOOP_OUTPUT_TYPE_GET(controlLoop,outputType,err,error,*999) @@ -18151,7 +18300,7 @@ SUBROUTINE cmfe_ControlLoop_OutputTypeSetNumber0(problemUserNumber,controlLoopId NULLIFY(controlLoop) NULLIFY(problem) - CALL Problem_Get(problemUserNumber,problem,err,error,*999) + CALL Problem_Get(problems,problemUserNumber,problem,err,error,*999) CALL Problem_ControlLoopGet(problem,controlLoopIdentifier,controlLoop,err,error,*999) CALL CONTROL_LOOP_OUTPUT_TYPE_SET(controlLoop,outputType,err,error,*999) @@ -18184,7 +18333,7 @@ SUBROUTINE cmfe_ControlLoop_OutputTypeSetNumber1(problemUserNumber,controlLoopId NULLIFY(controlLoop) NULLIFY(problem) - CALL Problem_Get(problemUserNumber,problem,err,error,*999) + CALL Problem_Get(problems,problemUserNumber,problem,err,error,*999) CALL Problem_ControlLoopGet(problem,controlLoopIdentifiers,controlLoop,err,error,*999) CALL CONTROL_LOOP_OUTPUT_TYPE_SET(controlLoop,outputType,err,error,*999) @@ -18243,7 +18392,7 @@ SUBROUTINE cmfe_ControlLoop_TimeOutputSetNumber0(problemUserNumber,controlLoopId NULLIFY(controlLoop) NULLIFY(problem) - CALL Problem_Get(problemUserNumber,problem,err,error,*999) + CALL Problem_Get(problems,problemUserNumber,problem,err,error,*999) CALL Problem_ControlLoopGet(problem,controlLoopIdentifier,controlLoop,err,error,*999) CALL CONTROL_LOOP_TIME_OUTPUT_SET(controlLoop,outputFrequency,err,error,*999) @@ -18276,7 +18425,7 @@ SUBROUTINE cmfe_ControlLoop_TimeOutputSetNumber1(problemUserNumber,controlLoopId NULLIFY(controlLoop) NULLIFY(problem) - CALL Problem_Get(problemUserNumber,problem,err,error,*999) + CALL Problem_Get(problems,problemUserNumber,problem,err,error,*999) CALL Problem_ControlLoopGet(problem,controlLoopIdentifiers,controlLoop,err,error,*999) CALL CONTROL_LOOP_TIME_OUTPUT_SET(controlLoop,outputFrequency,err,error,*999) @@ -18335,7 +18484,7 @@ SUBROUTINE cmfe_ControlLoop_TimeInputSetNumber0(problemUserNumber,controlLoopIde NULLIFY(controlLoop) NULLIFY(problem) - CALL Problem_Get(problemUserNumber,problem,err,error,*999) + CALL Problem_Get(problems,problemUserNumber,problem,err,error,*999) CALL Problem_ControlLoopGet(problem,controlLoopIdentifier,controlLoop,err,error,*999) CALL CONTROL_LOOP_TIME_OUTPUT_SET(controlLoop,inputOption,err,error,*999) @@ -18368,7 +18517,7 @@ SUBROUTINE cmfe_ControlLoop_TimeInputSetNumber1(problemUserNumber,controlLoopIde NULLIFY(controlLoop) NULLIFY(problem) - CALL Problem_Get(problemUserNumber,problem,err,error,*999) + CALL Problem_Get(problems,problemUserNumber,problem,err,error,*999) CALL Problem_ControlLoopGet(problem,controlLoopIdentifiers,controlLoop,err,error,*999) CALL CONTROL_LOOP_TIME_OUTPUT_SET(controlLoop,inputOption,err,error,*999) @@ -18434,7 +18583,7 @@ SUBROUTINE cmfe_ControlLoop_TimesGetNumber0(problemUserNumber,controlLoopIdentif NULLIFY(controlLoop) NULLIFY(problem) - CALL Problem_Get(problemUserNumber,problem,err,error,*999) + CALL Problem_Get(problems,problemUserNumber,problem,err,error,*999) CALL Problem_ControlLoopGet(problem,controlLoopIdentifier,controlLoop,err,error,*999) CALL CONTROL_LOOP_TIMES_GET(controlLoop,startTime,stopTime,currentTime,timeIncrement, & & currentLoopIteration,outputIterationNumber,err,error,*999) @@ -18474,7 +18623,7 @@ SUBROUTINE cmfe_ControlLoop_TimesGetNumber1(problemUserNumber,controlLoopIdentif NULLIFY(controlLoop) NULLIFY(problem) - CALL Problem_Get(problemUserNumber,problem,err,error,*999) + CALL Problem_Get(problems,problemUserNumber,problem,err,error,*999) CALL Problem_ControlLoopGet(problem,controlLoopIdentifiers,controlLoop,err,error,*999) CALL CONTROL_LOOP_TIMES_GET(controlLoop,startTime,stopTime,currentTime,timeIncrement, & & currentLoopIteration,outputIterationNumber,err,error,*999) @@ -18543,7 +18692,7 @@ SUBROUTINE cmfe_ControlLoop_TimesSetNumber0(problemUserNumber,controlLoopIdentif NULLIFY(controlLoop) NULLIFY(problem) - CALL Problem_Get(problemUserNumber,problem,err,error,*999) + CALL Problem_Get(problems,problemUserNumber,problem,err,error,*999) CALL Problem_ControlLoopGet(problem,controlLoopIdentifier,controlLoop,err,error,*999) CALL CONTROL_LOOP_TIMES_SET(controlLoop,startTime,stopTime,timeIncrement,err,error,*999) @@ -18578,7 +18727,7 @@ SUBROUTINE cmfe_ControlLoop_TimesSetNumber1(problemUserNumber,controlLoopIdentif NULLIFY(controlLoop) NULLIFY(problem) - CALL Problem_Get(problemUserNumber,problem,err,error,*999) + CALL Problem_Get(problems,problemUserNumber,problem,err,error,*999) CALL Problem_ControlLoopGet(problem,controlLoopIdentifiers,controlLoop,err,error,*999) CALL CONTROL_LOOP_TIMES_SET(controlLoop,startTime,stopTime,timeIncrement,err,error,*999) @@ -18639,7 +18788,7 @@ SUBROUTINE cmfe_ControlLoop_TypeSetNumber0(problemUserNumber,controlLoopIdentifi NULLIFY(controlLoop) NULLIFY(problem) - CALL Problem_Get(problemUserNumber,problem,err,error,*999) + CALL Problem_Get(problems,problemUserNumber,problem,err,error,*999) CALL Problem_ControlLoopGet(problem,controlLoopIdentifier,controlLoop,err,error,*999) CALL CONTROL_LOOP_TYPE_SET(controlLoop,loopType,err,error,*999) @@ -18672,7 +18821,7 @@ SUBROUTINE cmfe_ControlLoop_TypeSetNumber1(problemUserNumber,controlLoopIdentifi NULLIFY(controlLoop) NULLIFY(problem) - CALL Problem_Get(problemUserNumber,problem,err,error,*999) + CALL Problem_Get(problems,problemUserNumber,problem,err,error,*999) CALL Problem_ControlLoopGet(problem,controlLoopIdentifiers,controlLoop,err,error,*999) CALL CONTROL_LOOP_TYPE_SET(controlLoop,loopType,err,error,*999) @@ -18729,7 +18878,7 @@ SUBROUTINE cmfe_CoordinateSystem_CreateFinishNumber(coordinateSystemUserNumber,e ENTERS("cmfe_CoordinateSystem_CreateFinishNumber",err,error,*999) NULLIFY(coordinateSystem) - CALL CoordinateSystem_Get(coordinateSystemUserNumber,coordinateSystem,err,error,*999) + CALL CoordinateSystem_Get(coordinateSystems,coordinateSystemUserNumber,coordinateSystem,err,error,*999) CALL COORDINATE_SYSTEM_CREATE_FINISH(coordinateSystem,err,error,*999) #ifdef TAUPROF @@ -18851,7 +19000,7 @@ SUBROUTINE cmfe_CoordinateSystem_DestroyNumber(coordinateSystemUserNumber,err) ENTERS("cmfe_CoordinateSystem_DestroyNumber",err,error,*999) NULLIFY(coordinateSystem) - CALL CoordinateSystem_Get(coordinateSystemUserNumber,coordinateSystem,err,error,*999) + CALL CoordinateSystem_Get(coordinateSystems,coordinateSystemUserNumber,coordinateSystem,err,error,*999) CALL COORDINATE_SYSTEM_DESTROY(coordinateSystem,err,error,*999) EXITS("cmfe_CoordinateSystem_DestroyNumber") @@ -18905,7 +19054,7 @@ SUBROUTINE cmfe_CoordinateSystem_DimensionGetNumber(coordinateSystemUserNumber,c ENTERS("cmfe_CoordinateSystem_DimensionGetNumber",err,error,*999) NULLIFY(coordinateSystem) - CALL CoordinateSystem_Get(coordinateSystemUserNumber,coordinateSystem,err,error,*999) + CALL CoordinateSystem_Get(coordinateSystems,coordinateSystemUserNumber,coordinateSystem,err,error,*999) CALL CoordinateSystem_DimensionGet(coordinateSystem,coordinateSystemDimension,err,error,*999) EXITS("cmfe_CoordinateSystem_DimensionGetNumber") @@ -18960,7 +19109,7 @@ SUBROUTINE cmfe_CoordinateSystem_DimensionSetNumber(coordinateSystemUserNumber,c ENTERS("cmfe_CoordinateSystem_DimensionSetNumber",err,error,*999) NULLIFY(coordinateSystem) - CALL CoordinateSystem_Get(coordinateSystemUserNumber,coordinateSystem,err,error,*999) + CALL CoordinateSystem_Get(coordinateSystems,coordinateSystemUserNumber,coordinateSystem,err,error,*999) CALL COORDINATE_SYSTEM_DIMENSION_SET(coordinateSystem,coordinateSystemDimension,err,error,*999) EXITS("cmfe_CoordinateSystem_DimensionSetNumber") @@ -19015,7 +19164,7 @@ SUBROUTINE cmfe_CoordinateSystem_FocusGetNumber(coordinateSystemUserNumber,focus ENTERS("cmfe_CoordinateSystem_FocusGetNumber",err,error,*999) NULLIFY(coordinateSystem) - CALL CoordinateSystem_Get(coordinateSystemUserNumber,coordinateSystem,err,error,*999) + CALL CoordinateSystem_Get(coordinateSystems,coordinateSystemUserNumber,coordinateSystem,err,error,*999) CALL COORDINATE_SYSTEM_FOCUS_GET(coordinateSystem,focus,err,error,*999) EXITS("cmfe_CoordinateSystem_FocusGetNumber") @@ -19070,7 +19219,7 @@ SUBROUTINE cmfe_CoordinateSystem_FocusSetNumber(coordinateSystemUserNumber,focus ENTERS("cmfe_CoordinateSystem_FocusSetNumber",err,error,*999) NULLIFY(coordinateSystem) - CALL CoordinateSystem_Get(coordinateSystemUserNumber,coordinateSystem,err,error,*999) + CALL CoordinateSystem_Get(coordinateSystems,coordinateSystemUserNumber,coordinateSystem,err,error,*999) CALL COORDINATE_SYSTEM_FOCUS_SET(coordinateSystem,focus,err,error,*999) EXITS("cmfe_CoordinateSystem_FocusSetNumber") @@ -19125,7 +19274,7 @@ SUBROUTINE cmfe_CoordinateSystem_RadialInterpolationGetNumber(coordinateSystemUs ENTERS("cmfe_CoordinateSystem_RadialInterpolationGetNumber",err,error,*999) NULLIFY(coordinateSystem) - CALL CoordinateSystem_Get(coordinateSystemUserNumber,coordinateSystem,err,error,*999) + CALL CoordinateSystem_Get(coordinateSystems,coordinateSystemUserNumber,coordinateSystem,err,error,*999) CALL Coordinates_RadialInterpolationTypeGet(coordinateSystem,radialInterpolationType,err,error,*999) EXITS("cmfe_CoordinateSystem_RadialInterpolationGetNumber") @@ -19182,7 +19331,7 @@ SUBROUTINE cmfe_CoordinateSystem_RadialInterpolationSetNumber(coordinateSystemUs ENTERS("cmfe_CoordinateSystem_RadialInterpolationSetNumber",err,error,*999) NULLIFY(coordinateSystem) - CALL CoordinateSystem_Get(coordinateSystemUserNumber,coordinateSystem,err,error,*999) + CALL CoordinateSystem_Get(coordinateSystems,coordinateSystemUserNumber,coordinateSystem,err,error,*999) CALL Coordinates_RadialInterpolationTypeSet(coordinateSystem,radialInterpolationType,err,error,*999) EXITS("cmfe_CoordinateSystem_RadialInterpolationSetNumber") @@ -19239,7 +19388,7 @@ SUBROUTINE cmfe_CoordinateSystem_TypeGetNumber(coordinateSystemUserNumber,coordi ENTERS("cmfe_CoordinateSystem_TypeGetNumber",err,error,*999) NULLIFY(coordinateSystem) - CALL CoordinateSystem_Get(coordinateSystemUserNumber,coordinateSystem,err,error,*999) + CALL CoordinateSystem_Get(coordinateSystems,coordinateSystemUserNumber,coordinateSystem,err,error,*999) CALL COORDINATE_SYSTEM_TYPE_GET(coordinateSystem,coordinateSystemType,err,error,*999) EXITS("cmfe_CoordinateSystem_TypeGetNumber") @@ -19294,7 +19443,7 @@ SUBROUTINE cmfe_CoordinateSystem_TypeSetNumber(coordinateSystemUserNumber,coordi ENTERS("cmfe_CoordinateSystem_TypeSetNumber",err,error,*999) NULLIFY(coordinateSystem) - CALL CoordinateSystem_Get(coordinateSystemUserNumber,coordinateSystem,err,error,*999) + CALL CoordinateSystem_Get(coordinateSystems,coordinateSystemUserNumber,coordinateSystem,err,error,*999) CALL COORDINATE_SYSTEM_TYPE_SET(coordinateSystem,coordinateSystemType,err,error,*999) EXITS("cmfe_CoordinateSystem_TypeSetNumber") @@ -19349,7 +19498,7 @@ SUBROUTINE cmfe_CoordinateSystem_OriginGetNumber(coordinateSystemUserNumber,orig ENTERS("cmfe_CoordinateSystem_OriginGetNumber",err,error,*999) NULLIFY(coordinateSystem) - CALL CoordinateSystem_Get(coordinateSystemUserNumber,coordinateSystem,err,error,*999) + CALL CoordinateSystem_Get(coordinateSystems,coordinateSystemUserNumber,coordinateSystem,err,error,*999) CALL COORDINATE_SYSTEM_ORIGIN_GET(coordinateSystem,origin,err,error,*999) EXITS("cmfe_CoordinateSystem_OriginGetNumber") @@ -19404,7 +19553,7 @@ SUBROUTINE cmfe_CoordinateSystem_OriginSetNumber(coordinateSystemUserNumber,orig ENTERS("cmfe_CoordinateSystem_OriginSetNumber",err,error,*999) NULLIFY(coordinateSystem) - CALL CoordinateSystem_Get(coordinateSystemUserNumber,coordinateSystem,err,error,*999) + CALL CoordinateSystem_Get(coordinateSystems,coordinateSystemUserNumber,coordinateSystem,err,error,*999) CALL COORDINATE_SYSTEM_ORIGIN_SET(coordinateSystem,origin,err,error,*999) EXITS("cmfe_CoordinateSystem_OriginSetNumber") @@ -19459,7 +19608,7 @@ SUBROUTINE cmfe_CoordinateSystem_OrientationGetNumber(coordinateSystemUserNumber ENTERS("cmfe_CoordinateSystem_OrientationGetNumber",err,error,*999) NULLIFY(coordinateSystem) - CALL CoordinateSystem_Get(coordinateSystemUserNumber,coordinateSystem,err,error,*999) + CALL CoordinateSystem_Get(coordinateSystems,coordinateSystemUserNumber,coordinateSystem,err,error,*999) CALL COORDINATE_SYSTEM_ORIENTATION_GET(coordinateSystem,orientation,err,error,*999) EXITS("cmfe_CoordinateSystem_OrientationGetNumber") @@ -19514,7 +19663,7 @@ SUBROUTINE cmfe_CoordinateSystem_OrientationSetNumber(coordinateSystemUserNumber ENTERS("cmfe_CoordinateSystem_OrientationSetNumber",err,error,*999) NULLIFY(coordinateSystem) - CALL CoordinateSystem_Get(coordinateSystemUserNumber,coordinateSystem,err,error,*999) + CALL CoordinateSystem_Get(coordinateSystems,coordinateSystemUserNumber,coordinateSystem,err,error,*999) CALL COORDINATE_SYSTEM_ORIENTATION_SET(coordinateSystem,orientation,err,error,*999) EXITS("cmfe_CoordinateSystem_OrientationSetNumber") @@ -19573,7 +19722,7 @@ SUBROUTINE cmfe_DataPoints_CreateFinishNumber(regionUserNumber,dataPointsUserNum NULLIFY(region) NULLIFY(dataPoints) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_DataPointsGet(region,dataPointsUserNumber,dataPoints,err,error,*999) CALL DataPoints_CreateFinish(dataPoints,err,error,*999) @@ -19631,7 +19780,7 @@ SUBROUTINE cmfe_DataPoints_CreateStartNumber(dataPointsUserNumber,regionUserNumb NULLIFY(region) NULLIFY(dataPoints) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL DataPoints_CreateStart(dataPointsUserNumber,region,numberOfDataPoints,dataPoints,err,error,*999) EXITS("cmfe_DataPoints_CreateStartNumber") @@ -19723,7 +19872,7 @@ SUBROUTINE cmfe_DataPoints_DestroyNumber(regionUserNumber,dataPointsUserNumber,e NULLIFY(region) NULLIFY(dataPoints) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_DataPointsGet(region,dataPointsUserNumber,dataPoints,err,error,*999) CALL DataPoints_Destroy(dataPoints,err,error,*999) @@ -19781,7 +19930,7 @@ SUBROUTINE cmfe_DataPoints_NumberOfDataPointsGetNumber(regionUserNumber,dataPoin NULLIFY(region) NULLIFY(dataPoints) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_DataPointsGet(region,dataPointsUserNumber,dataPoints,err,error,*999) CALL DataPoints_NumberOfDataPointsGet(dataPoints,numberOfDataPoints,err,error,*999) @@ -19842,7 +19991,7 @@ SUBROUTINE cmfe_DataPoints_LabelGetCNumber(regionUserNumber,dataPointsUserNumber NULLIFY(region) NULLIFY(dataPoints) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_DataPointsGet(region,dataPointsUserNumber,dataPoints,err,error,*999) CALL DataPoints_LabelGet(dataPoints,dataPointUserNumber,label,err,error,*999) @@ -19903,7 +20052,7 @@ SUBROUTINE cmfe_DataPoints_LabelGetVSNumber(regionUserNumber,dataPointsUserNumbe NULLIFY(region) NULLIFY(dataPoints) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_DataPointsGet(region,dataPointsUserNumber,dataPoints,err,error,*999) CALL DataPoints_LabelGet(dataPoints,dataPointUserNumber,label,err,error,*999) @@ -19964,7 +20113,7 @@ SUBROUTINE cmfe_DataPoints_LabelSetCNumber(regionUserNumber,dataPointsUserNumber NULLIFY(region) NULLIFY(dataPoints) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_DataPointsGet(region,dataPointsUserNumber,dataPoints,err,error,*999) CALL DataPoints_LabelSet(dataPoints,dataPointUserNumber,label,err,error,*999) @@ -20025,7 +20174,7 @@ SUBROUTINE cmfe_DataPoints_LabelSetVSNumber(regionUserNumber,dataPointsUserNumbe NULLIFY(region) NULLIFY(dataPoints) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_DataPointsGet(region,dataPointsUserNumber,dataPoints,err,error,*999) CALL DataPoints_LabelSet(dataPoints,dataPointUserNumber,label,err,error,*999) @@ -20087,7 +20236,7 @@ SUBROUTINE cmfe_DataPoints_UserNumberGetNumber(regionUserNumber,dataPointsUserNu NULLIFY(region) NULLIFY(dataPoints) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_DataPointsGet(region,dataPointsUserNumber,dataPoints,err,error,*999) CALL DataPoints_UserNumberGet(dataPoints,dataPointGlobalNumber,dataPointUserNumber,err,error,*999) @@ -20149,7 +20298,7 @@ SUBROUTINE cmfe_DataPoints_UserNumberSetNumber(regionUserNumber,dataPointsUserNu NULLIFY(region) NULLIFY(dataPoints) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_DataPointsGet(region,dataPointsUserNumber,dataPoints,err,error,*999) CALL DataPoints_UserNumberSet(dataPoints,dataPointGlobalNumber,dataPointUserNumber,err,error,*999) @@ -20210,7 +20359,7 @@ SUBROUTINE cmfe_DataPoints_PositionGetNumber(regionUserNumber,dataPointsUserNumb NULLIFY(region) NULLIFY(dataPoints) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_DataPointsGet(region,dataPointsUserNumber,dataPoints,err,error,*999) CALL DataPoints_PositionGet(dataPoints,dataPointUserNumber,dataPointPosition,err,error,*999) @@ -20271,7 +20420,7 @@ SUBROUTINE cmfe_DataPoints_PositionSetNumber(regionUserNumber,dataPointsUserNumb NULLIFY(region) NULLIFY(dataPoints) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_DataPointsGet(region,dataPointsUserNumber,dataPoints,err,error,*999) CALL DataPoints_PositionSet(dataPoints,dataPointUserNumber,dataPointPosition,err,error,*999) @@ -20332,7 +20481,7 @@ SUBROUTINE cmfe_DataPoints_WeightsGetNumber(regionUserNumber,dataPointsUserNumbe NULLIFY(region) NULLIFY(dataPoints) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_DataPointsGet(region,dataPointsUserNumber,dataPoints,err,error,*999) CALL DataPoints_WeightsGet(dataPoints,dataPointUserNumber,dataPointWeights,err,error,*999) @@ -20393,7 +20542,7 @@ SUBROUTINE cmfe_DataPoints_WeightsSetNumber(regionUserNumber,dataPointsUserNumbe NULLIFY(region) NULLIFY(dataPoints) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_DataPointsGet(region,dataPointsUserNumber,dataPoints,err,error,*999) CALL DataPoints_WeightsSet(dataPoints,dataPointUserNumber,dataPointWeights,err,error,*999) @@ -20459,7 +20608,7 @@ SUBROUTINE cmfe_DataProjection_AbsoluteToleranceGetNumber(regionUserNumber,dataP NULLIFY(region) NULLIFY(dataPoints) NULLIFY(dataProjection) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_DataPointsGet(region,dataPointsUserNumber,dataPoints,err,error,*999) CALL DataPoints_DataProjectionGet(dataPoints,dataProjectionUserNumber,dataProjection,err,error,*999) CALL DataProjection_AbsoluteToleranceGet(dataProjection,absoluteTolerance,err,error,*999) @@ -20524,7 +20673,7 @@ SUBROUTINE cmfe_DataProjection_AbsoluteToleranceSetNumber(regionUserNumber,dataP NULLIFY(region) NULLIFY(dataPoints) NULLIFY(dataProjection) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_DataPointsGet(region,dataPointsUserNumber,dataPoints,err,error,*999) CALL DataPoints_DataProjectionGet(dataPoints,dataProjectionUserNumber,dataProjection,err,error,*999) CALL DataProjection_AbsoluteToleranceSet(dataProjection,absoluteTolerance,err,error,*999) @@ -20587,7 +20736,7 @@ SUBROUTINE cmfe_DataProjection_CreateFinishNumber(regionUserNumber,dataPointsUse NULLIFY(region) NULLIFY(dataPoints) NULLIFY(dataProjection) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_DataPointsGet(region,dataPointsUserNumber,dataPoints,err,error,*999) CALL DataPoints_DataProjectionGet(dataPoints,dataProjectionUserNumber,dataProjection,err,error,*999) CALL DataProjection_CreateFinish(dataProjection,err,error,*999) @@ -20653,7 +20802,7 @@ SUBROUTINE cmfe_DataProjection_CreateStartNumber(regionUserNumber,dataPointsUser NULLIFY(dataPoints) NULLIFY(projectionField) NULLIFY(region) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_DataPointsGet(region,dataPointsUserNumber,dataPoints,err,error,*999) CALL Region_FieldGet(region,projectionFieldUserNumber,projectionField,err,error,*999) CALL DataProjection_CreateStart(dataProjectionUserNumber,dataPoints,projectionField,projectionFieldVariableType, & @@ -20721,7 +20870,7 @@ SUBROUTINE cmfe_DataProjection_DestroyNumber(regionUserNumber,dataPointsUserNumb NULLIFY(region) NULLIFY(dataPoints) NULLIFY(dataProjection) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_DataPointsGet(region,dataPointsUserNumber,dataPoints,err,error,*999) CALL DataPoints_DataProjectionGet(dataPoints,dataProjectionUserNumber,dataProjection,err,error,*999) CALL DataProjection_Destroy(dataProjection,err,error,*999) @@ -20788,7 +20937,7 @@ SUBROUTINE cmfe_DataProjection_DataPointsPositionEvaluateRegionNumber(regionUser NULLIFY(dataPoints) NULLIFY(field) NULLIFY(region) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL Region_DataPointsGet(region,dataPointsUserNumber,dataPoints,err,error,*999) CALL DataPoints_DataProjectionGet(dataPoints,dataProjectionUserNumber,dataProjection,err,error,*999) @@ -20835,7 +20984,7 @@ SUBROUTINE cmfe_DataProjection_DataPointsPositionEvaluateInterfaceNumber(parentR NULLIFY(field) NULLIFY(parentRegion) NULLIFY(interface) - CALL Region_Get(parentRegionUserNumber,parentRegion,err,error,*999) + CALL Region_Get(regions,parentRegionUserNumber,parentRegion,err,error,*999) CALL Region_InterfaceGet(parentRegion,interfaceUserNumber,interface,err,error,*999) CALL Interface_DataPointsGet(interface,dataPointsUserNumber,dataPoints,err,error,*999) CALL DataPoints_DataProjectionGet(dataPoints,dataProjectionUserNumber,dataProjection,err,error,*999) @@ -20938,7 +21087,7 @@ SUBROUTINE cmfe_DataProjection_ProjectionCancelByDataPointsRegionNumber1(regionU NULLIFY(dataProjection) NULLIFY(dataPoints) NULLIFY(region) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_DataPointsGet(region,dataPointsUserNumber,dataPoints,err,error,*999) CALL DataPoints_DataProjectionGet(dataPoints,dataProjectionUserNumber,dataProjection,err,error,*999) CALL DataProjection_ProjectionCancelByDataPoints(dataProjection,dataPointUserNumbers,err,error,*999) @@ -21012,7 +21161,7 @@ SUBROUTINE cmfe_DataProjection_ProjectionCancelByDataPointsInterNum1(parentRegio NULLIFY(dataPoints) NULLIFY(parentRegion) NULLIFY(interface) - CALL Region_Get(parentRegionUserNumber,parentRegion,err,error,*999) + CALL Region_Get(regions,parentRegionUserNumber,parentRegion,err,error,*999) CALL Region_InterfaceGet(parentRegion,interfaceUserNumber,interface,err,error,*999) CALL Interface_DataPointsGet(interface,dataPointsUserNumber,dataPoints,err,error,*999) CALL DataPoints_DataProjectionGet(dataPoints,dataProjectionUserNumber,dataProjection,err,error,*999) @@ -21107,7 +21256,7 @@ SUBROUTINE cmfe_DataProjection_ProjectionCancelByDistanceRegionNumber(regionUser NULLIFY(dataProjection) NULLIFY(dataPoints) NULLIFY(region) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_DataPointsGet(region,dataPointsUserNumber,dataPoints,err,error,*999) CALL DataPoints_DataProjectionGet(dataPoints,dataProjectionUserNumber,dataProjection,err,error,*999) CALL DataProjection_ProjectionCancelByDistance(dataProjection,distanceRelation,distance,err,error,*999) @@ -21150,7 +21299,7 @@ SUBROUTINE cmfe_DataProjection_ProjectionCancelByDistanceInterfaceNumber(parentR NULLIFY(dataPoints) NULLIFY(parentRegion) NULLIFY(interface) - CALL Region_Get(parentRegionUserNumber,parentRegion,err,error,*999) + CALL Region_Get(regions,parentRegionUserNumber,parentRegion,err,error,*999) CALL Region_InterfaceGet(parentRegion,interfaceUserNumber,interface,err,error,*999) CALL Interface_DataPointsGet(interface,dataPointsUserNumber,dataPoints,err,error,*999) CALL DataPoints_DataProjectionGet(dataPoints,dataProjectionUserNumber,dataProjection,err,error,*999) @@ -21249,7 +21398,7 @@ SUBROUTINE cmfe_DataProjection_ProjectionCancelByExitTagsRegionNumber1(regionUse NULLIFY(dataProjection) NULLIFY(dataPoints) NULLIFY(region) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_DataPointsGet(region,dataPointsUserNumber,dataPoints,err,error,*999) CALL DataPoints_DataProjectionGet(dataPoints,dataProjectionUserNumber,dataProjection,err,error,*999) CALL DataProjection_ProjectionCancelByExitTags(dataProjection,exitTags,err,error,*999) @@ -21323,7 +21472,7 @@ SUBROUTINE cmfe_DataProjection_ProjectionCancelByExitTagsInterfaceNumber1(parent NULLIFY(dataPoints) NULLIFY(parentRegion) NULLIFY(interface) - CALL Region_Get(parentRegionUserNumber,parentRegion,err,error,*999) + CALL Region_Get(regions,parentRegionUserNumber,parentRegion,err,error,*999) CALL Region_InterfaceGet(parentRegion,interfaceUserNumber,interface,err,error,*999) CALL Interface_DataPointsGet(interface,dataPointsUserNumber,dataPoints,err,error,*999) CALL DataPoints_DataProjectionGet(dataPoints,dataProjectionUserNumber,dataProjection,err,error,*999) @@ -21417,7 +21566,7 @@ SUBROUTINE cmfe_DataProjection_ProjectionCandidateElementsSetRegionNumber(region NULLIFY(dataProjection) NULLIFY(dataPoints) NULLIFY(region) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_DataPointsGet(region,dataPointsUserNumber,dataPoints,err,error,*999) CALL DataPoints_DataProjectionGet(dataPoints,dataProjectionUserNumber,dataProjection,err,error,*999) CALL DataProjection_ProjectionCandidateElementsSet(dataProjection,candidateElementUserNumbers,err,error,*999) @@ -21459,7 +21608,7 @@ SUBROUTINE cmfe_DataProjection_ProjectionCandidateElementsSetIntNum(parentRegion NULLIFY(dataPoints) NULLIFY(parentRegion) NULLIFY(interface) - CALL Region_Get(parentRegionUserNumber,parentRegion,err,error,*999) + CALL Region_Get(regions,parentRegionUserNumber,parentRegion,err,error,*999) CALL Region_InterfaceGet(parentRegion,interfaceUserNumber,interface,err,error,*999) CALL Interface_DataPointsGet(interface,dataPointsUserNumber,dataPoints,err,error,*999) CALL DataPoints_DataProjectionGet(dataPoints,dataProjectionUserNumber,dataProjection,err,error,*999) @@ -21623,7 +21772,7 @@ SUBROUTINE cmfe_DataProjection_ProjectionDataCandidateElementsSetRegNum11(region NULLIFY(dataProjection) NULLIFY(dataPoints) NULLIFY(region) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_DataPointsGet(region,dataPointsUserNumber,dataPoints,err,error,*999) CALL DataPoints_DataProjectionGet(dataPoints,dataProjectionUserNumber,dataProjection,err,error,*999) CALL DataProjection_ProjectionDataCandidateElementsSet(dataProjection,dataPointUserNumbers,candidateElementUserNumbers, & @@ -21766,7 +21915,7 @@ SUBROUTINE cmfe_DataProjection_ProjectionDataCandidateElementsSetIntNum11(parent NULLIFY(dataPoints) NULLIFY(parentRegion) NULLIFY(interface) - CALL Region_Get(parentRegionUserNumber,parentRegion,err,error,*999) + CALL Region_Get(regions,parentRegionUserNumber,parentRegion,err,error,*999) CALL Region_InterfaceGet(parentRegion,interfaceUserNumber,interface,err,error,*999) CALL Interface_DataPointsGet(interface,dataPointsUserNumber,dataPoints,err,error,*999) CALL DataPoints_DataProjectionGet(dataPoints,dataProjectionUserNumber,dataProjection,err,error,*999) @@ -21927,7 +22076,7 @@ SUBROUTINE cmfe_DataProjection_ProjectionCandidateFacesSetRegionNumber(regionUse NULLIFY(dataProjection) NULLIFY(dataPoints) NULLIFY(region) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_DataPointsGet(region,dataPointsUserNumber,dataPoints,err,error,*999) CALL DataPoints_DataProjectionGet(dataPoints,dataProjectionUserNumber,dataProjection,err,error,*999) CALL DataProjection_ProjectionCandidateFacesSet(dataProjection,candidateElementUserNumbers,candidateFaceNormals,err,error,*999) @@ -21970,7 +22119,7 @@ SUBROUTINE cmfe_DataProjection_ProjectionCandidateFacesSetInterfaceNumber(parent NULLIFY(dataPoints) NULLIFY(parentRegion) NULLIFY(interface) - CALL Region_Get(parentRegionUserNumber,parentRegion,err,error,*999) + CALL Region_Get(regions,parentRegionUserNumber,parentRegion,err,error,*999) CALL Region_InterfaceGet(parentRegion,interfaceUserNumber,interface,err,error,*999) CALL Interface_DataPointsGet(interface,dataPointsUserNumber,dataPoints,err,error,*999) CALL DataPoints_DataProjectionGet(dataPoints,dataProjectionUserNumber,dataProjection,err,error,*999) @@ -22140,7 +22289,7 @@ SUBROUTINE cmfe_DataProjection_ProjectionDataCandidateFacesSetRegNum111(regionUs NULLIFY(dataProjection) NULLIFY(dataPoints) NULLIFY(region) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_DataPointsGet(region,dataPointsUserNumber,dataPoints,err,error,*999) CALL DataPoints_DataProjectionGet(dataPoints,dataProjectionUserNumber,dataProjection,err,error,*999) CALL DataProjection_ProjectionDataCandidateFacesSet(dataProjection,dataPointUserNumbers,candidateElementUserNumbers, & @@ -22287,7 +22436,7 @@ SUBROUTINE cmfe_DataProjection_ProjectionDataCandidateFacesSetIntNum111(parentRe NULLIFY(dataPoints) NULLIFY(parentRegion) NULLIFY(interface) - CALL Region_Get(parentRegionUserNumber,parentRegion,err,error,*999) + CALL Region_Get(regions,parentRegionUserNumber,parentRegion,err,error,*999) CALL Region_InterfaceGet(parentRegion,interfaceUserNumber,interface,err,error,*999) CALL Interface_DataPointsGet(interface,dataPointsUserNumber,dataPoints,err,error,*999) CALL DataPoints_DataProjectionGet(dataPoints,dataProjectionUserNumber,dataProjection,err,error,*999) @@ -22453,7 +22602,7 @@ SUBROUTINE cmfe_DataProjection_ProjectionCandidateLinesSetRegionNumber(regionUse NULLIFY(dataProjection) NULLIFY(dataPoints) NULLIFY(region) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_DataPointsGet(region,dataPointsUserNumber,dataPoints,err,error,*999) CALL DataPoints_DataProjectionGet(dataPoints,dataProjectionUserNumber,dataProjection,err,error,*999) CALL DataProjection_ProjectionCandidateLinesSet(dataProjection,candidateElementUserNumbers,candidateLineNormals,err,error,*999) @@ -22496,7 +22645,7 @@ SUBROUTINE cmfe_DataProjection_ProjectionCandidateLinesSetInterfaceNumber(parent NULLIFY(dataPoints) NULLIFY(parentRegion) NULLIFY(interface) - CALL Region_Get(parentRegionUserNumber,parentRegion,err,error,*999) + CALL Region_Get(regions,parentRegionUserNumber,parentRegion,err,error,*999) CALL Region_InterfaceGet(parentRegion,interfaceUserNumber,interface,err,error,*999) CALL Interface_DataPointsGet(interface,dataPointsUserNumber,dataPoints,err,error,*999) CALL DataPoints_DataProjectionGet(dataPoints,dataProjectionUserNumber,dataProjection,err,error,*999) @@ -22668,7 +22817,7 @@ SUBROUTINE cmfe_DataProjection_ProjectionDataCandidateLinesSetRegNum111(regionUs NULLIFY(dataProjection) NULLIFY(dataPoints) NULLIFY(region) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_DataPointsGet(region,dataPointsUserNumber,dataPoints,err,error,*999) CALL DataPoints_DataProjectionGet(dataPoints,dataProjectionUserNumber,dataProjection,err,error,*999) CALL DataProjection_ProjectionDataCandidateLinesSet(dataProjection,dataPointUserNumbers,candidateElementUserNumbers, & @@ -22817,7 +22966,7 @@ SUBROUTINE cmfe_DataProjection_ProjectionDataCandidateLinesSetIntNum111(parentRe NULLIFY(dataPoints) NULLIFY(parentRegion) NULLIFY(interface) - CALL Region_Get(parentRegionUserNumber,parentRegion,err,error,*999) + CALL Region_Get(regions,parentRegionUserNumber,parentRegion,err,error,*999) CALL Region_InterfaceGet(parentRegion,interfaceUserNumber,interface,err,error,*999) CALL Interface_DataPointsGet(interface,dataPointsUserNumber,dataPoints,err,error,*999) CALL DataPoints_DataProjectionGet(dataPoints,dataProjectionUserNumber,dataProjection,err,error,*999) @@ -22982,7 +23131,7 @@ SUBROUTINE cmfe_DataProjection_DataPointsProjectionEvaluateNumber(regionUserNumb NULLIFY(dataProjection) NULLIFY(dataPoints) NULLIFY(region) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_DataPointsGet(region,dataPointsUserNumber,dataPoints,err,error,*999) CALL DataPoints_DataProjectionGet(dataPoints,dataProjectionUserNumber,dataProjection,err,error,*999) CALL DataProjection_DataPointsProjectionEvaluate(dataProjection,projectionFieldSetType,err,error,*999) @@ -23048,7 +23197,7 @@ SUBROUTINE cmfe_DataProjection_MaximumIterationUpdateGetNumber(regionUserNumber, NULLIFY(region) NULLIFY(dataPoints) NULLIFY(dataProjection) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_DataPointsGet(region,dataPointsUserNumber,dataPoints,err,error,*999) CALL DataPoints_DataProjectionGet(dataPoints,dataProjectionUserNumber,dataProjection,err,error,*999) CALL DataProjection_MaximumInterationUpdateGet(dataProjection,maximumIterationUpdate,err,error,*999) @@ -23114,7 +23263,7 @@ SUBROUTINE cmfe_DataProjection_MaximumIterationUpdateSetNumber(regionUserNumber, NULLIFY(region) NULLIFY(dataPoints) NULLIFY(dataProjection) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_DataPointsGet(region,dataPointsUserNumber,dataPoints,err,error,*999) CALL DataPoints_DataProjectionGet(dataPoints,dataProjectionUserNumber,dataProjection,err,error,*999) CALL DataProjection_MaximumInterationUpdateSet(dataProjection,maximumIterationUpdate,err,error,*999) @@ -23180,7 +23329,7 @@ SUBROUTINE cmfe_DataProjection_MaximumNumberOfIterationsGetNumber(regionUserNumb NULLIFY(region) NULLIFY(dataPoints) NULLIFY(dataProjection) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_DataPointsGet(region,dataPointsUserNumber,dataPoints,err,error,*999) CALL DataPoints_DataProjectionGet(dataPoints,dataProjectionUserNumber,dataProjection,err,error,*999) CALL DataProjection_MaximumNumberOfIterationsGet(dataProjection,maximumNumberOfIterations,err,error,*999) @@ -23246,7 +23395,7 @@ SUBROUTINE cmfe_DataProjection_ResultAnalysisOutputNumber(regionUserNumber,dataP NULLIFY(region) NULLIFY(dataPoints) NULLIFY(dataProjection) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_DataPointsGet(region,dataPointsUserNumber,dataPoints,err,error,*999) CALL DataPoints_DataProjectionGet(dataPoints,dataProjectionUserNumber,dataProjection,err,error,*999) CALL DataProjection_ResultAnalysisOutput(dataProjection,filename,err,error,*999) @@ -23312,7 +23461,7 @@ SUBROUTINE cmfe_DataProjection_ResultDistanceGetNumber(regionUserNumber,dataPoin NULLIFY(region) NULLIFY(dataPoints) NULLIFY(dataProjection) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_DataPointsGet(region,dataPointsUserNumber,dataPoints,err,error,*999) CALL DataPoints_DataProjectionGet(dataPoints,dataProjectionUserNumber,dataProjection,err,error,*999) CALL DataProjection_ResultDistanceGet(dataProjection,dataPointUserNumber,ProjectionDistance,err,error,*999) @@ -23380,7 +23529,7 @@ SUBROUTINE cmfe_DataProjection_ResultElementNumberGetNumber(regionUserNumber,dat NULLIFY(region) NULLIFY(dataPoints) NULLIFY(dataProjection) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_DataPointsGet(region,dataPointsUserNumber,dataPoints,err,error,*999) CALL DataPoints_DataProjectionGet(dataPoints,dataProjectionUserNumber,dataProjection,err,error,*999) CALL DataProjection_ResultElementNumberGet(dataProjection,dataPointUserNumber,projectionElementNumber,err,error,*999) @@ -23449,7 +23598,7 @@ SUBROUTINE cmfe_DataProjection_ResultElementFaceNumberGetNumber(regionUserNumber NULLIFY(region) NULLIFY(dataPoints) NULLIFY(dataProjection) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_DataPointsGet(region,dataPointsUserNumber,dataPoints,err,error,*999) CALL DataPoints_DataProjectionGet(dataPoints,dataProjectionUserNumber,dataProjection,err,error,*999) CALL DataProjection_ResultElementFaceNumberGet(dataProjection,dataPointUserNumber,projectionElementFaceNumber,err, & @@ -23520,7 +23669,7 @@ SUBROUTINE cmfe_DataProjection_ResultElementLineNumberGetNumber(regionUserNumber NULLIFY(region) NULLIFY(dataPoints) NULLIFY(dataProjection) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_DataPointsGet(region,dataPointsUserNumber,dataPoints,err,error,*999) CALL DataPoints_DataProjectionGet(dataPoints,dataProjectionUserNumber,dataProjection,err,error,*999) CALL DataProjection_ResultElementLineNumberGet(dataProjection,dataPointUserNumber,projectionElementLineNumber,err, & @@ -23591,7 +23740,7 @@ SUBROUTINE cmfe_DataProjection_ResultExitTagGetNumber(regionUserNumber,dataPoint NULLIFY(region) NULLIFY(dataPoints) NULLIFY(dataProjection) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_DataPointsGet(region,dataPointsUserNumber,dataPoints,err,error,*999) CALL DataPoints_DataProjectionGet(dataPoints,dataProjectionUserNumber,dataProjection,err,error,*999) CALL DataProjection_ResultExitTagGet(dataProjection,dataPointUserNumber,projectionExitTag,err,error,*999) @@ -23658,7 +23807,7 @@ SUBROUTINE cmfe_DataProjection_ResultMaximumErrorGetNumber(regionUserNumber,data NULLIFY(region) NULLIFY(dataPoints) NULLIFY(dataProjection) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_DataPointsGet(region,dataPointsUserNumber,dataPoints,err,error,*999) CALL DataPoints_DataProjectionGet(dataPoints,dataProjectionUserNumber,dataProjection,err,error,*999) CALL DataProjection_ResultMaximumErrorGet(dataProjection,maximumDataPointUserNumber,maximumError,err,error,*999) @@ -23727,7 +23876,7 @@ SUBROUTINE cmfe_DataProjection_ResultMinimumErrorGetNumber(regionUserNumber,data NULLIFY(region) NULLIFY(dataPoints) NULLIFY(dataProjection) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_DataPointsGet(region,dataPointsUserNumber,dataPoints,err,error,*999) CALL DataPoints_DataProjectionGet(dataPoints,dataProjectionUserNumber,dataProjection,err,error,*999) CALL DataProjection_ResultMinimumErrorGet(dataProjection,minimumDataPointUserNumber,minimumError,err,error,*999) @@ -23795,7 +23944,7 @@ SUBROUTINE cmfe_DataProjection_ResultRMSErrorGetNumber(regionUserNumber,dataPoin NULLIFY(region) NULLIFY(dataPoints) NULLIFY(dataProjection) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_DataPointsGet(region,dataPointsUserNumber,dataPoints,err,error,*999) CALL DataPoints_DataProjectionGet(dataPoints,dataProjectionUserNumber,dataProjection,err,error,*999) CALL DataProjection_ResultRMSErrorGet(dataProjection,rmsError,err,error,*999) @@ -23860,7 +24009,7 @@ SUBROUTINE cmfe_DataProjection_ResultXiGetNumber(regionUserNumber,dataPointsUser NULLIFY(region) NULLIFY(dataPoints) NULLIFY(dataProjection) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_DataPointsGet(region,dataPointsUserNumber,dataPoints,err,error,*999) CALL DataPoints_DataProjectionGet(dataPoints,dataProjectionUserNumber,dataProjection,err,error,*999) CALL DataProjection_ResultXiGet(dataProjection,dataPointUserNumber,projectionXi,err,error,*999) @@ -23926,7 +24075,7 @@ SUBROUTINE cmfe_DataProjection_ResultXiSetNumber(regionUserNumber,dataPointsUser NULLIFY(region) NULLIFY(dataPoints) NULLIFY(dataProjection) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_DataPointsGet(region,dataPointsUserNumber,dataPoints,err,error,*999) CALL DataPoints_DataProjectionGet(dataPoints,dataProjectionUserNumber,dataProjection,err,error,*999) CALL DataProjection_ResultXiSet(dataProjection,dataPointUserNumber,ProjectionXi,err,error,*999) @@ -23992,7 +24141,7 @@ SUBROUTINE cmfe_DataProjection_ResultProjectionVectorGetNumber(regionUserNumber, NULLIFY(region) NULLIFY(dataPoints) NULLIFY(dataProjection) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_DataPointsGet(region,dataPointsUserNumber,dataPoints,err,error,*999) CALL DataPoints_DataProjectionGet(dataPoints,dataProjectionUserNumber,dataProjection,err,error,*999) CALL DataProjection_ResultProjectionVectorGet(dataProjection,dataPointUserNumber,projectionVector,err,error,*999) @@ -24060,7 +24209,7 @@ SUBROUTINE cmfe_DataProjection_MaximumNumberOfIterationsSetNumber(regionUserNumb NULLIFY(region) NULLIFY(dataPoints) NULLIFY(dataProjection) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_DataPointsGet(region,dataPointsUserNumber,dataPoints,err,error,*999) CALL DataPoints_DataProjectionGet(dataPoints,dataProjectionUserNumber,dataProjection,err,error,*999) CALL DataProjection_MaximumNumberOfIterationsSet(dataProjection,maximumNumberOfIterations,err,error,*999) @@ -24126,7 +24275,7 @@ SUBROUTINE cmfe_DataProjection_NumberOfClosestElementsGetNumber(regionUserNumber NULLIFY(region) NULLIFY(dataPoints) NULLIFY(dataProjection) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_DataPointsGet(region,dataPointsUserNumber,dataPoints,err,error,*999) CALL DataPoints_DataProjectionGet(dataPoints,dataProjectionUserNumber,dataProjection,err,error,*999) CALL DataProjection_NumberOfClosestElementsGet(dataProjection,numberOfClosestElements,err,error,*999) @@ -24192,7 +24341,7 @@ SUBROUTINE cmfe_DataProjection_NumberOfClosestElementsSetNumber(regionUserNumber NULLIFY(region) NULLIFY(dataPoints) NULLIFY(dataProjection) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_DataPointsGet(region,dataPointsUserNumber,dataPoints,err,error,*999) CALL DataPoints_DataProjectionGet(dataPoints,dataProjectionUserNumber,dataProjection,err,error,*999) CALL DataProjection_NumberOfClosestElementsSet(dataProjection,numberOfClosestElements,err,error,*999) @@ -24258,7 +24407,7 @@ SUBROUTINE cmfe_DataProjection_ProjectionTypeGetNumber(regionUserNumber,dataPoin NULLIFY(region) NULLIFY(dataPoints) NULLIFY(dataProjection) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_DataPointsGet(region,dataPointsUserNumber,dataPoints,err,error,*999) CALL DataPoints_DataProjectionGet(dataPoints,dataProjectionUserNumber,dataProjection,err,error,*999) CALL DataProjection_ProjectionTypeGet(dataProjection,projectionType,err,error,*999) @@ -24322,7 +24471,7 @@ SUBROUTINE cmfe_DataProjection_ProjectionTypeSetNumber(regionUserNumber,dataPoin NULLIFY(region) NULLIFY(dataPoints) NULLIFY(dataProjection) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_DataPointsGet(region,dataPointsUserNumber,dataPoints,err,error,*999) CALL DataPoints_DataProjectionGet(dataPoints,dataProjectionUserNumber,dataProjection,err,error,*999) CALL DataProjection_ProjectionTypeSet(dataProjection,projectionType,err,error,*999) @@ -24387,7 +24536,7 @@ SUBROUTINE cmfe_DataProjection_RelativeToleranceGetNumber(regionUserNumber,dataP NULLIFY(region) NULLIFY(dataPoints) NULLIFY(dataProjection) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_DataPointsGet(region,dataPointsUserNumber,dataPoints,err,error,*999) CALL DataPoints_DataProjectionGet(dataPoints,dataProjectionUserNumber,dataProjection,err,error,*999) CALL DataProjection_RelativeToleranceGet(dataProjection,relativeTolerance,err,error,*999) @@ -24452,7 +24601,7 @@ SUBROUTINE cmfe_DataProjection_RelativeToleranceSetNumber(regionUserNumber,dataP NULLIFY(region) NULLIFY(dataPoints) NULLIFY(dataProjection) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_DataPointsGet(region,dataPointsUserNumber,dataPoints,err,error,*999) CALL DataPoints_DataProjectionGet(dataPoints,dataProjectionUserNumber,dataProjection,err,error,*999) CALL DataProjection_RelativeToleranceSet(dataProjection,relativeTolerance,err,error,*999) @@ -24516,7 +24665,7 @@ SUBROUTINE cmfe_DataProjection_StartingXiGetNumber(regionUserNumber,dataPointsUs NULLIFY(region) NULLIFY(dataPoints) NULLIFY(dataProjection) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_DataPointsGet(region,dataPointsUserNumber,dataPoints,err,error,*999) CALL DataPoints_DataProjectionGet(dataPoints,dataProjectionUserNumber,dataProjection,err,error,*999) CALL DataProjection_StartingXiGet(dataProjection,startingXi,err,error,*999) @@ -24580,7 +24729,7 @@ SUBROUTINE cmfe_DataProjection_StartingXiSetNumber(regionUserNumber,dataPointsUs NULLIFY(region) NULLIFY(dataPoints) NULLIFY(dataProjection) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_DataPointsGet(region,dataPointsUserNumber,dataPoints,err,error,*999) CALL DataPoints_DataProjectionGet(dataPoints,dataProjectionUserNumber,dataProjection,err,error,*999) CALL DataProjection_StartingXiSet(dataProjection,startingXi,err,error,*999) @@ -24648,7 +24797,7 @@ SUBROUTINE cmfe_DataProjection_ElementSetInterfaceNumber(parentRegionUserNumber, NULLIFY(interface) NULLIFY(dataPoints) NULLIFY(dataProjection) - CALL Region_Get(parentRegionUserNumber,parentRegion,err,error,*999) + CALL Region_Get(regions,parentRegionUserNumber,parentRegion,err,error,*999) CALL Region_InterfaceGet(parentRegion,interfaceUserNumber,INTERFACE,err,error,*999) CALL Interface_DataPointsGet(INTERFACE,dataPointsUserNumber,dataPoints,err,error,*999) CALL DataPoints_DataProjectionGet(dataPoints,dataProjectionUserNumber,dataProjection,err,error,*999) @@ -24689,7 +24838,7 @@ SUBROUTINE cmfe_DataProjection_ElementSetRegionNumber(regionUserNumber,dataPoint NULLIFY(region) NULLIFY(dataPoints) NULLIFY(dataProjection) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_DataPointsGet(region,dataPointsUserNumber,dataPoints,err,error,*999) CALL DataPoints_DataProjectionGet(dataPoints,dataProjectionUserNumber,dataProjection,err,error,*999) CALL DataProjection_ElementSet(dataProjection,dataPointNumber,elementNumber,err,error,*999) @@ -24757,7 +24906,7 @@ SUBROUTINE cmfe_DataProjection_LabelGetCInterfaceNumber(parentRegionUserNumber,i NULLIFY(INTERFACE) NULLIFY(dataPoints) NULLIFY(dataProjection) - CALL Region_Get(parentRegionUserNumber,parentRegion,err,error,*999) + CALL Region_Get(regions,parentRegionUserNumber,parentRegion,err,error,*999) CALL Region_InterfaceGet(parentRegion,interfaceUserNumber,INTERFACE,err,error,*999) CALL Interface_DataPointsGet(INTERFACE,dataPointsUserNumber,dataPoints,err,error,*999) CALL DataPoints_DataProjectionGet(dataPoints,dataProjectionUserNumber,dataProjection,err,error,*999) @@ -24800,7 +24949,7 @@ SUBROUTINE cmfe_DataProjection_LabelGetVSInterfaceNumber(parentRegionUserNumber, NULLIFY(INTERFACE) NULLIFY(dataPoints) NULLIFY(dataProjection) - CALL Region_Get(parentRegionUserNumber,parentRegion,err,error,*999) + CALL Region_Get(regions,parentRegionUserNumber,parentRegion,err,error,*999) CALL Region_InterfaceGet(parentRegion,interfaceUserNumber,INTERFACE,err,error,*999) CALL Interface_DataPointsGet(INTERFACE,dataPointsUserNumber,dataPoints,err,error,*999) CALL DataPoints_DataProjectionGet(dataPoints,dataProjectionUserNumber,dataProjection,err,error,*999) @@ -24839,7 +24988,7 @@ SUBROUTINE cmfe_DataProjection_LabelGetCRegionNumber(regionUserNumber,dataPoints NULLIFY(region) NULLIFY(dataPoints) NULLIFY(dataProjection) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_DataPointsGet(region,dataPointsUserNumber,dataPoints,err,error,*999) CALL DataPoints_DataProjectionGet(dataPoints,dataProjectionUserNumber,dataProjection,err,error,*999) CALL DataProjection_LabelGet(dataProjection,label,err,error,*999) @@ -24876,7 +25025,7 @@ SUBROUTINE cmfe_DataProjection_LabelGetVSRegionNumber(regionUserNumber,dataPoint NULLIFY(region) NULLIFY(dataPoints) NULLIFY(dataProjection) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_DataPointsGet(region,dataPointsUserNumber,dataPoints,err,error,*999) CALL DataPoints_DataProjectionGet(dataPoints,dataProjectionUserNumber,dataProjection,err,error,*999) CALL DataProjection_LabelGet(dataProjection,label,err,error,*999) @@ -24969,7 +25118,7 @@ SUBROUTINE cmfe_DataProjection_LabelSetCInterfaceNumber(parentRegionUserNumber,i NULLIFY(INTERFACE) NULLIFY(dataPoints) NULLIFY(dataProjection) - CALL Region_Get(parentRegionUserNumber,parentRegion,err,error,*999) + CALL Region_Get(regions,parentRegionUserNumber,parentRegion,err,error,*999) CALL Region_InterfaceGet(parentRegion,interfaceUserNumber,INTERFACE,err,error,*999) CALL Interface_DataPointsGet(INTERFACE,dataPointsUserNumber,dataPoints,err,error,*999) CALL DataPoints_DataProjectionGet(dataPoints,dataProjectionUserNumber,dataProjection,err,error,*999) @@ -25012,7 +25161,7 @@ SUBROUTINE cmfe_DataProjection_LabelSetVSInterfaceNumber(parentRegionUserNumber, NULLIFY(INTERFACE) NULLIFY(dataPoints) NULLIFY(dataProjection) - CALL Region_Get(parentRegionUserNumber,parentRegion,err,error,*999) + CALL Region_Get(regions,parentRegionUserNumber,parentRegion,err,error,*999) CALL Region_InterfaceGet(parentRegion,interfaceUserNumber,INTERFACE,err,error,*999) CALL Interface_DataPointsGet(INTERFACE,dataPointsUserNumber,dataPoints,err,error,*999) CALL DataPoints_DataProjectionGet(dataPoints,dataProjectionUserNumber,dataProjection,err,error,*999) @@ -25051,7 +25200,7 @@ SUBROUTINE cmfe_DataProjection_LabelSetCRegionNumber(regionUserNumber,dataPoints NULLIFY(region) NULLIFY(dataPoints) NULLIFY(dataProjection) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_DataPointsGet(region,dataPointsUserNumber,dataPoints,err,error,*999) CALL DataPoints_DataProjectionGet(dataPoints,dataProjectionUserNumber,dataProjection,err,error,*999) CALL DataProjection_LabelSet(dataProjection,label,err,error,*999) @@ -25088,7 +25237,7 @@ SUBROUTINE cmfe_DataProjection_LabelSetVSRegionNumber(regionUserNumber,dataPoint NULLIFY(region) NULLIFY(dataPoints) NULLIFY(dataProjection) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_DataPointsGet(region,dataPointsUserNumber,dataPoints,err,error,*999) CALL DataPoints_DataProjectionGet(dataPoints,dataProjectionUserNumber,dataProjection,err,error,*999) CALL DataProjection_LabelSet(dataProjection,label,err,error,*999) @@ -25178,7 +25327,7 @@ SUBROUTINE cmfe_Equations_DestroyNumber(regionUserNumber,equationsSetUserNumber, NULLIFY(region) NULLIFY(equationsSet) NULLIFY(equations) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_EquationsSetGet(region,equationsSetUserNumber,equationsSet,err,error,*999) CALL EquationsSet_EquationsGet(equationsSet,equations,err,error,*999) CALL Equations_Destroy(equations,err,error,*999) @@ -25239,7 +25388,7 @@ SUBROUTINE cmfe_Equations_LinearityTypeGetNumber(regionUserNumber,equationsSetUs NULLIFY(region) NULLIFY(equationsSet) NULLIFY(equations) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_EquationsSetGet(region,equationsSetUserNumber,equationsSet,err,error,*999) CALL EquationsSet_EquationsGet(equationsSet,equations,err,error,*999) CALL Equations_LinearityTypeGet(equations,linearityType,err,error,*999) @@ -25301,7 +25450,7 @@ SUBROUTINE cmfe_Equations_LumpingTypeGetNumber(regionUserNumber,equationsSetUser NULLIFY(region) NULLIFY(equationsSet) NULLIFY(equations) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_EquationsSetGet(region,equationsSetUserNumber,equationsSet,err,error,*999) CALL EquationsSet_EquationsGet(equationsSet,equations,err,error,*999) CALL Equations_LumpingTypeGet(equations,lumpingType,err,error,*999) @@ -25363,7 +25512,7 @@ SUBROUTINE cmfe_Equations_LumpingTypeSetNumber(regionUserNumber,equationsSetUser NULLIFY(region) NULLIFY(equationsSet) NULLIFY(equations) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_EquationsSetGet(region,equationsSetUserNumber,equationsSet,err,error,*999) CALL EquationsSet_EquationsGet(equationsSet,equations,err,error,*999) CALL Equations_LumpingTypeSet(equations,lumpingType,err,error,*999) @@ -25425,7 +25574,7 @@ SUBROUTINE cmfe_Equations_OutputTypeGetNumber(regionUserNumber,equationsSetUserN NULLIFY(region) NULLIFY(equationsSet) NULLIFY(equations) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_EquationsSetGet(region,equationsSetUserNumber,equationsSet,err,error,*999) CALL EquationsSet_EquationsGet(equationsSet,equations,err,error,*999) CALL Equations_OutputTypeGet(equations,outputType,err,error,*999) @@ -25487,7 +25636,7 @@ SUBROUTINE cmfe_Equations_OutputTypeSetNumber(regionUserNumber,equationsSetUserN NULLIFY(region) NULLIFY(equationsSet) NULLIFY(equations) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_EquationsSetGet(region,equationsSetUserNumber,equationsSet,err,error,*999) CALL EquationsSet_EquationsGet(equationsSet,equations,err,error,*999) CALL Equations_OutputTypeSet(equations,outputType,err,error,*999) @@ -25549,7 +25698,7 @@ SUBROUTINE cmfe_Equations_SparsityTypeGetNumber(regionUserNumber,equationsSetUse NULLIFY(region) NULLIFY(equationsSet) NULLIFY(equations) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_EquationsSetGet(region,equationsSetUserNumber,equationsSet,err,error,*999) CALL EquationsSet_EquationsGet(equationsSet,equations,err,error,*999) CALL Equations_SparsityTypeGet(equations,sparsityType,err,error,*999) @@ -25611,7 +25760,7 @@ SUBROUTINE cmfe_Equations_SparsityTypeSetNumber(regionUserNumber,equationsSetUse NULLIFY(region) NULLIFY(equationsSet) NULLIFY(equations) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_EquationsSetGet(region,equationsSetUserNumber,equationsSet,err,error,*999) CALL EquationsSet_EquationsGet(equationsSet,equations,err,error,*999) CALL Equations_SparsityTypeSet(equations,sparsityType,err,error,*999) @@ -25673,7 +25822,7 @@ SUBROUTINE cmfe_Equations_TimeDependenceTypeGetNumber(regionUserNumber,equations NULLIFY(region) NULLIFY(equationsSet) NULLIFY(equations) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_EquationsSetGet(region,equationsSetUserNumber,equationsSet,err,error,*999) CALL EquationsSet_EquationsGet(equationsSet,equations,err,error,*999) CALL Equations_TimeDependenceTypeGet(equations,timeDependenceType,err,error,*999) @@ -25867,7 +26016,7 @@ SUBROUTINE cmfe_EquationsSet_DerivedCreateFinishNumber(regionUserNumber,equation NULLIFY(region) NULLIFY(equationsSet) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_EquationsSetGet(region,equationsSetUserNumber,equationsSet,err,error,*999) CALL EquationsSet_DerivedCreateFinish(equationsSet,err,error,*999) @@ -25927,7 +26076,7 @@ SUBROUTINE cmfe_EquationsSet_DerivedCreateStartNumber(regionUserNumber,equations NULLIFY(region) NULLIFY(equationsSet) NULLIFY(derivedField) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_EquationsSetGet(region,equationsSetUserNumber,equationsSet,err,error,*999) CALL Region_FieldGet(region,derivedFieldUserNumber,derivedField,err,error,*999) CALL EquationsSet_DerivedCreateStart(equationsSet,derivedFieldUserNumber,derivedField,err,error,*999) @@ -25988,7 +26137,7 @@ SUBROUTINE cmfe_EquationsSet_DerivedDestroyNumber(regionUserNumber,equationsSetU NULLIFY(region) NULLIFY(equationsSet) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_EquationsSetGet(region,equationsSetUserNumber,equationsSet,err,error,*999) CALL EquationsSet_DerivedDestroy(equationsSet,err,error,*999) @@ -26046,7 +26195,7 @@ SUBROUTINE cmfe_EquationsSet_DerivedVariableCalculateNumber(regionUserNumber,equ NULLIFY(equationsSet) NULLIFY(region) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_EquationsSetGet(region,equationsSetUserNumber,equationsSet,err,error,*999) CALL EquationsSet_DerivedVariableCalculate(equationsSet,derivedTensorType,err,error,*999) @@ -26108,7 +26257,7 @@ SUBROUTINE cmfe_EquationsSet_DerivedVariableSetNumber(regionUserNumber,equations NULLIFY(equationsSet) NULLIFY(region) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_EquationsSetGet(region,equationsSetUserNumber,equationsSet,err,error,*999) CALL EquationsSet_DerivedVariableSet(equationsSet,derivedTensorType,fieldVariableType,err,error,*999) @@ -26402,7 +26551,7 @@ SUBROUTINE cmfe_EquationsSet_AnalyticCreateFinishNumber(regionUserNumber,equatio NULLIFY(region) NULLIFY(equationsSet) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_EquationsSetGet(region,equationsSetUserNumber,equationsSet,err,error,*999) CALL EQUATIONS_SET_ANALYTIC_CREATE_FINISH(equationsSet,err,error,*999) @@ -26465,7 +26614,7 @@ SUBROUTINE cmfe_EquationsSet_AnalyticCreateStartNumber(regionUserNumber,equation NULLIFY(region) NULLIFY(equationsSet) NULLIFY(analyticField) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_EquationsSetGet(region,equationsSetUserNumber,equationsSet,err,error,*999) CALL Region_FieldGet(region,analyticFieldUserNumber,analyticField,err,error,*999) CALL EQUATIONS_SET_ANALYTIC_CREATE_START(equationsSet,analyticFunctionType,analyticFieldUserNumber,analyticField, & @@ -26528,7 +26677,7 @@ SUBROUTINE cmfe_EquationsSet_AnalyticDestroyNumber(regionUserNumber,equationsSet NULLIFY(region) NULLIFY(equationsSet) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_EquationsSetGet(region,equationsSetUserNumber,equationsSet,err,error,*999) CALL EQUATIONS_SET_ANALYTIC_DESTROY(equationsSet,err,error,*999) @@ -26586,7 +26735,7 @@ SUBROUTINE cmfe_EquationsSet_AnalyticEvaluateNumber(regionUserNumber,equationsSe NULLIFY(region) NULLIFY(equationsSet) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_EquationsSetGet(region,equationsSetUserNumber,equationsSet,err,error,*999) CALL EQUATIONS_SET_ANALYTIC_EVALUATE(equationsSet,err,error,*999) @@ -26644,7 +26793,7 @@ SUBROUTINE cmfe_EquationsSet_AnalyticTimeGetNumber(regionUserNumber,equationsSet NULLIFY(region) NULLIFY(equationsSet) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_EquationsSetGet(region,equationsSetUserNumber,equationsSet,err,error,*999) CALL EQUATIONS_SET_ANALYTIC_TIME_GET(equationsSet,time,err,error,*999) @@ -26703,7 +26852,7 @@ SUBROUTINE cmfe_EquationsSet_AnalyticTimeSetNumber(regionUserNumber,equationsSet NULLIFY(region) NULLIFY(equationsSet) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_EquationsSetGet(region,equationsSetUserNumber,equationsSet,err,error,*999) CALL EQUATIONS_SET_ANALYTIC_TIME_SET(equationsSet,time,err,error,*999) @@ -26763,7 +26912,7 @@ SUBROUTINE cmfe_EquationsSet_AnalyticUserParamSetNumber(regionUserNumber,equatio NULLIFY(region) NULLIFY(equationsSet) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_EquationsSetGet(region,equationsSetUserNumber,equationsSet,err,error,*999) CALL EQUATIONS_SET_ANALYTIC_USER_PARAM_SET(equationsSet,paramIdx,param,err,error,*999) @@ -26823,7 +26972,7 @@ SUBROUTINE cmfe_EquationsSet_AnalyticUserParamGetNumber(regionUserNumber,equatio NULLIFY(region) NULLIFY(equationsSet) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_EquationsSetGet(region,equationsSetUserNumber,equationsSet,err,error,*999) CALL EQUATIONS_SET_ANALYTIC_USER_PARAM_GET(equationsSet,paramIdx,param,err,error,*999) @@ -26882,7 +27031,7 @@ SUBROUTINE cmfe_EquationsSet_CreateFinishNumber(regionUserNumber,equationsSetUse NULLIFY(region) NULLIFY(equationsSet) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_EquationsSetGet(region,equationsSetUserNumber,equationsSet,err,error,*999) CALL EQUATIONS_SET_CREATE_FINISH(equationsSet,err,error,*999) @@ -26960,7 +27109,7 @@ SUBROUTINE cmfe_EquationsSet_CreateStartNumber(equationsSetUserNumber,regionUser NULLIFY(equationsSet) NULLIFY(geometryFibreField) NULLIFY(equationsSetField) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,geomFibreFieldUserNumber,geometryFibreField,err,error,*999) !Equations set field may not be created CALL Region_FieldGet(region,equationsSetFieldUserNumber,equationsSetField,err,error,*999) @@ -27035,7 +27184,7 @@ SUBROUTINE cmfe_EquationsSet_DestroyNumber(regionUserNumber,equationsSetUserNumb NULLIFY(region) NULLIFY(equationsSet) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_EquationsSetGet(region,equationsSetUserNumber,equationsSet,err,error,*999) CALL EQUATIONS_SET_DESTROY(equationsSet,err,error,*999) @@ -27092,7 +27241,7 @@ SUBROUTINE cmfe_EquationsSet_DependentCreateFinishNumber(regionUserNumber,equati NULLIFY(region) NULLIFY(equationsSet) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_EquationsSetGet(region,equationsSetUserNumber,equationsSet,err,error,*999) CALL EQUATIONS_SET_DEPENDENT_CREATE_FINISH(equationsSet,err,error,*999) @@ -27153,7 +27302,7 @@ SUBROUTINE cmfe_EquationsSet_DependentCreateStartNumber(regionUserNumber,equatio NULLIFY(region) NULLIFY(equationsSet) NULLIFY(dependentField) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_EquationsSetGet(region,equationsSetUserNumber,equationsSet,err,error,*999) CALL Region_FieldGet(region,dependentFieldUserNumber,dependentField,err,error,*999) CALL EQUATIONS_SET_DEPENDENT_CREATE_START(equationsSet,dependentFieldUserNumber,dependentField,err,error,*999) @@ -27215,7 +27364,7 @@ SUBROUTINE cmfe_EquationsSet_DependentDestroyNumber(regionUserNumber,equationsSe NULLIFY(region) NULLIFY(equationsSet) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_EquationsSetGet(region,equationsSetUserNumber,equationsSet,err,error,*999) CALL EQUATIONS_SET_DEPENDENT_DESTROY(equationsSet,err,error,*999) @@ -27272,7 +27421,7 @@ SUBROUTINE cmfe_EquationsSet_EquationsCreateFinishNumber(regionUserNumber,equati NULLIFY(region) NULLIFY(equationsSet) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_EquationsSetGet(region,equationsSetUserNumber,equationsSet,err,error,*999) CALL EQUATIONS_SET_EQUATIONS_CREATE_FINISH(equationsSet,err,error,*999) @@ -27332,7 +27481,7 @@ SUBROUTINE cmfe_EquationsSet_EquationsCreateStartNumber(regionUserNumber,equatio NULLIFY(region) NULLIFY(equationsSet) NULLIFY(equations) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_EquationsSetGet(region,equationsSetUserNumber,equationsSet,err,error,*999) CALL EQUATIONS_SET_EQUATIONS_CREATE_START(equationsSet,equations,err,error,*999) @@ -27391,7 +27540,7 @@ SUBROUTINE cmfe_EquationsSet_EquationsDestroyNumber(regionUserNumber,equationsSe NULLIFY(region) NULLIFY(equationsSet) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_EquationsSetGet(region,equationsSetUserNumber,equationsSet,err,error,*999) CALL EQUATIONS_SET_EQUATIONS_DESTROY(equationsSet,err,error,*999) @@ -27448,7 +27597,7 @@ SUBROUTINE cmfe_EquationsSet_IndependentCreateFinishNumber(regionUserNumber,equa NULLIFY(region) NULLIFY(equationsSet) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_EquationsSetGet(region,equationsSetUserNumber,equationsSet,err,error,*999) CALL EQUATIONS_SET_INDEPENDENT_CREATE_FINISH(equationsSet,err,error,*999) @@ -27510,7 +27659,7 @@ SUBROUTINE cmfe_EquationsSet_IndependentCreateStartNumber(regionUserNumber,equat NULLIFY(region) NULLIFY(equationsSet) NULLIFY(independentField) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_EquationsSetGet(region,equationsSetUserNumber,equationsSet,err,error,*999) CALL Region_FieldGet(region,independentFieldUserNumber,independentField,err,error,*999) CALL EQUATIONS_SET_DEPENDENT_CREATE_START(equationsSet,independentFieldUserNumber,independentField,err,error,*999) @@ -27572,7 +27721,7 @@ SUBROUTINE cmfe_EquationsSet_IndependentDestroyNumber(regionUserNumber,equations NULLIFY(region) NULLIFY(equationsSet) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_EquationsSetGet(region,equationsSetUserNumber,equationsSet,err,error,*999) CALL EQUATIONS_SET_INDEPENDENT_DESTROY(equationsSet,err,error,*999) @@ -27630,7 +27779,7 @@ SUBROUTINE cmfe_EquationsSet_LabelGetCNumber(regionUserNumber,equationsSetUserNu NULLIFY(region) NULLIFY(equationsSet) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_EquationsSetGet(region,equationsSetUserNumber,equationsSet,err,error,*999) CALL EquationsSet_LabelGet(equationsSet,label,err,error,*999) @@ -27689,7 +27838,7 @@ SUBROUTINE cmfe_EquationsSet_LabelGetVSNumber(regionUserNumber,equationsSetUserN NULLIFY(region) NULLIFY(equationsSet) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_EquationsSetGet(region,equationsSetUserNumber,equationsSet,err,error,*999) CALL EquationsSet_LabelGet(equationsSet,label,err,error,*999) @@ -27748,7 +27897,7 @@ SUBROUTINE cmfe_EquationsSet_LabelSetCNumber(regionUserNumber,equationsSetUserNu NULLIFY(region) NULLIFY(equationsSet) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_EquationsSetGet(region,equationsSetUserNumber,equationsSet,err,error,*999) CALL EquationsSet_LabelSet(equationsSet,label,err,error,*999) @@ -27807,7 +27956,7 @@ SUBROUTINE cmfe_EquationsSet_LabelSetVSNumber(regionUserNumber,equationsSetUserN NULLIFY(region) NULLIFY(equationsSet) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_EquationsSetGet(region,equationsSetUserNumber,equationsSet,err,error,*999) CALL EquationsSet_LabelSet(equationsSet,label,err,error,*999) @@ -27865,7 +28014,7 @@ SUBROUTINE cmfe_EquationsSet_MaterialsCreateFinishNumber(regionUserNumber,equati NULLIFY(region) NULLIFY(equationsSet) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_EquationsSetGet(region,equationsSetUserNumber,equationsSet,err,error,*999) CALL EQUATIONS_SET_MATERIALS_CREATE_FINISH(equationsSet,err,error,*999) @@ -27926,7 +28075,7 @@ SUBROUTINE cmfe_EquationsSet_MaterialsCreateStartNumber(regionUserNumber,equatio NULLIFY(region) NULLIFY(equationsSet) NULLIFY(materialsField) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_EquationsSetGet(region,equationsSetUserNumber,equationsSet,err,error,*999) CALL Region_FieldGet(region,materialsFieldUserNumber,materialsField,err,error,*999) CALL EQUATIONS_SET_MATERIALS_CREATE_START(equationsSet,materialsFieldUserNumber,materialsField,err,error,*999) @@ -27988,7 +28137,7 @@ SUBROUTINE cmfe_EquationsSet_MaterialsDestroyNumber(regionUserNumber,equationsSe NULLIFY(region) NULLIFY(equationsSet) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_EquationsSetGet(region,equationsSetUserNumber,equationsSet,err,error,*999) CALL EQUATIONS_SET_MATERIALS_DESTROY(equationsSet,err,error,*999) @@ -28046,7 +28195,7 @@ SUBROUTINE cmfe_EquationsSet_OutputTypeGetNumber(regionUserNumber,equationsSetUs NULLIFY(region) NULLIFY(equationsSet) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_EquationsSetGet(region,equationsSetUserNumber,equationsSet,err,error,*999) CALL EquationsSet_OutputTypeGet(equationsSet,outputType,err,error,*999) @@ -28105,7 +28254,7 @@ SUBROUTINE cmfe_EquationsSet_OutputTypeSetNumber(regionUserNumber,equationsSetUs NULLIFY(region) NULLIFY(equationsSet) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_EquationsSetGet(region,equationsSetUserNumber,equationsSet,err,error,*999) CALL EquationsSet_OutputTypeSet(equationsSet,outputType,err,error,*999) @@ -28164,7 +28313,7 @@ SUBROUTINE cmfe_EquationsSet_SolutionMethodGetNumber(regionUserNumber,equationsS NULLIFY(region) NULLIFY(equationsSet) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_EquationsSetGet(region,equationsSetUserNumber,equationsSet,err,error,*999) CALL EQUATIONS_SET_SOLUTION_METHOD_GET(equationsSet,solutionMethod,err,error,*999) @@ -28223,7 +28372,7 @@ SUBROUTINE cmfe_EquationsSet_SolutionMethodSetNumber(regionUserNumber,equationsS NULLIFY(region) NULLIFY(equationsSet) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_EquationsSetGet(region,equationsSetUserNumber,equationsSet,err,error,*999) CALL EQUATIONS_SET_SOLUTION_METHOD_SET(equationsSet,solutionMethod,err,error,*999) @@ -28281,7 +28430,7 @@ SUBROUTINE cmfe_EquationsSet_SourceCreateFinishNumber(regionUserNumber,equations NULLIFY(region) NULLIFY(equationsSet) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_EquationsSetGet(region,equationsSetUserNumber,equationsSet,err,error,*999) CALL EQUATIONS_SET_SOURCE_CREATE_FINISH(equationsSet,err,error,*999) @@ -28341,7 +28490,7 @@ SUBROUTINE cmfe_EquationsSet_SourceCreateStartNumber(regionUserNumber,equationsS NULLIFY(region) NULLIFY(equationsSet) NULLIFY(sourceField) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_EquationsSetGet(region,equationsSetUserNumber,equationsSet,err,error,*999) CALL Region_FieldGet(region,sourceFieldUserNumber,sourceField,err,error,*999) CALL EQUATIONS_SET_SOURCE_CREATE_START(equationsSet,sourceFieldUserNumber,sourceField,err,error,*999) @@ -28401,7 +28550,7 @@ SUBROUTINE cmfe_EquationsSet_SourceDestroyNumber(regionUserNumber,equationsSetUs NULLIFY(region) NULLIFY(equationsSet) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_EquationsSetGet(region,equationsSetUserNumber,equationsSet,err,error,*999) CALL EQUATIONS_SET_SOURCE_DESTROY(equationsSet,err,error,*999) @@ -28459,7 +28608,7 @@ SUBROUTINE cmfe_EquationsSet_SpecificationGetNumber(regionUserNumber,equationsSe NULLIFY(region) NULLIFY(equationsSet) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_EquationsSetGet(region,equationsSetUserNumber,equationsSet,err,error,*999) CALL EquationsSet_SpecificationGet(equationsSet,equationsSetSpecification,err,error,*999) @@ -28520,7 +28669,7 @@ SUBROUTINE cmfe_EquationsSet_SpecificationSizeGetNumber(regionUserNumber,equatio NULLIFY(region) NULLIFY(equationsSet) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_EquationsSetGet(region,equationsSetUserNumber,equationsSet,err,error,*999) CALL EquationsSet_SpecificationSizeGet(equationsSet,specificationSize,err,error,*999) @@ -28585,7 +28734,7 @@ SUBROUTINE cmfe_EquationsSet_TensorInterpolateGaussPointNumber(regionUserNumber, NULLIFY(equationsSet) NULLIFY(region) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_EquationsSetGet(region,equationsSetUserNumber,equationsSet,err,error,*999) CALL EquationsSet_TensorInterpolateGaussPoint(equationsSet,derivedTensorType,gaussPointNumber,userElementNumber,values, & & err,error,*999) @@ -28655,7 +28804,7 @@ SUBROUTINE cmfe_EquationsSet_TensorInterpolateXiNumber(regionUserNumber,equation NULLIFY(equationsSet) NULLIFY(region) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_EquationsSetGet(region,equationsSetUserNumber,equationsSet,err,error,*999) CALL EquationsSet_TensorInterpolateXi(equationsSet,derivedTensorType,userElementNumber,xi,values,err,error,*999) @@ -28718,7 +28867,7 @@ SUBROUTINE cmfe_EquationsSet_TimesGetNumber(regionUserNumber,equationsSetUserNum NULLIFY(equationsSet) NULLIFY(region) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_EquationsSetGet(region,equationsSetUserNumber,equationsSet,err,error,*999) CALL EquationsSet_TimesGet(equationsSet,currentTime,deltaTime,err,error,*999) @@ -28781,7 +28930,7 @@ SUBROUTINE cmfe_EquationsSet_TimesSetNumber(regionUserNumber,equationsSetUserNum NULLIFY(equationsSet) NULLIFY(region) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_EquationsSetGet(region,equationsSetUserNumber,equationsSet,err,error,*999) CALL EquationsSet_TimesSet(equationsSet,currentTime,deltaTime,err,error,*999) @@ -28848,7 +28997,7 @@ SUBROUTINE cmfe_Field_ComponentInterpolationGetNumber(regionUserNumber,fieldUser NULLIFY(region) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL Field_ComponentInterpolationGet(field,variableType,componentNumber,interpolationType,err,error,*999) @@ -28912,7 +29061,7 @@ SUBROUTINE cmfe_Field_ComponentInterpolationSetNumber(regionUserNumber,fieldUser NULLIFY(region) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL FIELD_COMPONENT_INTERPOLATION_SET(field,variableType,componentNumber,interpolationType,err,error,*999) @@ -28975,7 +29124,7 @@ SUBROUTINE cmfe_Field_ComponentLabelGetCNumber(regionUserNumber,fieldUserNumber, NULLIFY(region) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL FIELD_COMPONENT_LABEL_GET(field,variableType,componentNumber,label,err,error,*999) @@ -29038,7 +29187,7 @@ SUBROUTINE cmfe_Field_ComponentLabelGetVSNumber(regionUserNumber,fieldUserNumber NULLIFY(region) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL FIELD_COMPONENT_LABEL_GET(field,variableType,componentNumber,label,err,error,*999) @@ -29101,7 +29250,7 @@ SUBROUTINE cmfe_Field_ComponentLabelSetCNumber(regionUserNumber,fieldUserNumber, NULLIFY(region) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL FIELD_COMPONENT_LABEL_SET(field,variableType,componentNumber,label,err,error,*999) @@ -29164,7 +29313,7 @@ SUBROUTINE cmfe_Field_ComponentLabelSetVSNumber(regionUserNumber,fieldUserNumber NULLIFY(region) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL FIELD_COMPONENT_LABEL_SET(field,variableType,componentNumber,label,err,error,*999) @@ -29228,7 +29377,7 @@ SUBROUTINE cmfe_Field_ComponentMeshComponentGetNumber(regionUserNumber,fieldUser NULLIFY(region) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL FIELD_COMPONENT_MESH_COMPONENT_GET(field,variableType,componentNumber,meshComponent,err,error,*999) @@ -29292,7 +29441,7 @@ SUBROUTINE cmfe_Field_ComponentMeshComponentSetNumber(regionUserNumber,fieldUser NULLIFY(region) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL FIELD_COMPONENT_MESH_COMPONENT_SET(field,variableType,componentNumber,meshComponent,err,error,*999) @@ -29357,7 +29506,7 @@ SUBROUTINE cmfe_Field_ComponentValuesInitialiseIntgNumber(regionUserNumber,field NULLIFY(region) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL FIELD_COMPONENT_VALUES_INITIALISE(field,variableType,fieldSetType,componentNumber,VALUE,err,error,*999) @@ -29423,7 +29572,7 @@ SUBROUTINE cmfe_Field_ComponentValuesInitialiseSPNumber(regionUserNumber,fieldUs NULLIFY(region) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL FIELD_COMPONENT_VALUES_INITIALISE(field,variableType,fieldSetType,componentNumber,VALUE,err,error,*999) @@ -29489,7 +29638,7 @@ SUBROUTINE cmfe_Field_ComponentValuesInitialiseDPNumber(regionUserNumber,fieldUs NULLIFY(region) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL FIELD_COMPONENT_VALUES_INITIALISE(field,variableType,fieldSetType,componentNumber,VALUE,err,error,*999) @@ -29555,7 +29704,7 @@ SUBROUTINE cmfe_Field_ComponentValuesInitialiseLNumber(regionUserNumber,fieldUse NULLIFY(region) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL FIELD_COMPONENT_VALUES_INITIALISE(field,variableType,fieldSetType,componentNumber,VALUE,err,error,*999) @@ -29618,7 +29767,7 @@ SUBROUTINE cmfe_Field_DataTypeGetNumber(regionUserNumber,fieldUserNumber,variabl NULLIFY(region) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL FIELD_DATA_TYPE_GET(field,variableType,dataType,err,error,*999) @@ -29679,7 +29828,7 @@ SUBROUTINE cmfe_Field_DataTypeSetNumber(regionUserNumber,fieldUserNumber,variabl NULLIFY(region) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL FIELD_DATA_TYPE_SET(field,variableType,dataType,err,error,*999) @@ -29740,7 +29889,7 @@ SUBROUTINE cmfe_Field_DOFOrderTypeGetNumber(regionUserNumber,fieldUserNumber,var NULLIFY(region) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL FIELD_DOF_ORDER_TYPE_GET(field,variableType,DOFOrderType,err,error,*999) @@ -29801,7 +29950,7 @@ SUBROUTINE cmfe_Field_DOFOrderTypeSetNumber(regionUserNumber,fieldUserNumber,var NULLIFY(region) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL FIELD_DOF_ORDER_TYPE_SET(field,variableType,DOFOrderType,err,error,*999) @@ -29860,7 +30009,7 @@ SUBROUTINE cmfe_Field_CreateFinishNumber(regionUserNumber,fieldUserNumber,err) NULLIFY(region) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL FIELD_CREATE_FINISH(field,err,error,*999) @@ -29929,7 +30078,7 @@ SUBROUTINE cmfe_Field_CreateStartNumber(fieldUserNumber,regionUserNumber,err) NULLIFY(region) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL FIELD_CREATE_START(fieldUserNumber,region,field,err,error,*999) EXITS("cmfe_Field_CreateStartNumber") @@ -30019,7 +30168,7 @@ SUBROUTINE cmfe_Field_DependentTypeGetNumber(regionUserNumber,fieldUserNumber,de NULLIFY(region) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL FIELD_DEPENDENT_TYPE_GET(field,dependentType,err,error,*999) @@ -30078,7 +30227,7 @@ SUBROUTINE cmfe_Field_DependentTypeSetNumber(regionUserNumber,fieldUserNumber,de NULLIFY(region) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL FIELD_DEPENDENT_TYPE_SET(field,dependentType,err,error,*999) @@ -30136,7 +30285,7 @@ SUBROUTINE cmfe_Field_DestroyNumber(regionUserNumber,fieldUserNumber,err) NULLIFY(region) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL FIELD_DESTROY(field,err,error,*999) @@ -30195,7 +30344,7 @@ SUBROUTINE cmfe_Field_DimensionGetNumber(regionUserNumber,fieldUserNumber,variab NULLIFY(region) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL FIELD_DIMENSION_GET(field,variableType,DIMENSION,err,error,*999) @@ -30256,7 +30405,7 @@ SUBROUTINE cmfe_Field_DimensionSetNumber(regionUserNumber,fieldUserNumber,variab NULLIFY(region) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL FIELD_DIMENSION_SET(field,variableType,DIMENSION,err,error,*999) @@ -30317,7 +30466,7 @@ SUBROUTINE cmfe_Field_GeometricFieldGetNumber(regionUserNumber,fieldUserNumber,g NULLIFY(region) NULLIFY(field) NULLIFY(geometricField) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL FIELD_GEOMETRIC_FIELD_GET(field,geometricField,err,error,*999) geometricFieldUserNumber=geometricField%USER_NUMBER @@ -30378,7 +30527,7 @@ SUBROUTINE cmfe_Field_GeometricFieldSetNumber(regionUserNumber,fieldUserNumber,g NULLIFY(region) NULLIFY(field) NULLIFY(geometricField) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL Region_FieldGet(region,geometricFieldUserNumber,geometricField,err,error,*999) CALL FIELD_GEOMETRIC_FIELD_SET(field,geometricField,err,error,*999) @@ -30441,7 +30590,7 @@ SUBROUTINE cmfe_Field_GeometricParametersElementLineLengthGetNumber(regionUserNu NULLIFY(region) NULLIFY(geometricField) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,geometricFieldUserNumber,geometricField,err,error,*999) CALL Field_GeometricParametersElementLineLengthGet(geometricField,elementNumber,elementLineNumber,lineLength, & & err,error,*999) @@ -30591,7 +30740,7 @@ SUBROUTINE cmfe_Field_ParameterSetNodeScaleFactorGetNumber(regionUserNumber,fiel NULLIFY(region) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL Field_ParameterSetNodeScaleFactorGet(field,variableType,versionNumber, & & derivativeNumber,nodeUserNumber,componentNumber,scaleFactor,err,error,*999) @@ -30664,7 +30813,7 @@ SUBROUTINE cmfe_Field_ParameterSetNodeScaleFactorsGetNumber(regionUserNumber,fie NULLIFY(region) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL Field_ParameterSetNodeScaleFactorsGet(field,variableType,meshComponentNumber,scaleFactors,err,error,*999) @@ -30729,7 +30878,7 @@ SUBROUTINE cmfe_Field_ParameterSetNodeNumberOfScaleFactorDofsGetNumber(regionUse NULLIFY(region) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL Field_ParameterSetNodeNumberOfScaleFactorDofsGet(field,variableType,meshComponentNumber,numberOfScaleFactorsDofs, & & err,error,*999) @@ -30801,7 +30950,7 @@ SUBROUTINE cmfe_Field_ParameterSetNodeScaleFactorSetNumber(regionUserNumber,fiel NULLIFY(region) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL Field_ParameterSetNodeScaleFactorSet(field,variableType,versionNumber, & & derivativeNumber,nodeUserNumber,componentNumber,scaleFactor,err,error,*999) @@ -30873,7 +31022,7 @@ SUBROUTINE cmfe_Field_ParameterSetNodeScaleFactorsSetNumber(regionUserNumber,fie NULLIFY(region) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL Field_ParameterSetNodeScaleFactorsSet(field,variableType,meshComponentNumber,scaleFactors,err,error,*999) @@ -30936,7 +31085,7 @@ SUBROUTINE cmfe_Field_LabelGetCNumber(regionUserNumber,fieldUserNumber,label,err NULLIFY(region) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL FIELD_LABEL_GET(field,label,err,error,*999) @@ -30995,7 +31144,7 @@ SUBROUTINE cmfe_Field_LabelGetVSNumber(regionUserNumber,fieldUserNumber,label,er NULLIFY(region) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL FIELD_LABEL_GET(field,label,err,error,*999) @@ -31054,7 +31203,7 @@ SUBROUTINE cmfe_Field_LabelSetCNumber(regionUserNumber,fieldUserNumber,label,err NULLIFY(region) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL FIELD_LABEL_SET(field,label,err,error,*999) @@ -31113,7 +31262,7 @@ SUBROUTINE cmfe_Field_LabelSetVSNumber(regionUserNumber,fieldUserNumber,label,er NULLIFY(region) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL FIELD_LABEL_SET(field,label,err,error,*999) @@ -31176,7 +31325,7 @@ SUBROUTINE cmfe_Field_PositionNormalTangentCalculateNodeNumber(regionUserNumber, NULLIFY(region) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL Field_PositionNormalTangentsCalculateNode(field,variableType,componentNumber,localNodeNumber, & & position,normal,tangents,err,error,*999) @@ -31247,7 +31396,7 @@ SUBROUTINE cmfe_Field_MeshDecompositionGetNumber(regionUserNumber,fieldUserNumbe NULLIFY(region) NULLIFY(field) NULLIFY(decomposition) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL Field_DecompositionGet(field,decomposition,err,error,*999) decompositionUserNumber=decomposition%USER_NUMBER @@ -31312,7 +31461,7 @@ SUBROUTINE cmfe_Field_MeshDecompositionSetNumber(regionUserNumber,fieldUserNumbe NULLIFY(field) NULLIFY(decomposition) NULLIFY(mesh) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL Region_MeshGet(region,meshUserNumber,mesh,err,error,*999) CALL Mesh_DecompositionGet(mesh,decompositionUserNumber,decomposition,err,error,*999) @@ -31378,7 +31527,7 @@ SUBROUTINE cmfe_Field_DataProjectionSetNumber(regionUserNumber,fieldUserNumber,d NULLIFY(field) NULLIFY(dataPoints) NULLIFY(dataProjection) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL Region_DataPointsGet(region,dataPointsUserNumber,dataPoints,err,error,*999) CALL DataPoints_DataProjectionGet(dataPoints,dataProjectionUserNumber,dataProjection,err,error,*999) @@ -31440,7 +31589,7 @@ SUBROUTINE cmfe_Field_NumberOfComponentsGetNumber(regionUserNumber,fieldUserNumb NULLIFY(region) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL FIELD_NUMBER_OF_COMPONENTS_GET(field,variableType,numberOfComponents,err,error,*999) @@ -31501,7 +31650,7 @@ SUBROUTINE cmfe_Field_NumberOfComponentsSetNumber(regionUserNumber,fieldUserNumb NULLIFY(region) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL FIELD_NUMBER_OF_COMPONENTS_SET(field,variableType,numberOfComponents,err,error,*999) @@ -31561,7 +31710,7 @@ SUBROUTINE cmfe_Field_NumberOfVariablesGetNumber(regionUserNumber,fieldUserNumbe NULLIFY(region) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL FIELD_NUMBER_OF_VARIABLES_GET(field,numberOfVariables,err,error,*999) @@ -31620,7 +31769,7 @@ SUBROUTINE cmfe_Field_NumberOfVariablesSetNumber(regionUserNumber,fieldUserNumbe NULLIFY(region) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL FIELD_NUMBER_OF_VARIABLES_SET(field,numberOfVariables,err,error,*999) @@ -31683,7 +31832,7 @@ SUBROUTINE cmfe_Field_ParameterSetAddConstantIntgNumber(regionUserNumber,fieldUs NULLIFY(region) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL FIELD_PARAMETER_SET_ADD_CONSTANT(field,variableType,fieldSetType,componentNumber,VALUE,err,error,*999) @@ -31750,7 +31899,7 @@ SUBROUTINE cmfe_Field_ParameterSetAddConstantSPNumber(regionUserNumber,fieldUser NULLIFY(region) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL FIELD_PARAMETER_SET_ADD_CONSTANT(field,variableType,fieldSetType,componentNumber,VALUE,err,error,*999) @@ -31816,7 +31965,7 @@ SUBROUTINE cmfe_Field_ParameterSetAddConstantDPNumber(regionUserNumber,fieldUser NULLIFY(region) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL FIELD_PARAMETER_SET_ADD_CONSTANT(field,variableType,fieldSetType,componentNumber,VALUE,err,error,*999) @@ -31882,7 +32031,7 @@ SUBROUTINE cmfe_Field_ParameterSetAddConstantLNumber(regionUserNumber,fieldUserN NULLIFY(region) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL FIELD_PARAMETER_SET_ADD_CONSTANT(field,variableType,fieldSetType,componentNumber,VALUE,err,error,*999) @@ -31949,7 +32098,7 @@ SUBROUTINE cmfe_Field_ParameterSetAddElementIntgNumber(regionUserNumber,fieldUse NULLIFY(region) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL FIELD_PARAMETER_SET_ADD_ELEMENT(field,variableType,fieldSetType,userElementNumber,componentNumber,VALUE,err,error,*999) @@ -32018,7 +32167,7 @@ SUBROUTINE cmfe_Field_ParameterSetAddElementSPNumber(regionUserNumber,fieldUserN NULLIFY(region) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL FIELD_PARAMETER_SET_ADD_ELEMENT(field,variableType,fieldSetType,userElementNumber,componentNumber,VALUE,err,error,*999) @@ -32087,7 +32236,7 @@ SUBROUTINE cmfe_Field_ParameterSetAddElementDPNumber(regionUserNumber,fieldUserN NULLIFY(region) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL FIELD_PARAMETER_SET_ADD_ELEMENT(field,variableType,fieldSetType,userElementNumber,componentNumber,VALUE,err,error,*999) @@ -32156,7 +32305,7 @@ SUBROUTINE cmfe_Field_ParameterSetAddElementLNumber(regionUserNumber,fieldUserNu NULLIFY(region) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL FIELD_PARAMETER_SET_ADD_ELEMENT(field,variableType,fieldSetType,userElementNumber,componentNumber,VALUE,err,error,*999) @@ -32226,7 +32375,7 @@ SUBROUTINE cmfe_Field_ParameterSetAddGaussPointIntgNumber(regionUserNumber,field NULLIFY(region) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL Field_ParameterSetAddGaussPoint(field,variableType,fieldSetType,gaussPointNumber,userElementNumber,componentNumber, & & VALUE,err,error,*999) @@ -32301,7 +32450,7 @@ SUBROUTINE cmfe_Field_ParameterSetAddGaussPointSPNumber(regionUserNumber,fieldUs NULLIFY(region) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL Field_ParameterSetAddGaussPoint(field,variableType,fieldSetType,gaussPointNumber,userElementNumber,componentNumber, & & VALUE,err,error,*999) @@ -32376,7 +32525,7 @@ SUBROUTINE cmfe_Field_ParameterSetAddGaussPointDPNumber(regionUserNumber,fieldUs NULLIFY(region) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL Field_ParameterSetAddGaussPoint(field,variableType,fieldSetType,gaussPointNumber,userElementNumber,componentNumber, & & VALUE,err,error,*999) @@ -32451,7 +32600,7 @@ SUBROUTINE cmfe_Field_ParameterSetAddGaussPointLNumber(regionUserNumber,fieldUse NULLIFY(region) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL Field_ParameterSetAddGaussPoint(field,variableType,fieldSetType,gaussPointNumber,userElementNumber, & & componentNumber,VALUE,err,error,*999) @@ -32527,7 +32676,7 @@ SUBROUTINE cmfe_Field_ParameterSetAddNodeIntgNumber(regionUserNumber,fieldUserNu NULLIFY(region) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL FIELD_PARAMETER_SET_ADD_NODE(field,variableType,fieldSetType,versionNumber,derivativeNumber,userNodeNumber, & & componentNumber,VALUE,err,error,*999) @@ -32602,7 +32751,7 @@ SUBROUTINE cmfe_Field_ParameterSetAddNodeSPNumber(regionUserNumber,fieldUserNumb NULLIFY(region) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL FIELD_PARAMETER_SET_ADD_NODE(field,variableType,fieldSetType,versionNumber,derivativeNumber,userNodeNumber, & & componentNumber,VALUE,err,error,*999) @@ -32677,7 +32826,7 @@ SUBROUTINE cmfe_Field_ParameterSetAddNodeDPNumber(regionUserNumber,fieldUserNumb NULLIFY(region) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL FIELD_PARAMETER_SET_ADD_NODE(field,variableType,fieldSetType,versionNumber,derivativeNumber,userNodeNumber, & & componentNumber,VALUE,err,error,*999) @@ -32752,7 +32901,7 @@ SUBROUTINE cmfe_Field_ParameterSetAddNodeLNumber(regionUserNumber,fieldUserNumbe NULLIFY(region) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL FIELD_PARAMETER_SET_ADD_NODE(field,variableType,fieldSetType,versionNumber,derivativeNumber,userNodeNumber, & & componentNumber,VALUE,err,error,*999) @@ -32821,7 +32970,7 @@ SUBROUTINE cmfe_Field_ParameterSetCreateNumber(regionUserNumber,fieldUserNumber, NULLIFY(region) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL FIELD_PARAMETER_SET_CREATE(field,variableType,fieldSetType,err,error,*999) @@ -32882,7 +33031,7 @@ SUBROUTINE cmfe_Field_ParameterSetDestroyNumber(regionUserNumber,fieldUserNumber NULLIFY(region) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL FIELD_PARAMETER_SET_DESTROY(field,variableType,fieldSetType,err,error,*999) @@ -32944,7 +33093,7 @@ SUBROUTINE cmfe_Field_ParameterSetDataGetIntgNumber(regionUserNumber,fieldUserNu NULLIFY(region) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL FIELD_PARAMETER_SET_DATA_GET(field,variableType,fieldSetType,parameters,err,error,*999) @@ -33007,7 +33156,7 @@ SUBROUTINE cmfe_Field_ParameterSetDataGetSPNumber(regionUserNumber,fieldUserNumb NULLIFY(region) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL FIELD_PARAMETER_SET_DATA_GET(field,variableType,fieldSetType,parameters,err,error,*999) @@ -33070,7 +33219,7 @@ SUBROUTINE cmfe_Field_ParameterSetDataGetDPNumber(regionUserNumber,fieldUserNumb NULLIFY(region) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL FIELD_PARAMETER_SET_DATA_GET(field,variableType,fieldSetType,parameters,err,error,*999) @@ -33133,7 +33282,7 @@ SUBROUTINE cmfe_Field_ParameterSetDataGetLNumber(regionUserNumber,fieldUserNumbe NULLIFY(region) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL FIELD_PARAMETER_SET_DATA_GET(field,variableType,fieldSetType,parameters,err,error,*999) @@ -33196,7 +33345,7 @@ SUBROUTINE cmfe_Field_ParameterSetDataRestoreIntgNumber(regionUserNumber,fieldUs NULLIFY(region) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL FIELD_PARAMETER_SET_DATA_RESTORE(field,variableType,fieldSetType,parameters,err,error,*999) @@ -33260,7 +33409,7 @@ SUBROUTINE cmfe_Field_ParameterSetDataRestoreSPNumber(regionUserNumber,fieldUser NULLIFY(region) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL FIELD_PARAMETER_SET_DATA_RESTORE(field,variableType,fieldSetType,parameters,err,error,*999) @@ -33323,7 +33472,7 @@ SUBROUTINE cmfe_Field_ParameterSetDataRestoreDPNumber(regionUserNumber,fieldUser NULLIFY(region) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL FIELD_PARAMETER_SET_DATA_RESTORE(field,variableType,fieldSetType,parameters,err,error,*999) @@ -33386,7 +33535,7 @@ SUBROUTINE cmfe_Field_ParameterSetDataRestoreLNumber(regionUserNumber,fieldUserN NULLIFY(region) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL FIELD_PARAMETER_SET_DATA_RESTORE(field,variableType,fieldSetType,parameters,err,error,*999) @@ -33451,7 +33600,7 @@ SUBROUTINE cmfe_Field_ParameterSetGetConstantIntgNumber(regionUserNumber,fieldUs NULLIFY(region) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL FIELD_PARAMETER_SET_GET_CONSTANT(field,variableType,fieldSetType,componentNumber,VALUE,err,error,*999) @@ -33518,7 +33667,7 @@ SUBROUTINE cmfe_Field_ParameterSetGetConstantSPNumber(regionUserNumber,fieldUser NULLIFY(region) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL FIELD_PARAMETER_SET_GET_CONSTANT(field,variableType,fieldSetType,componentNumber,VALUE,err,error,*999) @@ -33584,7 +33733,7 @@ SUBROUTINE cmfe_Field_ParameterSetGetConstantDPNumber(regionUserNumber,fieldUser NULLIFY(region) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL FIELD_PARAMETER_SET_GET_CONSTANT(field,variableType,fieldSetType,componentNumber,VALUE,err,error,*999) @@ -33650,7 +33799,7 @@ SUBROUTINE cmfe_Field_ParameterSetGetConstantLNumber(regionUserNumber,fieldUserN NULLIFY(region) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL FIELD_PARAMETER_SET_GET_CONSTANT(field,variableType,fieldSetType,componentNumber,VALUE,err,error,*999) @@ -33720,7 +33869,7 @@ SUBROUTINE cmfe_Field_ParameterSetGetDataPointIntgNumberI(parentRegionUserNumber NULLIFY(region) NULLIFY(field) NULLIFY(interface) - CALL Region_Get(parentRegionUserNumber,region,err,error,*999) + CALL Region_Get(regions,parentRegionUserNumber,region,err,error,*999) CALL Region_InterfaceGet(region,interfaceUserNumber,INTERFACE,err,error,*999) CALL Interface_FieldGet(INTERFACE,fieldUserNumber,field,err,error,*999) CALL Field_ParameterSetGetDataPoint(field,variableType,fieldSetType,userDataPointNumber,componentNumber,VALUE, & @@ -33761,7 +33910,7 @@ SUBROUTINE cmfe_Field_ParameterSetGetDataPointIntgNumberR(regionUserNumber,field NULLIFY(region) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL Field_ParameterSetGetDataPoint(field,variableType,fieldSetType,userDataPointNumber,componentNumber,VALUE, & & err,error,*999) @@ -33836,7 +33985,7 @@ SUBROUTINE cmfe_Field_ParameterSetGetDataPointSPNumberI(parentRegionUserNumber,i NULLIFY(region) NULLIFY(field) NULLIFY(interface) - CALL Region_Get(parentRegionUserNumber,region,err,error,*999) + CALL Region_Get(regions,parentRegionUserNumber,region,err,error,*999) CALL Region_InterfaceGet(region,interfaceUserNumber,INTERFACE,err,error,*999) CALL Interface_FieldGet(INTERFACE,fieldUserNumber,field,err,error,*999) CALL Field_ParameterSetGetDataPoint(field,variableType,fieldSetType,userDataPointNumber,componentNumber,VALUE, & @@ -33877,7 +34026,7 @@ SUBROUTINE cmfe_Field_ParameterSetGetDataPointSPNumberR(regionUserNumber,fieldUs NULLIFY(region) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL Field_ParameterSetGetDataPoint(field,variableType,fieldSetType,userDataPointNumber,componentNumber,VALUE, & & err,error,*999) @@ -33951,7 +34100,7 @@ SUBROUTINE cmfe_Field_ParameterSetGetDataPointDPNumberI(parentRegionUserNumber,i NULLIFY(region) NULLIFY(field) NULLIFY(interface) - CALL Region_Get(parentRegionUserNumber,region,err,error,*999) + CALL Region_Get(regions,parentRegionUserNumber,region,err,error,*999) CALL Region_InterfaceGet(region,interfaceUserNumber,INTERFACE,err,error,*999) CALL Interface_FieldGet(INTERFACE,fieldUserNumber,field,err,error,*999) CALL Field_ParameterSetGetDataPoint(field,variableType,fieldSetType,userDataPointNumber,componentNumber,VALUE, & @@ -33992,7 +34141,7 @@ SUBROUTINE cmfe_Field_ParameterSetGetDataPointDPNumberR(regionUserNumber,fieldUs NULLIFY(region) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL Field_ParameterSetGetDataPoint(field,variableType,fieldSetType,userDataPointNumber,componentNumber,VALUE, & & err,error,*999) @@ -34066,7 +34215,7 @@ SUBROUTINE cmfe_Field_ParameterSetGetDataPointLNumberI(parentRegionUserNumber,in NULLIFY(region) NULLIFY(field) NULLIFY(interface) - CALL Region_Get(parentRegionUserNumber,region,err,error,*999) + CALL Region_Get(regions,parentRegionUserNumber,region,err,error,*999) CALL Region_InterfaceGet(region,interfaceUserNumber,INTERFACE,err,error,*999) CALL Interface_FieldGet(INTERFACE,fieldUserNumber,field,err,error,*999) CALL Field_ParameterSetGetDataPoint(field,variableType,fieldSetType,userDataPointNumber,componentNumber,VALUE, & @@ -34106,7 +34255,7 @@ SUBROUTINE cmfe_Field_ParameterSetGetDataPointLNumberR(regionUserNumber,fieldUse NULLIFY(region) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL Field_ParameterSetGetDataPoint(field,variableType,fieldSetType,userDataPointNumber,componentNumber,VALUE, & & err,error,*999) @@ -34176,7 +34325,7 @@ SUBROUTINE cmfe_Field_ParameterSetGetElementIntgNumber(regionUserNumber,fieldUse NULLIFY(region) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL FIELD_PARAMETER_SET_GET_ELEMENT(field,variableType,fieldSetType,userElementNumber,componentNumber,VALUE,err,error,*999) @@ -34245,7 +34394,7 @@ SUBROUTINE cmfe_Field_ParameterSetGetElementSPNumber(regionUserNumber,fieldUserN NULLIFY(region) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL FIELD_PARAMETER_SET_GET_ELEMENT(field,variableType,fieldSetType,userElementNumber,componentNumber,VALUE,err,error,*999) @@ -34314,7 +34463,7 @@ SUBROUTINE cmfe_Field_ParameterSetGetElementDPNumber(regionUserNumber,fieldUserN NULLIFY(region) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL FIELD_PARAMETER_SET_GET_ELEMENT(field,variableType,fieldSetType,userElementNumber,componentNumber,VALUE,err,error,*999) @@ -34383,7 +34532,7 @@ SUBROUTINE cmfe_Field_ParameterSetGetElementLNumber(regionUserNumber,fieldUserNu NULLIFY(region) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL FIELD_PARAMETER_SET_GET_ELEMENT(field,variableType,fieldSetType,userElementNumber,componentNumber,VALUE,err,error,*999) @@ -34454,7 +34603,7 @@ SUBROUTINE cmfe_Field_ParameterSetGetNodeIntgNumber(regionUserNumber,fieldUserNu NULLIFY(region) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL FIELD_PARAMETER_SET_GET_NODE(field,variableType,fieldSetType,versionNumber,derivativeNumber,userNodeNumber, & & componentNumber,VALUE,err,error,*999) @@ -34529,7 +34678,7 @@ SUBROUTINE cmfe_Field_ParameterSetGetNodeSPNumber(regionUserNumber,fieldUserNumb NULLIFY(region) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL FIELD_PARAMETER_SET_GET_NODE(field,variableType,fieldSetType,versionNumber,derivativeNumber,userNodeNumber, & & componentNumber,VALUE,err,error,*999) @@ -34604,7 +34753,7 @@ SUBROUTINE cmfe_Field_ParameterSetGetNodeDPNumber(regionUserNumber,fieldUserNumb NULLIFY(region) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL FIELD_PARAMETER_SET_GET_NODE(field,variableType,fieldSetType,versionNumber,derivativeNumber,userNodeNumber, & & componentNumber,VALUE,err,error,*999) @@ -34679,7 +34828,7 @@ SUBROUTINE cmfe_Field_ParameterSetGetNodeLNumber(regionUserNumber,fieldUserNumbe NULLIFY(region) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL FIELD_PARAMETER_SET_GET_NODE(field,variableType,fieldSetType,versionNumber,derivativeNumber,userNodeNumber, & & componentNumber, VALUE,err,error,*999) @@ -34784,7 +34933,7 @@ SUBROUTINE cmfe_Field_ParameterSetUpdateConstantIntgNumber(regionUserNumber,fiel NULLIFY(region) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL FIELD_PARAMETER_SET_UPDATE_CONSTANT(field,variableType,fieldSetType,componentNumber,VALUE,err,error,*999) @@ -34852,7 +35001,7 @@ SUBROUTINE cmfe_Field_ParameterSetUpdateConstantSPNumber(regionUserNumber,fieldU NULLIFY(region) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL FIELD_PARAMETER_SET_UPDATE_CONSTANT(field,variableType,fieldSetType,componentNumber,VALUE,err,error,*999) @@ -34919,7 +35068,7 @@ SUBROUTINE cmfe_Field_ParameterSetUpdateConstantDPNumber(regionUserNumber,fieldU NULLIFY(region) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL FIELD_PARAMETER_SET_UPDATE_CONSTANT(field,variableType,fieldSetType,componentNumber,VALUE,err,error,*999) @@ -34986,7 +35135,7 @@ SUBROUTINE cmfe_Field_ParameterSetUpdateConstantLNumber(regionUserNumber,fieldUs NULLIFY(region) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL FIELD_PARAMETER_SET_UPDATE_CONSTANT(field,variableType,fieldSetType,componentNumber,VALUE,err,error,*999) @@ -35057,7 +35206,7 @@ SUBROUTINE cmfe_Field_ParameterSetUpdateDataPointIntgNumberI(parentRegionUserNum NULLIFY(region) NULLIFY(field) NULLIFY(interface) - CALL Region_Get(parentRegionUserNumber,region,err,error,*999) + CALL Region_Get(regions,parentRegionUserNumber,region,err,error,*999) CALL Region_InterfaceGet(region,interfaceUserNumber,INTERFACE,err,error,*999) CALL Interface_FieldGet(INTERFACE,fieldUserNumber,field,err,error,*999) CALL Field_ParameterSetUpdateDataPoint(field,variableType,fieldSetType,userDataPointNumber,componentNumber,VALUE, & @@ -35098,7 +35247,7 @@ SUBROUTINE cmfe_Field_ParameterSetUpdateDataPointIntgNumberR(regionUserNumber,fi NULLIFY(region) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL Field_ParameterSetUpdateDataPoint(field,variableType,fieldSetType,userDataPointNumber,componentNumber,VALUE, & & err,error,*999) @@ -35174,7 +35323,7 @@ SUBROUTINE cmfe_Field_ParameterSetUpdateDataPointSPNumberI(parentRegionUserNumbe NULLIFY(region) NULLIFY(field) NULLIFY(interface) - CALL Region_Get(parentRegionUserNumber,region,err,error,*999) + CALL Region_Get(regions,parentRegionUserNumber,region,err,error,*999) CALL Region_InterfaceGet(region,interfaceUserNumber,INTERFACE,err,error,*999) CALL Interface_FieldGet(INTERFACE,fieldUserNumber,field,err,error,*999) CALL Field_ParameterSetUpdateDataPoint(field,variableType,fieldSetType,userDataPointNumber,componentNumber,VALUE, & @@ -35215,7 +35364,7 @@ SUBROUTINE cmfe_Field_ParameterSetUpdateDataPointSPNumberR(regionUserNumber,fiel NULLIFY(region) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL Field_ParameterSetUpdateDataPoint(field,variableType,fieldSetType,userDataPointNumber,componentNumber,VALUE, & & err,error,*999) @@ -35290,7 +35439,7 @@ SUBROUTINE cmfe_Field_ParameterSetUpdateDataPointDPNumberI(parentRegionUserNumbe NULLIFY(region) NULLIFY(field) NULLIFY(interface) - CALL Region_Get(parentRegionUserNumber,region,err,error,*999) + CALL Region_Get(regions,parentRegionUserNumber,region,err,error,*999) CALL Region_InterfaceGet(region,interfaceUserNumber,INTERFACE,err,error,*999) CALL Interface_FieldGet(INTERFACE,fieldUserNumber,field,err,error,*999) CALL Field_ParameterSetUpdateDataPoint(field,variableType,fieldSetType,userDataPointNumber,componentNumber,VALUE, & @@ -35331,7 +35480,7 @@ SUBROUTINE cmfe_Field_ParameterSetUpdateDataPointDPNumberR(regionUserNumber,fiel NULLIFY(region) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL Field_ParameterSetUpdateDataPoint(field,variableType,fieldSetType,userDataPointNumber,componentNumber,VALUE, & & err,error,*999) @@ -35406,7 +35555,7 @@ SUBROUTINE cmfe_Field_ParameterSetUpdateDataPointLNumberI(parentRegionUserNumber NULLIFY(region) NULLIFY(field) NULLIFY(interface) - CALL Region_Get(parentRegionUserNumber,region,err,error,*999) + CALL Region_Get(regions,parentRegionUserNumber,region,err,error,*999) CALL Region_InterfaceGet(region,interfaceUserNumber,INTERFACE,err,error,*999) CALL Interface_FieldGet(INTERFACE,fieldUserNumber,field,err,error,*999) CALL Field_ParameterSetUpdateDataPoint(field,variableType,fieldSetType,userDataPointNumber,componentNumber,VALUE, & @@ -35447,7 +35596,7 @@ SUBROUTINE cmfe_Field_ParameterSetUpdateDataPointLNumberR(regionUserNumber,field NULLIFY(region) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL Field_ParameterSetUpdateDataPoint(field,variableType,fieldSetType,userDataPointNumber,componentNumber,VALUE, & & err,error,*999) @@ -35519,7 +35668,7 @@ SUBROUTINE cmfe_Field_ParameterSetUpdateElementIntgNumber(regionUserNumber,field NULLIFY(region) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL FIELD_PARAMETER_SET_UPDATE_ELEMENT(field,variableType,fieldSetType,userElementNumber,componentNumber,VALUE, & & err,error,*999) @@ -35591,7 +35740,7 @@ SUBROUTINE cmfe_Field_ParameterSetUpdateElementSPNumber(regionUserNumber,fieldUs NULLIFY(region) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL FIELD_PARAMETER_SET_UPDATE_ELEMENT(field,variableType,fieldSetType,userElementNumber,componentNumber,VALUE, & & err,error,*999) @@ -35663,7 +35812,7 @@ SUBROUTINE cmfe_Field_ParameterSetUpdateElementDPNumber(regionUserNumber,fieldUs NULLIFY(region) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL FIELD_PARAMETER_SET_UPDATE_ELEMENT(field,variableType,fieldSetType,userElementNumber,componentNumber,VALUE, & & err,error,*999) @@ -35735,7 +35884,7 @@ SUBROUTINE cmfe_Field_ParameterSetUpdateElementLNumber(regionUserNumber,fieldUse NULLIFY(region) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL FIELD_PARAMETER_SET_UPDATE_ELEMENT(field,variableType,fieldSetType,userElementNumber,componentNumber,VALUE, & & err,error,*999) @@ -35836,7 +35985,7 @@ SUBROUTINE cmfe_Field_ParameterSetUpdateFinishNumber(regionUserNumber,fieldUserN NULLIFY(region) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL FIELD_PARAMETER_SET_UPDATE_FINISH(field,variableType,fieldSetType,err,error,*999) @@ -35903,7 +36052,7 @@ SUBROUTINE cmfe_Field_ParameterSetUpdateNodeIntgNumber(regionUserNumber,fieldUse NULLIFY(region) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL FIELD_PARAMETER_SET_UPDATE_NODE(field,variableType,fieldSetType,versionNumber,derivativeNumber,userNodeNumber, & & componentNumber,VALUE,err,error,*999) @@ -35979,7 +36128,7 @@ SUBROUTINE cmfe_Field_ParameterSetUpdateNodeSPNumber(regionUserNumber,fieldUserN NULLIFY(region) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL FIELD_PARAMETER_SET_UPDATE_NODE(field,variableType,fieldSetType,versionNumber,derivativeNumber,userNodeNumber, & & componentNumber, VALUE,err,error,*999) @@ -36055,7 +36204,7 @@ SUBROUTINE cmfe_Field_ParameterSetUpdateNodeDPNumber(regionUserNumber,fieldUserN NULLIFY(region) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL FIELD_PARAMETER_SET_UPDATE_NODE(field,variableType,fieldSetType,versionNumber,derivativeNumber, & & userNodeNumber,componentNumber,VALUE,err,error,*999) @@ -36131,7 +36280,7 @@ SUBROUTINE cmfe_Field_ParameterSetUpdateNodeLNumber(regionUserNumber,fieldUserNu NULLIFY(region) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL FIELD_PARAMETER_SET_UPDATE_NODE(field,variableType,fieldSetType,versionNumber,derivativeNumber, & & userNodeNumber,componentNumber,VALUE,err,error,*999) @@ -36234,7 +36383,7 @@ SUBROUTINE cmfe_Field_ParameterSetUpdateGaussPointIntgNumber(regionUserNumber,fi NULLIFY(region) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL Field_ParameterSetUpdateGaussPoint(field,variableType,fieldSetType,gaussPointNumber,userElementNumber, & & componentNumber,VALUE,err,error,*999) @@ -36311,7 +36460,7 @@ SUBROUTINE cmfe_Field_ParameterSetUpdateGaussPointSPNumber(regionUserNumber,fiel NULLIFY(region) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL Field_ParameterSetUpdateGaussPoint(field,variableType,fieldSetType,gaussPointNumber,userElementNumber, & & componentNumber,VALUE,err,error,*999) @@ -36388,7 +36537,7 @@ SUBROUTINE cmfe_Field_ParameterSetUpdateGaussPointDPNumber(regionUserNumber,fiel NULLIFY(region) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL Field_ParameterSetUpdateGaussPoint(field,variableType,fieldSetType,gaussPointNumber,userElementNumber, & & componentNumber,VALUE,err,error,*999) @@ -36465,7 +36614,7 @@ SUBROUTINE cmfe_Field_ParameterSetUpdateGaussPointLNumber(regionUserNumber,field NULLIFY(region) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL Field_ParameterSetUpdateGaussPoint(field,variableType,fieldSetType,gaussPointNumber,userElementNumber, & & componentNumber,VALUE,err,error,*999) @@ -36541,7 +36690,7 @@ SUBROUTINE cmfe_Field_ParameterSetInterpolateSingleXiDPNumber(regionUserNumber,f NULLIFY(region) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL FIELD_PARAMETER_SET_INTERPOLATE_SINGLE_XI(field,variableType,fieldSetType,derivativeNumber,userElementNumber, & & xi,values,err,error,*999) @@ -36616,7 +36765,7 @@ SUBROUTINE cmfe_Field_ParameterSetInterpolateMultipleXiDPNumber(regionUserNumber NULLIFY(region) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL FIELD_PARAMETER_SET_INTERPOLATE_MULTIPLE_XI(field,variableType,fieldSetType,derivativeNumber,userElementNumber, & & xi,values,err,error,*999) @@ -36692,7 +36841,7 @@ SUBROUTINE cmfe_Field_ParameterSetInterpolateSingleGaussDPNumber(regionUserNumbe NULLIFY(region) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL FIELD_PARAMETER_SET_INTERPOLATE_SINGLE_GAUSS(field,variableType,fieldSetType,derivativeNumber,userElementNumber, & & quadratureScheme,GaussPoint,values,err,error,*999) @@ -36769,7 +36918,7 @@ SUBROUTINE cmfe_Field_ParameterSetInterpolateMultipleGaussDPNumber(regionUserNum NULLIFY(region) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL FIELD_PARAMETER_SET_INTERPOLATE_MULTIPLE_GAUSS(field,variableType,fieldSetType,derivativeNumber,userElementNumber, & & quadratureScheme,GaussPoints,values,err,error,*999) @@ -36840,7 +36989,7 @@ SUBROUTINE cmfe_Field_ParameterSetUpdateStartNumber(regionUserNumber,fieldUserNu NULLIFY(region) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL FIELD_PARAMETER_SET_UPDATE_START(field,variableType,fieldSetType,err,error,*999) @@ -36914,9 +37063,9 @@ SUBROUTINE cmfe_Field_ParametersToFieldParametersComponentCopyNumber(fromRegionU NULLIFY(fromField) NULLIFY(toRegion) NULLIFY(toField) - CALL Region_Get(fromRegionUserNumber,fromRegion,err,error,*999) + CALL Region_Get(regions,fromRegionUserNumber,fromRegion,err,error,*999) CALL Region_FieldGet(fromRegion,fromFieldUserNumber,fromField,err,error,*999) - CALL Region_Get(toRegionUserNumber,toRegion,err,error,*999) + CALL Region_Get(regions,toRegionUserNumber,toRegion,err,error,*999) CALL Region_FieldGet(toRegion,toFieldUserNumber,toField,err,error,*999) CALL Field_ParametersToFieldParametersCopy(fromField,fromVariableType,fromParameterSetType, & & fromComponentNumber,toField,toVariableType,toParameterSetType,toComponentNumber,err,error,*999) @@ -36987,7 +37136,7 @@ SUBROUTINE cmfe_Field_ScalingTypeGetNumber(regionUserNumber,fieldUserNumber,scal NULLIFY(region) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL FIELD_SCALING_TYPE_GET(field,scalingType,err,error,*999) @@ -37046,7 +37195,7 @@ SUBROUTINE cmfe_Field_ScalingTypeSetNumber(regionUserNumber,fieldUserNumber,scal NULLIFY(region) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL FIELD_SCALING_TYPE_SET(field,scalingType,err,error,*999) @@ -37105,7 +37254,7 @@ SUBROUTINE cmfe_Field_TypeGetNumber(regionUserNumber,fieldUserNumber,fieldType,e NULLIFY(region) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL FIELD_TYPE_GET(field,fieldType,err,error,*999) @@ -37164,7 +37313,7 @@ SUBROUTINE cmfe_Field_TypeSetNumber(regionUserNumber,fieldUserNumber,fieldType,e NULLIFY(region) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL FIELD_TYPE_SET(field,fieldType,err,error,*999) @@ -37224,7 +37373,7 @@ SUBROUTINE cmfe_Field_VariableLabelGetCNumber(regionUserNumber,fieldUserNumber,v NULLIFY(region) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL FIELD_VARIABLE_LABEL_GET(field,variableType,label,err,error,*999) @@ -37285,7 +37434,7 @@ SUBROUTINE cmfe_Field_VariableLabelGetVSNumber(regionUserNumber,fieldUserNumber, NULLIFY(region) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL FIELD_VARIABLE_LABEL_GET(field,variableType,label,err,error,*999) @@ -37346,7 +37495,7 @@ SUBROUTINE cmfe_Field_VariableLabelSetCNumber(regionUserNumber,fieldUserNumber,v NULLIFY(region) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL FIELD_VARIABLE_LABEL_SET(field,variableType,label,err,error,*999) @@ -37407,7 +37556,7 @@ SUBROUTINE cmfe_Field_VariableLabelSetVSNumber(regionUserNumber,fieldUserNumber, NULLIFY(region) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL FIELD_VARIABLE_LABEL_SET(field,variableType,label,err,error,*999) @@ -37467,7 +37616,7 @@ SUBROUTINE cmfe_Field_VariableTypesGetNumber(regionUserNumber,fieldUserNumber,va NULLIFY(region) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL FIELD_VARIABLE_TYPES_GET(field,variableTypes,err,error,*999) @@ -37526,7 +37675,7 @@ SUBROUTINE cmfe_Field_VariableTypesSetNumber(regionUserNumber,fieldUserNumber,va NULLIFY(region) NULLIFY(field) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL FIELD_VARIABLE_TYPES_SET(field,variableTypes,err,error,*999) @@ -37849,7 +37998,7 @@ SUBROUTINE cmfe_GeneratedMesh_BasisGetNumber(regionUserNumber,generatedMeshUserN NULLIFY(region) NULLIFY(generatedMesh) NULLIFY(bases) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_GeneratedMeshGet(region,generatedMeshUserNumber,generatedMesh,err,error,*999) CALL GeneratedMesh_BasisGet(generatedMesh,bases,err,error,*999) numberOfBases=SIZE(bases) @@ -37950,9 +38099,9 @@ SUBROUTINE cmfe_GeneratedMesh_BasisSetNumber0(regionUserNumber,generatedMeshUser NULLIFY(generatedMesh) NULLIFY(basis) NULLIFY(bases) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_GeneratedMeshGet(region,generatedMeshUserNumber,generatedMesh,err,error,*999) - CALL Basis_Get(basisUserNumber,basis,err,error,*999) + CALL Basis_Get(basisFunctions,basisUserNumber,basis,err,error,*999) ALLOCATE(bases(1),STAT=err) IF(err/=0) CALL FlagError("Could not allocate bases.",err,error,*999) bases(1)%ptr=>basis @@ -37995,11 +38144,11 @@ SUBROUTINE cmfe_GeneratedMesh_BasisSetNumber1(regionUserNumber,generatedMeshUser ALLOCATE(bases(numberOfBases),STAT=err) IF(err/=0) CALL FlagError("Could not allocate bases.",err,error,*999) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_GeneratedMeshGet(region,generatedMeshUserNumber,generatedMesh,err,error,*999) DO basisIdx=1,numberOfBases NULLIFY(basis) - CALL Basis_Get(basisUserNumbers(basisIdx),basis,err,error,*999) + CALL Basis_Get(basisFunctions,basisUserNumbers(basisIdx),basis,err,error,*999) bases(basisIdx)%ptr=>basis ENDDO !basisIdx CALL GENERATED_MESH_BASIS_SET(generatedMesh,bases,err,error,*999) @@ -38098,7 +38247,7 @@ SUBROUTINE cmfe_GeneratedMesh_BaseVectorsSetNumber(regionUserNumber,generatedMes NULLIFY(region) NULLIFY(generatedMesh) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_GeneratedMeshGet(region,generatedMeshUserNumber,generatedMesh,err,error,*999) CALL GENERATED_MESH_BASE_VECTORS_SET(generatedMesh,baseVectors,err,error,*999) @@ -38159,7 +38308,7 @@ SUBROUTINE cmfe_GeneratedMesh_CreateFinishNumber(regionUserNumber,generatedMeshU NULLIFY(region) NULLIFY(generatedMesh) NULLIFY(mesh) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_GeneratedMeshGet(region,generatedMeshUserNumber,generatedMesh,err,error,*999) CALL GENERATED_MESH_CREATE_FINISH(generatedMesh,meshUserNumber,mesh,err,error,*999) @@ -38230,7 +38379,7 @@ SUBROUTINE cmfe_GeneratedMesh_CreateStartNumber(generatedMeshUserNumber,regionUs NULLIFY(region) NULLIFY(generatedMesh) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL GENERATED_MESH_CREATE_START(generatedMeshUserNumber,region,generatedMesh,err,error,*999) EXITS("cmfe_GeneratedMesh_CreateStartNumber") @@ -38319,7 +38468,7 @@ SUBROUTINE cmfe_GeneratedMesh_DestroyNumber(regionUserNumber,generatedMeshUserNu NULLIFY(region) NULLIFY(generatedMesh) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_GeneratedMeshGet(region,generatedMeshUserNumber,generatedMesh,err,error,*999) CALL GENERATED_MESH_DESTROY(generatedMesh,err,error,*999) @@ -38376,7 +38525,7 @@ SUBROUTINE cmfe_GeneratedMesh_ExtentGetNumber(regionUserNumber,generatedMeshUser NULLIFY(region) NULLIFY(generatedMesh) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_GeneratedMeshGet(region,generatedMeshUserNumber,generatedMesh,err,error,*999) CALL GENERATED_MESH_EXTENT_GET(generatedMesh,extent,err,error,*999) @@ -38435,7 +38584,7 @@ SUBROUTINE cmfe_GeneratedMesh_ExtentSetNumber(regionUserNumber,generatedMeshUser NULLIFY(region) NULLIFY(generatedMesh) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_GeneratedMeshGet(region,generatedMeshUserNumber,generatedMesh,err,error,*999) CALL GENERATED_MESH_EXTENT_SET(generatedMesh,extent,err,error,*999) @@ -38494,7 +38643,7 @@ SUBROUTINE cmfe_GeneratedMesh_NumberOfElementsGetNumber(regionUserNumber,generat NULLIFY(region) NULLIFY(generatedMesh) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_GeneratedMeshGet(region,generatedMeshUserNumber,generatedMesh,err,error,*999) CALL GENERATED_MESH_NUMBER_OF_ELEMENTS_GET(generatedMesh,numberOfElements,err,error,*999) @@ -38554,7 +38703,7 @@ SUBROUTINE cmfe_GeneratedMesh_NumberOfElementsSetNumber(regionUserNumber,generat NULLIFY(region) NULLIFY(generatedMesh) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_GeneratedMeshGet(region,generatedMeshUserNumber,generatedMesh,err,error,*999) CALL GENERATED_MESH_NUMBER_OF_ELEMENTS_SET(generatedMesh,numberOfElements,err,error,*999) @@ -38614,7 +38763,7 @@ SUBROUTINE cmfe_GeneratedMesh_OriginGetNumber(regionUserNumber,generatedMeshUser NULLIFY(region) NULLIFY(generatedMesh) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_GeneratedMeshGet(region,generatedMeshUserNumber,generatedMesh,err,error,*999) CALL GENERATED_MESH_ORIGIN_GET(generatedMesh,origin,err,error,*999) @@ -38673,7 +38822,7 @@ SUBROUTINE cmfe_GeneratedMesh_OriginSetNumber(regionUserNumber,generatedMeshUser NULLIFY(region) NULLIFY(generatedMesh) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_GeneratedMeshGet(region,generatedMeshUserNumber,generatedMesh,err,error,*999) CALL GENERATED_MESH_ORIGIN_SET(generatedMesh,origin,err,error,*999) @@ -38732,7 +38881,7 @@ SUBROUTINE cmfe_GeneratedMesh_TypeGetNumber(regionUserNumber,generatedMeshUserNu NULLIFY(region) NULLIFY(generatedMesh) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_GeneratedMeshGet(region,generatedMeshUserNumber,generatedMesh,err,error,*999) CALL GENERATED_MESH_TYPE_GET(generatedMesh,generatedMeshType,err,error,*999) @@ -38791,7 +38940,7 @@ SUBROUTINE cmfe_GeneratedMesh_TypeSetNumber(regionUserNumber,generatedMeshUserNu NULLIFY(region) NULLIFY(generatedMesh) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_GeneratedMeshGet(region,generatedMeshUserNumber,generatedMesh,err,error,*999) CALL GENERATED_MESH_TYPE_SET(generatedMesh,generatedMeshType,err,error,*999) @@ -38853,7 +39002,7 @@ SUBROUTINE cmfe_GeneratedMesh_GeometricParametersCalculateNumber(regionUserNumbe NULLIFY(region) NULLIFY(field) NULLIFY(generatedMesh) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_FieldGet(region,fieldUserNumber,field,err,error,*999) CALL Region_GeneratedMeshGet(region,generatedMeshUserNumber,generatedMesh,err,error,*999) CALL GeneratedMesh_GeometricParametersCalculate(field,generatedMesh,err,error,*999) @@ -38917,7 +39066,7 @@ SUBROUTINE cmfe_GeneratedMesh_SurfaceGetNumber0(regionUserNumber,generatedMeshUs NULLIFY(region) NULLIFY(generatedMesh) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_GeneratedMeshGet(region,generatedMeshUserNumber,generatedMesh,err,error,*999) CALL GENERATED_MESH_SURFACE_GET(generatedMesh,1,surfaceType,surfaceNodes,normalXi,err,error,*999) @@ -38953,7 +39102,7 @@ SUBROUTINE cmfe_GeneratedMesh_SurfaceGetNumber1(regionUserNumber,meshComponent,g NULLIFY(region) NULLIFY(generatedMesh) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_GeneratedMeshGet(region,generatedMeshUserNumber,generatedMesh,err,error,*999) CALL GENERATED_MESH_SURFACE_GET(generatedMesh,meshComponent,surfaceType,surfaceNodes,normalXi,err,error,*999) @@ -39067,8 +39216,8 @@ SUBROUTINE cmfe_MeshEmbedding_CreateNumber(regionOneUserNumber,regionTwoUserNumb NULLIFY(PARENTMESH) NULLIFY(CHILDMESH) - CALL Region_Get(regionOneUserNumber,REGION1,err,error,*999) - CALL Region_Get(regionTwoUserNumber,REGION2,err,error,*999) + CALL Region_Get(regions,regionOneUserNumber,REGION1,err,error,*999) + CALL Region_Get(regions,regionTwoUserNumber,REGION2,err,error,*999) CALL Region_MeshGet(region1,parentMeshUserNumber,PARENTMESH,err,error,*999) CALL Region_MeshGet(region2,childMeshUserNumber,CHILDMESH,err,error,*999) CALL MESH_EMBEDDING_CREATE(meshEmbedding%meshEmbedding,PARENTMESH,CHILDMESH,err,error,*999) @@ -39258,7 +39407,7 @@ SUBROUTINE cmfe_Interface_CreateFinishNumber(regionUserNumber,interfaceUserNumbe NULLIFY(region) NULLIFY(INTERFACE) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_InterfaceGet(region,interfaceUserNumber,INTERFACE,err,error,*999) CALL INTERFACE_CREATE_FINISH(INTERFACE,err,error,*999) @@ -39316,7 +39465,7 @@ SUBROUTINE cmfe_Interface_CreateStartNumber(interfaceUserNumber,regionUserNumber NULLIFY(region) NULLIFY(INTERFACE) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL INTERFACE_CREATE_START(interfaceUserNumber,region,INTERFACE,err,error,*999) EXITS("cmfe_Interface_CreateStartNumber") @@ -39377,9 +39526,9 @@ SUBROUTINE cmfe_Interface_CoordinateSystemSetNumber(parentRegionUserNumber,inter NULLIFY(INTERFACE) NULLIFY(region) NULLIFY(coordinateSystem) - CALL Region_Get(parentRegionUserNumber,region,err,error,*999) + CALL Region_Get(regions,parentRegionUserNumber,region,err,error,*999) CALL Region_InterfaceGet(region,interfaceUserNumber,INTERFACE,err,error,*999) - CALL CoordinateSystem_Get(coordinateSystemUserNumber,coordinateSystem,err,error,*999) + CALL CoordinateSystem_Get(coordinateSystems,coordinateSystemUserNumber,coordinateSystem,err,error,*999) CALL INTERFACE_COORDINATE_SYSTEM_SET(INTERFACE,coordinateSystem,err,error,*999) EXITS("cmfe_Interface_CoordinateSystemSetNumber") @@ -39438,7 +39587,7 @@ SUBROUTINE cmfe_Interface_CoordinateSystemGetNumber(parentRegionUserNumber,inter NULLIFY(region) NULLIFY(INTERFACE) NULLIFY(coordinateSystem) - CALL Region_Get(parentRegionUserNumber,region,err,error,*999) + CALL Region_Get(regions,parentRegionUserNumber,region,err,error,*999) CALL Region_InterfaceGet(region,interfaceUserNumber,INTERFACE,err,error,*999) CALL Interface_CoordinateSystemGet(INTERFACE,coordinateSystem,err,error,*999) coordinateSystemUserNumber = coordinateSystem%USER_NUMBER @@ -39498,7 +39647,7 @@ SUBROUTINE cmfe_Interface_DestroyNumber(regionUserNumber,interfaceUserNumber,err NULLIFY(region) NULLIFY(INTERFACE) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_InterfaceGet(region,interfaceUserNumber,INTERFACE,err,error,*999) CALL INTERFACE_DESTROY(INTERFACE,err,error,*999) @@ -39556,7 +39705,7 @@ SUBROUTINE cmfe_Interface_LabelGetCNumber(parentRegionUserNumber,interfaceUserNu NULLIFY(parentRegion) NULLIFY(INTERFACE) - CALL Region_Get(parentRegionUserNumber,parentRegion,err,error,*999) + CALL Region_Get(regions,parentRegionUserNumber,parentRegion,err,error,*999) CALL Region_InterfaceGet(parentRegion,interfaceUserNumber,INTERFACE,err,error,*999) CALL INTERFACE_LABEL_GET(INTERFACE,label,err,error,*999) @@ -39615,7 +39764,7 @@ SUBROUTINE cmfe_Interface_LabelGetVSNumber(parentRegionUserNumber,interfaceUserN NULLIFY(parentRegion) NULLIFY(INTERFACE) - CALL Region_Get(parentRegionUserNumber,parentRegion,err,error,*999) + CALL Region_Get(regions,parentRegionUserNumber,parentRegion,err,error,*999) CALL Region_InterfaceGet(parentRegion,interfaceUserNumber,INTERFACE,err,error,*999) CALL INTERFACE_LABEL_GET(INTERFACE,label,err,error,*999) @@ -39674,7 +39823,7 @@ SUBROUTINE cmfe_Interface_LabelSetCNumber(parentRegionUserNumber,interfaceUserNu NULLIFY(parentRegion) NULLIFY(INTERFACE) - CALL Region_Get(parentRegionUserNumber,parentRegion,err,error,*999) + CALL Region_Get(regions,parentRegionUserNumber,parentRegion,err,error,*999) CALL Region_InterfaceGet(parentRegion,interfaceUserNumber,INTERFACE,err,error,*999) CALL INTERFACE_LABEL_SET(INTERFACE,label,err,error,*999) @@ -39733,7 +39882,7 @@ SUBROUTINE cmfe_Interface_LabelSetVSNumber(parentRegionUserNumber,interfaceUserN NULLIFY(parentRegion) NULLIFY(INTERFACE) - CALL Region_Get(parentRegionUserNumber,parentRegion,err,error,*999) + CALL Region_Get(regions,parentRegionUserNumber,parentRegion,err,error,*999) CALL Region_InterfaceGet(parentRegion,interfaceUserNumber,INTERFACE,err,error,*999) CALL INTERFACE_LABEL_SET(INTERFACE,CHAR(label),err,error,*999) @@ -39824,9 +39973,9 @@ SUBROUTINE cmfe_Interface_MeshAddNumber(interfaceRegionUserNumber,interfaceUserN NULLIFY(INTERFACE) NULLIFY(meshRegion) NULLIFY(mesh) - CALL Region_Get(interfaceRegionUserNumber,parentRegion,err,error,*999) + CALL Region_Get(regions,interfaceRegionUserNumber,parentRegion,err,error,*999) CALL Region_InterfaceGet(parentRegion,interfaceUserNumber,INTERFACE,err,error,*999) - CALL Region_Get(meshRegionUserNumber,meshRegion,err,error,*999) + CALL Region_Get(regions,meshRegionUserNumber,meshRegion,err,error,*999) CALL Region_MeshGet(meshRegion,meshUserNumber,mesh,err,error,*999) CALL INTERFACE_MESH_ADD(INTERFACE,mesh,meshIndex,err,error,*999) @@ -39885,7 +40034,7 @@ SUBROUTINE cmfe_InterfaceMeshConnectivity_CreateFinishNumber(regionUserNumber,in NULLIFY(region) NULLIFY(INTERFACE) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_InterfaceGet(region,interfaceUserNumber,INTERFACE,err,error,*999) CALL INTERFACE_MESH_CONNECTIVITY_CREATE_FINISH(INTERFACE%MESH_CONNECTIVITY,err,error,*999) @@ -39948,7 +40097,7 @@ SUBROUTINE cmfe_InterfaceMeshConnectivity_CreateStartNumber(regionUserNumber,int NULLIFY(region) NULLIFY(INTERFACE) NULLIFY(interfaceMeshConnectivity) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_InterfaceGet(region,interfaceUserNumber,INTERFACE,err,error,*999) CALL Interface_MeshGet(INTERFACE,meshNumber,mesh,err,error,*999) CALL INTERFACE_MESH_CONNECTIVITY_CREATE_START(INTERFACE,mesh,interfaceMeshConnectivity,err,error,*999) @@ -40016,7 +40165,7 @@ SUBROUTINE cmfe_InterfaceMeshConnectivity_ElementNumberSetNumber(regionUserNumbe NULLIFY(region) NULLIFY(INTERFACE) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_InterfaceGet(region,interfaceUserNumber,INTERFACE,err,error,*999) CALL InterfaceMeshConnectivity_ElementNumberSet(INTERFACE%MESH_CONNECTIVITY,interfaceElementNumber, & & coupledMeshIndexNumber,coupledMeshElementNumber,err,error,*999) @@ -40161,7 +40310,7 @@ SUBROUTINE cmfe_InterfaceMeshConnectivity_ElementXiSetNumber(regionUserNumber,in NULLIFY(region) NULLIFY(INTERFACE) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_InterfaceGet(region,interfaceUserNumber,INTERFACE,err,error,*999) CALL INTERFACE_MESH_CONNECTIVITY_ELEMENT_XI_SET(INTERFACE%MESH_CONNECTIVITY,interfaceElementNumber, & & coupledMeshIndexNumber,coupledMeshElementNumber,interfaceMeshLocalNodeNumber,interfaceMeshComponentNodeNumber,xi, & @@ -40233,9 +40382,9 @@ SUBROUTINE cmfe_InterfaceMeshConnectivity_BasisSetNumber(regionUserNumber,interf NULLIFY(region) NULLIFY(INTERFACE) NULLIFY(basis) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_InterfaceGet(region,interfaceUserNumber,INTERFACE,err,error,*999) - CALL Basis_Get(interfaceBasisNumber,basis,err,error,*999) + CALL Basis_Get(basisFunctions,interfaceBasisNumber,basis,err,error,*999) CALL INTERFACE_MESH_CONNECTIVITY_BASIS_SET(INTERFACE%MESH_CONNECTIVITY,basis,err,error,*999) EXITS("cmfe_InterfaceMeshConnectivity_BasisSetNumber") @@ -40294,7 +40443,7 @@ SUBROUTINE cmfe_InterfaceMeshConnectivity_DestroyNumber(regionUserNumber,interfa NULLIFY(region) NULLIFY(INTERFACE) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_InterfaceGet(region,interfaceUserNumber,INTERFACE,err,error,*999) CALL INTERFACE_MESH_CONNECTIVITY_DESTROY(INTERFACE%MESH_CONNECTIVITY,err,error,*999) @@ -40353,7 +40502,7 @@ SUBROUTINE cmfe_InterfacePointsConnectivity_CreateFinishNumber(regionUserNumber, NULLIFY(region) NULLIFY(interface) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_InterfaceGet(region,interfaceUserNumber,INTERFACE,err,error,*999) CALL InterfacePointsConnectivity_CreateFinish(INTERFACE%pointsConnectivity,err,error,*999) @@ -40421,7 +40570,7 @@ SUBROUTINE cmfe_InterfacePointsConnectivity_CreateStartNumber(regionUserNumber,i NULLIFY(interfacePointsConnectivity) NULLIFY(mesh) NULLIFY(dataPoints) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_InterfaceGet(region,interfaceUserNumber,INTERFACE,err,error,*999) CALL Interface_MeshGet(INTERFACE,meshUserNumber,mesh,err,error,*999) CALL Interface_DataPointsGet(INTERFACE,dataPointsUserNumber,dataPoints,err,error,*999) @@ -40486,7 +40635,7 @@ SUBROUTINE cmfe_InterfacePointsConnectivity_DestroyNumber(regionUserNumber,inter NULLIFY(region) NULLIFY(interface) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_InterfaceGet(region,interfaceUserNumber,INTERFACE,err,error,*999) CALL InterfacePointsConnectivity_Destroy(INTERFACE%pointsConnectivity,err,error,*999) @@ -40549,7 +40698,7 @@ SUBROUTINE cmfe_InterfacePointsConnectivity_ElementNumberGetNumber(regionUserNum NULLIFY(region) NULLIFY(interface) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_InterfaceGet(region,interfaceUserNumber,INTERFACE,err,error,*999) CALL InterfacePointsConnectivity_ElementNumberGet(INTERFACE%pointsConnectivity,interfaceDataPointIndexNumber, & & coupledMeshIndexNumber,meshComponentNumber,coupledMeshElementNumber,err,error,*999) @@ -40620,7 +40769,7 @@ SUBROUTINE cmfe_InterfacePointsConnectivity_ElementNumberSetNumber(regionUserNum NULLIFY(region) NULLIFY(interface) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_InterfaceGet(region,interfaceUserNumber,INTERFACE,err,error,*999) CALL InterfacePointsConnectivity_ElementNumberSet(INTERFACE%pointsConnectivity,interfaceDataPointIndexNumber, & & coupledMeshIndexNumber,coupledMeshElementNumber,meshComponentNumber,err,error,*999) @@ -40690,7 +40839,7 @@ SUBROUTINE cmfe_InterfacePointsConnectivity_PointXiGetNumber(regionUserNumber,in NULLIFY(region) NULLIFY(interface) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_InterfaceGet(region,interfaceUserNumber,INTERFACE,err,error,*999) CALL InterfacePointsConnectivity_PointXiGet(INTERFACE%pointsConnectivity,interfaceDataPointIndexNumber, & & coupledMeshIndexNumber,xi,err,error,*999) @@ -40759,7 +40908,7 @@ SUBROUTINE cmfe_InterfacePointsConnectivity_PointXiSetNumber(regionUserNumber,in NULLIFY(region) NULLIFY(interface) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_InterfaceGet(region,interfaceUserNumber,INTERFACE,err,error,*999) CALL InterfacePointsConnectivity_PointXiSet(INTERFACE%pointsConnectivity,interfaceDataPointIndexNumber, & & coupledMeshIndexNumber,xi,err,error,*999) @@ -40834,9 +40983,9 @@ SUBROUTINE cmfe_InterfacePointsConnectivity_UpdateFromProjectionRNumber(regionUs NULLIFY(interface) NULLIFY(dataPoints) NULLIFY(dataProjection) - CALL Region_Get(regionUserNumber,ParentRegion,err,error,*999) + CALL Region_Get(regions,regionUserNumber,ParentRegion,err,error,*999) CALL Region_InterfaceGet(parentRegion,interfaceUserNumber,INTERFACE,err,error,*999) - CALL Region_Get(dataPointsRegionUserNumber,dataPointsRegion,err,error,*999) + CALL Region_Get(regions,dataPointsRegionUserNumber,dataPointsRegion,err,error,*999) CALL Region_DataPointsGet(dataPointsRegion,dataPointsUserNumber,dataPoints,err,error,*999) CALL DataPoints_DataProjectionGet(dataPoints,dataProjectionUserNumber,dataProjection,err,error,*999) CALL InterfacePointsConnectivity_UpdateFromProjection(INTERFACE%PointsConnectivity, & @@ -40883,9 +41032,9 @@ SUBROUTINE cmfe_InterfacePointsConnectivity_UpdateFromProjectionINumber(regionUs NULLIFY(dataPointsInterface) NULLIFY(dataPoints) NULLIFY(dataProjection) - CALL Region_Get(regionUserNumber,parentRegion,err,error,*999) + CALL Region_Get(regions,regionUserNumber,parentRegion,err,error,*999) CALL Region_InterfaceGet(parentRegion,interfaceUserNumber,INTERFACE,err,error,*999) - CALL Region_Get(dataPointsRegionUserNumber,dataPointsRegion,err,error,*999) + CALL Region_Get(regions,dataPointsRegionUserNumber,dataPointsRegion,err,error,*999) CALL Region_InterfaceGet(dataPointsRegion,dataPointsInterfaceUserNumber,dataPointsInterface,err,error,*999) CALL Interface_DataPointsGet(dataPointsInterface,dataPointsUserNumber,dataPoints,err,error,*999) CALL DataPoints_DataProjectionGet(dataPoints,dataProjectionUserNumber,dataProjection,err,error,*999) @@ -40956,7 +41105,7 @@ SUBROUTINE cmfe_InterfaceCondition_CreateFinishNumber(regionUserNumber,interface NULLIFY(region) NULLIFY(INTERFACE) NULLIFY(interfaceCondition) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_InterfaceGet(region,interfaceUserNumber,INTERFACE,err,error,*999) CALL Interface_InterfaceConditionGet(INTERFACE,interfaceConditionUserNumber,interfaceCondition,err,error,*999) CALL INTERFACE_CONDITION_CREATE_FINISH(interfaceCondition,err,error,*999) @@ -41021,7 +41170,7 @@ SUBROUTINE cmfe_InterfaceCondition_CreateStartNumber(interfaceConditionUserNumbe NULLIFY(INTERFACE) NULLIFY(geometricField) NULLIFY(interfaceCondition) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_InterfaceGet(region,interfaceUserNumber,INTERFACE,err,error,*999) CALL Interface_FieldGet(INTERFACE,geometricFieldUserNumber,geometricField,err,error,*999) CALL INTERFACE_CONDITION_CREATE_START(interfaceConditionUserNumber,INTERFACE,geometricField,interfaceCondition, & @@ -41095,10 +41244,10 @@ SUBROUTINE cmfe_InterfaceCondition_DependentVariableAddNumber(interfaceRegionUse NULLIFY(interfaceCondition) NULLIFY(equationsSetRegion) NULLIFY(equationsSet) - CALL Region_Get(interfaceRegionUserNumber,interfaceRegion,err,error,*999) + CALL Region_Get(regions,interfaceRegionUserNumber,interfaceRegion,err,error,*999) CALL Region_InterfaceGet(interfaceRegion,interfaceUserNumber,INTERFACE,err,error,*999) CALL Interface_InterfaceConditionGet(INTERFACE,interfaceConditionUserNumber,interfaceCondition,err,error,*999) - CALL Region_Get(EquationsSetRegionuserNumber,equationsSetRegion,err,error,*999) + CALL Region_Get(regions,EquationsSetRegionuserNumber,equationsSetRegion,err,error,*999) CALL Region_EquationsSetGet(equationsSetRegion,equationsSetUserNumber,equationsSet,err,error,*999) CALL INTERFACE_CONDITION_DEPENDENT_VARIABLE_ADD(interfaceCondition,meshIndex,equationsSet,variableType, & & err,error,*999) @@ -41165,7 +41314,7 @@ SUBROUTINE cmfe_InterfaceCondition_DestroyNumber(regionUserNumber,interfaceUserN NULLIFY(region) NULLIFY(INTERFACE) NULLIFY(interfaceCondition) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_InterfaceGet(region,interfaceUserNumber,INTERFACE,err,error,*999) CALL Interface_InterfaceConditionGet(INTERFACE,interfaceConditionUserNumber,interfaceCondition,err,error,*999) CALL INTERFACE_CONDITION_DESTROY(interfaceCondition,err,error,*999) @@ -41227,7 +41376,7 @@ SUBROUTINE cmfe_InterfaceCondition_EquationsCreateFinishNumber(regionUserNumber, NULLIFY(region) NULLIFY(INTERFACE) NULLIFY(interfaceCondition) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_InterfaceGet(region,interfaceUserNumber,INTERFACE,err,error,*999) CALL Interface_InterfaceConditionGet(INTERFACE,interfaceConditionUserNumber,interfaceCondition,err,error,*999) CALL INTERFACE_CONDITION_EQUATIONS_CREATE_FINISH(interfaceCondition,err,error,*999) @@ -41293,7 +41442,7 @@ SUBROUTINE cmfe_InterfaceCondition_EquationsCreateStartNumber(regionUserNumber,i NULLIFY(INTERFACE) NULLIFY(interfaceCondition) NULLIFY(interfaceEquations) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_InterfaceGet(region,interfaceUserNumber,INTERFACE,err,error,*999) CALL Interface_InterfaceConditionGet(INTERFACE,interfaceConditionUserNumber,interfaceCondition,err,error,*999) CALL INTERFACE_CONDITION_EQUATIONS_CREATE_START(interfaceCondition,interfaceEquations,err,error,*999) @@ -41358,7 +41507,7 @@ SUBROUTINE cmfe_InterfaceCondition_EquationsDestroyNumber(regionUserNumber,inter NULLIFY(region) NULLIFY(INTERFACE) NULLIFY(interfaceCondition) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_InterfaceGet(region,interfaceUserNumber,INTERFACE,err,error,*999) CALL Interface_InterfaceConditionGet(INTERFACE,interfaceConditionUserNumber,interfaceCondition,err,error,*999) CALL INTERFACE_CONDITION_EQUATIONS_DESTROY(interfaceCondition,err,error,*999) @@ -41422,7 +41571,7 @@ SUBROUTINE cmfe_InterfaceCondition_IntegrationTypeGetNumber(regionUserNumber,int NULLIFY(region) NULLIFY(interface) NULLIFY(interfaceCondition) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_InterfaceGet(region,interfaceUserNumber,INTERFACE,err,error,*999) CALL Interface_InterfaceConditionGet(INTERFACE,interfaceConditionUserNumber,interfaceCondition,err,error,*999) CALL InterfaceCondition_IntegrationTypeGet(interfaceCondition,interfaceConditionIntegrationType,err,error,*999) @@ -41489,7 +41638,7 @@ SUBROUTINE cmfe_InterfaceCondition_IntegrationTypeSetNumber(regionUserNumber,int NULLIFY(region) NULLIFY(interface) NULLIFY(interfaceCondition) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_InterfaceGet(region,interfaceUserNumber,INTERFACE,err,error,*999) CALL Interface_InterfaceConditionGet(INTERFACE,interfaceConditionUserNumber,interfaceCondition,err,error,*999) CALL InterfaceCondition_IntegrationTypeSet(interfaceCondition,interfaceConditionIntegrationType,err,error,*999) @@ -41555,7 +41704,7 @@ SUBROUTINE cmfe_InterfaceCondition_LagrangeFieldCreateFinishNumber(regionUserNum NULLIFY(region) NULLIFY(INTERFACE) NULLIFY(interfaceCondition) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_InterfaceGet(region,interfaceUserNumber,INTERFACE,err,error,*999) CALL Interface_InterfaceConditionGet(INTERFACE,interfaceConditionUserNumber,interfaceCondition,err,error,*999) CALL InterfaceCondition_LagrangeFieldCreateFinish(interfaceCondition,err,error,*999) @@ -41622,7 +41771,7 @@ SUBROUTINE cmfe_InterfaceCondition_LagrangeFieldCreateStartNumber(regionUserNumb NULLIFY(INTERFACE) NULLIFY(interfaceCondition) NULLIFY(lagrangeField) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_InterfaceGet(region,interfaceUserNumber,INTERFACE,err,error,*999) CALL Interface_InterfaceConditionGet(INTERFACE,interfaceConditionUserNumber,interfaceCondition,err,error,*999) CALL InterfaceCondition_LagrangeFieldCreateStart(interfaceCondition,lagrangeFieldUserNumber,lagrangeField, & @@ -41690,7 +41839,7 @@ SUBROUTINE cmfe_InterfaceCondition_LabelGetCNumber(regionUserNumber,interfaceUse NULLIFY(region) NULLIFY(interface) NULLIFY(interfaceCondition) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_InterfaceGet(region,interfaceUserNumber,interface,err,error,*999) CALL Interface_InterfaceConditionGet(interface,interfaceConditionUserNumber,interfaceCondition,err,error,*999) CALL InterfaceCondition_LabelGet(interfaceCondition,label,err,error,*999) @@ -41753,7 +41902,7 @@ SUBROUTINE cmfe_InterfaceCondition_LabelGetVSNumber(regionUserNumber,interfaceUs NULLIFY(region) NULLIFY(interface) NULLIFY(interfaceCondition) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_InterfaceGet(region,interfaceUserNumber,interface,err,error,*999) CALL Interface_InterfaceConditionGet(interface,interfaceConditionUserNumber,interfaceCondition,err,error,*999) CALL InterfaceCondition_LabelGet(interfaceCondition,label,err,error,*999) @@ -41816,7 +41965,7 @@ SUBROUTINE cmfe_InterfaceCondition_LabelSetCNumber(regionUserNumber,interfaceUse NULLIFY(region) NULLIFY(INTERFACE) NULLIFY(interfaceCondition) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_InterfaceGet(region,interfaceUserNumber,INTERFACE,err,error,*999) CALL Interface_InterfaceConditionGet(INTERFACE,interfaceConditionUserNumber,interfaceCondition,err,error,*999) CALL InterfaceCondition_LabelSet(interfaceCondition,label,err,error,*999) @@ -41879,7 +42028,7 @@ SUBROUTINE cmfe_InterfaceCondition_LabelSetVSNumber(regionUserNumber,interfaceUs NULLIFY(region) NULLIFY(INTERFACE) NULLIFY(interfaceCondition) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_InterfaceGet(region,interfaceUserNumber,INTERFACE,err,error,*999) CALL Interface_InterfaceConditionGet(INTERFACE,interfaceConditionUserNumber,interfaceCondition,err,error,*999) CALL InterfaceCondition_LabelSet(interfaceCondition,label,err,error,*999) @@ -41943,7 +42092,7 @@ SUBROUTINE cmfe_InterfaceCondition_OutputTypeGetNumber(regionUserNumber,interfac NULLIFY(region) NULLIFY(INTERFACE) NULLIFY(interfaceCondition) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_InterfaceGet(region,interfaceUserNumber,INTERFACE,err,error,*999) CALL Interface_InterfaceConditionGet(INTERFACE,interfaceConditionUserNumber,interfaceCondition,err,error,*999) CALL InterfaceCondition_OutputTypeGet(interfaceCondition,outputType,err,error,*999) @@ -42007,7 +42156,7 @@ SUBROUTINE cmfe_InterfaceCondition_OutputTypeSetNumber(regionUserNumber,interfac NULLIFY(region) NULLIFY(INTERFACE) NULLIFY(interfaceCondition) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_InterfaceGet(region,interfaceUserNumber,INTERFACE,err,error,*999) CALL Interface_InterfaceConditionGet(INTERFACE,interfaceConditionUserNumber,interfaceCondition,err,error,*999) CALL InterfaceCondition_OutputTypeSet(interfaceCondition,outputType,err,error,*999) @@ -42070,7 +42219,7 @@ SUBROUTINE cmfe_InterfaceCondition_PenaltyFieldCreateFinishNumber(RegionUserNumb NULLIFY(region) NULLIFY(INTERFACE) NULLIFY(interfaceCondition) - CALL Region_Get(RegionUserNumber,region,err,error,*999) + CALL Region_Get(regions,RegionUserNumber,region,err,error,*999) CALL Region_InterfaceGet(region,InterfaceUserNumber,INTERFACE,err,error,*999) CALL Interface_InterfaceConditionGet(INTERFACE,InterfaceConditionUserNumber,interfaceCondition,err,error,*999) CALL InterfaceCondition_PenaltyFieldCreateFinish(interfaceCondition,err,error,*999) @@ -42137,7 +42286,7 @@ SUBROUTINE cmfe_InterfaceCondition_PenaltyFieldCreateStartNumber(RegionUserNumbe NULLIFY(INTERFACE) NULLIFY(interfaceCondition) NULLIFY(penaltyField) - CALL Region_Get(RegionUserNumber,region,err,error,*999) + CALL Region_Get(regions,RegionUserNumber,region,err,error,*999) CALL Region_InterfaceGet(region,InterfaceUserNumber,INTERFACE,err,error,*999) CALL Interface_InterfaceConditionGet(INTERFACE,InterfaceUserNumber,interfaceCondition,err,error,*999) CALL InterfaceCondition_PenaltyFieldCreateStart(interfaceCondition,PenaltyFieldUserNumber,penaltyField, & @@ -42206,7 +42355,7 @@ SUBROUTINE cmfe_InterfaceCondition_MethodGetNumber(regionUserNumber,interfaceUse NULLIFY(region) NULLIFY(INTERFACE) NULLIFY(interfaceCondition) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_InterfaceGet(region,interfaceUserNumber,INTERFACE,err,error,*999) CALL Interface_InterfaceConditionGet(INTERFACE,interfaceConditionUserNumber,interfaceCondition,err,error,*999) CALL INTERFACE_CONDITION_METHOD_GET(interfaceCondition,interfaceConditionMethod,err,error,*999) @@ -42270,7 +42419,7 @@ SUBROUTINE cmfe_InterfaceCondition_MethodSetNumber(regionUserNumber,interfaceUse NULLIFY(region) NULLIFY(INTERFACE) NULLIFY(interfaceCondition) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_InterfaceGet(region,interfaceUserNumber,INTERFACE,err,error,*999) CALL Interface_InterfaceConditionGet(INTERFACE,interfaceConditionUserNumber,interfaceCondition,err,error,*999) CALL INTERFACE_CONDITION_METHOD_SET(interfaceCondition,interfaceConditionMethod,err,error,*999) @@ -42334,7 +42483,7 @@ SUBROUTINE cmfe_InterfaceCondition_OperatorGetNumber(regionUserNumber,interfaceU NULLIFY(region) NULLIFY(INTERFACE) NULLIFY(interfaceCondition) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_InterfaceGet(region,interfaceUserNumber,INTERFACE,err,error,*999) CALL Interface_InterfaceConditionGet(INTERFACE,interfaceConditionUserNumber,interfaceCondition,err,error,*999) CALL INTERFACE_CONDITION_OPERATOR_GET(interfaceCondition,interfaceConditionOperator,err,error,*999) @@ -42399,7 +42548,7 @@ SUBROUTINE cmfe_InterfaceCondition_OperatorSetNumber(regionUserNumber,interfaceU NULLIFY(region) NULLIFY(INTERFACE) NULLIFY(interfaceCondition) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_InterfaceGet(region,interfaceUserNumber,INTERFACE,err,error,*999) CALL Interface_InterfaceConditionGet(INTERFACE,interfaceConditionUserNumber,interfaceCondition,err,error,*999) CALL INTERFACE_CONDITION_OPERATOR_SET(interfaceCondition,interfaceConditionOperator,err,error,*999) @@ -42502,7 +42651,7 @@ SUBROUTINE cmfe_InterfaceEquations_MatrixTimeDependenceTypeGetNumber1(regionUser NULLIFY(interface) NULLIFY(interfaceCondition) NULLIFY(interfaceEquations) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_InterfaceGet(region,interfaceUserNumber,interface,err,error,*999) CALL Interface_InterfaceConditionGet(interface,interfaceConditionUserNumber,interfaceCondition,err,error,*999) CALL InterfaceCondition_EquationsGet(interfaceCondition,interfaceEquations,err,error,*999) @@ -42644,7 +42793,7 @@ SUBROUTINE cmfe_InterfaceEquations_MatrixTimeDependenceTypeSetNumber1(regionUser NULLIFY(interface) NULLIFY(interfaceCondition) NULLIFY(interfaceEquations) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_InterfaceGet(region,interfaceUserNumber,interface,err,error,*999) CALL Interface_InterfaceConditionGet(interface,interfaceConditionUserNumber,interfaceCondition,err,error,*999) CALL InterfaceCondition_EquationsGet(interfaceCondition,interfaceEquations,err,error,*999) @@ -42749,7 +42898,7 @@ SUBROUTINE cmfe_InterfaceEquations_OutputTypeGetNumber(regionUserNumber,interfac NULLIFY(INTERFACE) NULLIFY(interfaceCondition) NULLIFY(interfaceEquations) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_InterfaceGet(region,interfaceUserNumber,INTERFACE,err,error,*999) CALL Interface_InterfaceConditionGet(INTERFACE,interfaceConditionUserNumber,interfaceCondition,err,error,*999) CALL InterfaceCondition_EquationsGet(interfaceCondition,interfaceEquations,err,error,*999) @@ -42816,7 +42965,7 @@ SUBROUTINE cmfe_InterfaceEquations_OutputTypeSetNumber(regionUserNumber,interfac NULLIFY(INTERFACE) NULLIFY(interfaceCondition) NULLIFY(interfaceEquations) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_InterfaceGet(region,interfaceUserNumber,INTERFACE,err,error,*999) CALL Interface_InterfaceConditionGet(INTERFACE,interfaceConditionUserNumber,interfaceCondition,err,error,*999) CALL InterfaceCondition_EquationsGet(interfaceCondition,interfaceEquations,err,error,*999) @@ -42883,7 +43032,7 @@ SUBROUTINE cmfe_InterfaceEquations_SparsityGetNumber(regionUserNumber,interfaceU NULLIFY(INTERFACE) NULLIFY(interfaceCondition) NULLIFY(interfaceEquations) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_InterfaceGet(region,interfaceUserNumber,INTERFACE,err,error,*999) CALL Interface_InterfaceConditionGet(INTERFACE,interfaceConditionUserNumber,interfaceCondition,err,error,*999) CALL InterfaceCondition_EquationsGet(interfaceCondition,interfaceEquations,err,error,*999) @@ -42950,7 +43099,7 @@ SUBROUTINE cmfe_InterfaceEquations_SparsitySetNumber(regionUserNumber,interfaceU NULLIFY(INTERFACE) NULLIFY(interfaceCondition) NULLIFY(interfaceEquations) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_InterfaceGet(region,interfaceUserNumber,INTERFACE,err,error,*999) CALL Interface_InterfaceConditionGet(INTERFACE,interfaceConditionUserNumber,interfaceCondition,err,error,*999) CALL InterfaceCondition_EquationsGet(interfaceCondition,interfaceEquations,err,error,*999) @@ -43015,7 +43164,7 @@ SUBROUTINE cmfe_Decomposition_CreateFinishNumber(regionUserNumber,meshUserNumber NULLIFY(region) NULLIFY(mesh) NULLIFY(decomposition) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_MeshGet(region,meshUserNumber,mesh,err,error,*999) CALL Mesh_DecompositionGet(mesh,decompositionUserNumber,decomposition,err,error,*999) CALL DECOMPOSITION_CREATE_FINISH(decomposition,err,error,*999) @@ -43221,7 +43370,7 @@ SUBROUTINE cmfe_Decomposition_CreateStartNumber(decompositionUserNumber,regionUs NULLIFY(region) NULLIFY(mesh) NULLIFY(decomposition) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_MeshGet(region,meshUserNumber,mesh,err,error,*999) CALL DECOMPOSITION_CREATE_START(decompositionUserNumber,mesh,decomposition,err,error,*999) @@ -43287,7 +43436,7 @@ SUBROUTINE cmfe_Decomposition_DestroyNumber(regionUserNumber,meshUserNumber,deco NULLIFY(region) NULLIFY(mesh) NULLIFY(decomposition) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_MeshGet(region,meshUserNumber,mesh,err,error,*999) CALL Mesh_DecompositionGet(mesh,decompositionUserNumber,decomposition,err,error,*999) CALL DECOMPOSITION_DESTROY(decomposition,err,error,*999) @@ -43348,7 +43497,7 @@ SUBROUTINE cmfe_Decomposition_ElementDomainCalculateNumber(regionUserNumber,mesh NULLIFY(region) NULLIFY(mesh) NULLIFY(decomposition) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_MeshGet(region,meshUserNumber,mesh,err,error,*999) CALL Mesh_DecompositionGet(mesh,decompositionUserNumber,decomposition,err,error,*999) CALL DECOMPOSITION_ELEMENT_DOMAIN_CALCULATE(decomposition,err,error,*999) @@ -43414,7 +43563,7 @@ SUBROUTINE cmfe_Decomposition_ElementDomainGetNumber(regionUserNumber,meshUserNu NULLIFY(region) NULLIFY(mesh) NULLIFY(decomposition) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_MeshGet(region,meshUserNumber,mesh,err,error,*999) CALL Mesh_DecompositionGet(mesh,decompositionUserNumber,decomposition,err,error,*999) CALL DECOMPOSITION_ELEMENT_DOMAIN_GET(decomposition,elementUserNumber,domain,err,error,*999) @@ -43480,7 +43629,7 @@ SUBROUTINE cmfe_Decomposition_ElementDomainSetNumber(regionUserNumber,meshUserNu NULLIFY(region) NULLIFY(mesh) NULLIFY(decomposition) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_MeshGet(region,meshUserNumber,mesh,err,error,*999) CALL Mesh_DecompositionGet(mesh,decompositionUserNumber,decomposition,err,error,*999) CALL DECOMPOSITION_ELEMENT_DOMAIN_SET(decomposition,elementUserNumber,domain,err,error,*999) @@ -43545,7 +43694,7 @@ SUBROUTINE cmfe_Decomposition_MeshComponentGetNumber(regionUserNumber,meshUserNu NULLIFY(region) NULLIFY(mesh) NULLIFY(decomposition) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_MeshGet(region,meshUserNumber,mesh,err,error,*999) CALL Mesh_DecompositionGet(mesh,decompositionUserNumber,decomposition,err,error,*999) CALL DECOMPOSITION_MESH_COMPONENT_NUMBER_GET(decomposition,meshComponentNumber,err,error,*999) @@ -43609,7 +43758,7 @@ SUBROUTINE cmfe_Decomposition_MeshComponentSetNumber(regionUserNumber,meshUserNu NULLIFY(region) NULLIFY(mesh) NULLIFY(decomposition) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_MeshGet(region,meshUserNumber,mesh,err,error,*999) CALL Mesh_DecompositionGet(mesh,decompositionUserNumber,decomposition,err,error,*999) CALL DECOMPOSITION_MESH_COMPONENT_NUMBER_SET(decomposition,meshComponentNumber,err,error,*999) @@ -43673,7 +43822,7 @@ SUBROUTINE cmfe_Decomposition_NumberOfDomainsGetNumber(regionUserNumber,meshUser NULLIFY(region) NULLIFY(mesh) NULLIFY(decomposition) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_MeshGet(region,meshUserNumber,mesh,err,error,*999) CALL Mesh_DecompositionGet(mesh,decompositionUserNumber,decomposition,err,error,*999) CALL DECOMPOSITION_NUMBER_OF_DOMAINS_GET(decomposition,numberOfDomains,err,error,*999) @@ -43737,7 +43886,7 @@ SUBROUTINE cmfe_Decomposition_NumberOfDomainsSetNumber(regionUserNumber,meshUser NULLIFY(region) NULLIFY(mesh) NULLIFY(decomposition) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_MeshGet(region,meshUserNumber,mesh,err,error,*999) CALL Mesh_DecompositionGet(mesh,decompositionUserNumber,decomposition,err,error,*999) CALL DECOMPOSITION_NUMBER_OF_DOMAINS_SET(decomposition,numberOfDomains,err,error,*999) @@ -43800,7 +43949,7 @@ SUBROUTINE cmfe_Decomposition_TypeGetNumber(regionUserNumber,meshUserNumber,deco NULLIFY(region) NULLIFY(mesh) NULLIFY(decomposition) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_MeshGet(region,meshUserNumber,mesh,err,error,*999) CALL Mesh_DecompositionGet(mesh,decompositionUserNumber,decomposition,err,error,*999) CALL DECOMPOSITION_TYPE_GET(decomposition,decompositionType,err,error,*999) @@ -43863,7 +44012,7 @@ SUBROUTINE cmfe_Decomposition_TypeSetNumber(regionUserNumber,meshUserNumber,deco NULLIFY(region) NULLIFY(mesh) NULLIFY(decomposition) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_MeshGet(region,meshUserNumber,mesh,err,error,*999) CALL Mesh_DecompositionGet(mesh,decompositionUserNumber,decomposition,err,error,*999) CALL DECOMPOSITION_TYPE_SET(decomposition,decompositionType,err,error,*999) @@ -43928,7 +44077,7 @@ SUBROUTINE cmfe_Decomposition_WorkGroupSetNumber(regionUserNumber,meshUserNumber NULLIFY(mesh) NULLIFY(decomposition) NULLIFY(workGroup) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_MeshGet(region,meshUserNumber,mesh,err,error,*999) CALL Mesh_DecompositionGet(mesh,decompositionUserNumber,decomposition,err,error,*999) CALL WorkGroup_Get(computationEnvironment,workGroupUserNumber,workGroup,err,error,*999) @@ -43993,7 +44142,7 @@ SUBROUTINE cmfe_Decomposition_CalculateLinesSetNumber(regionUserNumber,meshUserN NULLIFY(region) NULLIFY(mesh) NULLIFY(decomposition) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_MeshGet(region,meshUserNumber,mesh,err,error,*999) CALL Mesh_DecompositionGet(mesh,decompositionUserNumber,decomposition,err,error,*999) CALL DECOMPOSITION_CALCULATE_LINES_SET(decomposition,calculateLinesFlag,err,error,*999) @@ -44057,7 +44206,7 @@ SUBROUTINE cmfe_Decomposition_CalculateFacesSetNumber(regionUserNumber,meshUserN NULLIFY(region) NULLIFY(mesh) NULLIFY(decomposition) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_MeshGet(region,meshUserNumber,mesh,err,error,*999) CALL Mesh_DecompositionGet(mesh,decompositionUserNumber,decomposition,err,error,*999) CALL DECOMPOSITION_CALCULATE_FACES_SET(decomposition,calculateFacesFlag,err,error,*999) @@ -44123,7 +44272,7 @@ SUBROUTINE cmfe_Decomposition_NodeDomainGetNumber(regionUserNumber,meshUserNumbe NULLIFY(region) NULLIFY(mesh) NULLIFY(decomposition) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_MeshGet(region,meshUserNumber,mesh,err,error,*999) CALL Mesh_DecompositionGet(mesh,decompositionUserNumber,decomposition,err,error,*999) CALL DECOMPOSITION_NODE_DOMAIN_GET(decomposition,nodeUserNumber,meshComponentNumber,domain,err,error,*999) @@ -44184,7 +44333,7 @@ SUBROUTINE cmfe_Mesh_CreateFinishNumber(regionUserNumber,meshUserNumber,err) NULLIFY(region) NULLIFY(mesh) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_MeshGet(region,meshUserNumber,mesh,err,error,*999) CALL MESH_CREATE_FINISH(mesh,err,error,*999) @@ -44254,7 +44403,7 @@ SUBROUTINE cmfe_Mesh_CreateStartNumber(meshUserNumber,regionUserNumber,numberOfD NULLIFY(region) NULLIFY(mesh) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL MESH_CREATE_START(meshUserNumber,region,numberOfDimensions,mesh,err,error,*999) EXITS("cmfe_Mesh_CreateStartNumber") @@ -44349,7 +44498,7 @@ SUBROUTINE cmfe_Mesh_DestroyNumber(regionUserNumber,meshUserNumber,err) NULLIFY(region) NULLIFY(mesh) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_MeshGet(region,meshUserNumber,mesh,err,error,*999) CALL MESH_DESTROY(mesh,err,error,*999) @@ -44407,7 +44556,7 @@ SUBROUTINE cmfe_Mesh_NumberOfComponentsGetNumber(regionUserNumber,meshUserNumber NULLIFY(region) NULLIFY(mesh) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_MeshGet(region,meshUserNumber,mesh,err,error,*999) CALL MESH_NUMBER_OF_COMPONENTS_GET(mesh,numberOfComponents,err,error,*999) @@ -44466,7 +44615,7 @@ SUBROUTINE cmfe_Mesh_NumberOfComponentsSetNumber(regionUserNumber,meshUserNumber NULLIFY(region) NULLIFY(mesh) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_MeshGet(region,meshUserNumber,mesh,err,error,*999) CALL MESH_NUMBER_OF_COMPONENTS_SET(mesh,numberOfComponents,err,error,*999) @@ -44525,7 +44674,7 @@ SUBROUTINE cmfe_Mesh_SurroundingElementsCalculateSetNumber(regionUserNumber,mesh NULLIFY(region) NULLIFY(mesh) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_MeshGet(region,meshUserNumber,mesh,err,error,*999) CALL MESH_SURROUNDING_ELEMENTS_CALCULATE_SET(mesh,surroundingElementsCalculateFlag,err,error,*999) @@ -44586,7 +44735,7 @@ SUBROUTINE cmfe_Mesh_NumberOfElementsGetNumber(regionUserNumber,meshUserNumber,n NULLIFY(region) NULLIFY(mesh) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_MeshGet(region,meshUserNumber,mesh,err,error,*999) CALL MESH_NUMBER_OF_ELEMENTS_GET(mesh,numberOfElements,err,error,*999) @@ -44645,7 +44794,7 @@ SUBROUTINE cmfe_Mesh_NumberOfElementsSetNumber(regionUserNumber,meshUserNumber,n NULLIFY(region) NULLIFY(mesh) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_MeshGet(region,meshUserNumber,mesh,err,error,*999) CALL MESH_NUMBER_OF_ELEMENTS_SET(mesh,numberOfElements,err,error,*999) @@ -44705,7 +44854,7 @@ SUBROUTINE cmfe_Mesh_TopologyDataPointsCalculateProjectionRegionNumber(regionUse NULLIFY(region) NULLIFY(mesh) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_MeshGet(region,MeshUserNumber,mesh,err,error,*999) CALL MeshTopology_DataPointsCalculateProjection(mesh,DataProjection%dataProjection,err,error,*999) @@ -44742,7 +44891,7 @@ SUBROUTINE cmfe_Mesh_TopologyDataPointsCalculateProjectionInterfaceNumber(parent NULLIFY(parentRegion) NULLIFY(INTERFACE) NULLIFY(mesh) - CALL Region_Get(parentregionUserNumber,parentRegion,err,error,*999) + CALL Region_Get(regions,parentregionUserNumber,parentRegion,err,error,*999) CALL Region_InterfaceGet(parentRegion,interfaceUserNumber,INTERFACE,err,error,*999) CALL Interface_MeshGet(INTERFACE,MeshUserNumber,mesh,err,error,*999) CALL MeshTopology_DataPointsCalculateProjection(mesh,DataProjection%dataProjection,err,error,*999) @@ -44806,7 +44955,7 @@ SUBROUTINE cmfe_MeshElements_CreateFinishNumber(regionUserNumber,meshUserNumber, NULLIFY(region) NULLIFY(mesh) NULLIFY(meshElements) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_MeshGet(region,meshUserNumber,mesh,err,error,*999) CALL Mesh_MeshElementsGet(mesh,meshComponentNumber,meshElements,err,error,*999) CALL MESH_TOPOLOGY_ELEMENTS_CREATE_FINISH(meshElements,err,error,*999) @@ -44870,9 +45019,9 @@ SUBROUTINE cmfe_MeshElements_CreateStartNumber(regionUserNumber,meshUserNumber,m NULLIFY(mesh) NULLIFY(basis) NULLIFY(meshElements) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_MeshGet(region,meshUserNumber,mesh,err,error,*999) - CALL Basis_Get(basisUserNumber,basis,err,error,*999) + CALL Basis_Get(basisFunctions,basisUserNumber,basis,err,error,*999) CALL MESH_TOPOLOGY_ELEMENTS_CREATE_START(mesh,meshComponentNumber,basis,meshElements,err,error,*999) EXITS("cmfe_MeshElements_CreateStartNumber") @@ -44933,7 +45082,7 @@ SUBROUTINE cmfe_Mesh_ElementsGetNumber(regionUserNumber,meshUserNumber,meshCompo NULLIFY(region) NULLIFY(mesh) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_MeshGet(region,meshUserNumber,mesh,err,error,*999) CALL Mesh_MeshElementsGet(mesh,meshComponentNumber,meshElements%meshElements,err,error,*999) @@ -45003,7 +45152,7 @@ SUBROUTINE cmfe_MeshElements_BasisGetNumber(regionUserNumber,meshUserNumber,mesh NULLIFY(mesh) NULLIFY(meshElements) NULLIFY(basis) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_MeshGet(region,meshUserNumber,mesh,err,error,*999) CALL Mesh_MeshElementsGet(mesh,meshComponentNumber,meshElements,err,error,*999) CALL MESH_TOPOLOGY_ELEMENTS_ELEMENT_BASIS_GET(globalElementNumber,meshElements,basis,err,error,*999) @@ -45072,10 +45221,10 @@ SUBROUTINE cmfe_MeshElements_BasisSetNumber(regionUserNumber,meshUserNumber,mesh NULLIFY(mesh) NULLIFY(meshElements) NULLIFY(basis) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_MeshGet(region,meshUserNumber,mesh,err,error,*999) CALL Mesh_MeshElementsGet(mesh,meshComponentNumber,meshElements,err,error,*999) - CALL Basis_Get(basisUserNumber,basis,err,error,*999) + CALL Basis_Get(basisFunctions,basisUserNumber,basis,err,error,*999) CALL MESH_TOPOLOGY_ELEMENTS_ELEMENT_BASIS_SET(globalElementNumber,meshElements,basis,err,error,*999) EXITS("cmfe_MeshElements_BasisSetNumber") @@ -45140,7 +45289,7 @@ SUBROUTINE cmfe_MeshElements_AdjacentElementGetNumber(regionUserNumber,meshUserN NULLIFY(region) NULLIFY(mesh) NULLIFY(meshElements) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_MeshGet(region,meshUserNumber,mesh,err,error,*999) CALL Mesh_MeshElementsGet(mesh,meshComponentNumber,meshElements,err,error,*999) CALL MESH_TOPOLOGY_ELEMENTS_ADJACENT_ELEMENT_GET(globalElementNumber,meshElements,adjacentElementXi,adjacentElement, & @@ -45209,7 +45358,7 @@ SUBROUTINE cmfe_MeshElements_ElementOnBoundaryGetNumber(regionUserNumber,meshUse NULLIFY(region) NULLIFY(mesh) NULLIFY(meshElements) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_MeshGet(region,meshUserNumber,mesh,err,error,*999) CALL Mesh_MeshElementsGet(mesh,meshComponentNumber,meshElements,err,error,*999) CALL MeshTopology_ElementOnBoundaryGet(meshElements,userElementNumber,onBoundary,err,error,*999) @@ -45276,7 +45425,7 @@ SUBROUTINE cmfe_MeshElements_NodesGetNumber(regionUserNumber,meshUserNumber,mesh NULLIFY(region) NULLIFY(mesh) NULLIFY(meshElements) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_MeshGet(region,meshUserNumber,mesh,err,error,*999) CALL Mesh_MeshElementsGet(mesh,meshComponentNumber,meshElements,err,error,*999) CALL MESH_TOPOLOGY_ELEMENTS_ELEMENT_NODES_GET(globalElementNumber,meshElements,elementUserNodes,err,error,*999) @@ -45342,7 +45491,7 @@ SUBROUTINE cmfe_MeshElements_NodesSetNumber(regionUserNumber,meshUserNumber,mesh NULLIFY(region) NULLIFY(mesh) NULLIFY(meshElements) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_MeshGet(region,meshUserNumber,mesh,err,error,*999) CALL Mesh_MeshElementsGet(mesh,meshComponentNumber,meshElements,err,error,*999) CALL MESH_TOPOLOGY_ELEMENTS_ELEMENT_NODES_SET(globalElementNumber,meshElements,elementUserNodes,err,error,*999) @@ -45415,7 +45564,7 @@ SUBROUTINE cmfe_MeshElements_UserNodeVersionSetNumber(regionUserNumber,meshUserN NULLIFY(region) NULLIFY(mesh) NULLIFY(meshElements) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_MeshGet(region,meshUserNumber,mesh,err,error,*999) CALL Mesh_MeshElementsGet(mesh,meshComponentNumber,meshElements,err,error,*999) !!TODO: This check should be moved into the MeshElements_ElementNodeVersionSet routine @@ -45519,7 +45668,7 @@ SUBROUTINE cmfe_MeshElements_LocalElementNodeVersionSetNumber(regionUserNumber,m NULLIFY(region) NULLIFY(mesh) NULLIFY(meshElements) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_MeshGet(region,meshUserNumber,mesh,err,error,*999) CALL Mesh_MeshElementsGet(mesh,meshComponentNumber,meshElements,err,error,*999) CALL MeshElements_ElementNodeVersionSet(globalElementNumber,meshElements,versionNumber,derivativeNumber, & @@ -45592,7 +45741,7 @@ SUBROUTINE cmfe_MeshElements_UserNumberGetNumber(regionUserNumber,meshUserNumber NULLIFY(region) NULLIFY(mesh) NULLIFY(meshElements) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_MeshGet(region,meshUserNumber,mesh,err,error,*999) CALL Mesh_MeshElementsGet(mesh,meshComponentNumber,meshElements,err,error,*999) CALL MeshElements_ElementUserNumberGet(elementGlobalNumber,elementUserNumber,meshElements,err,error,*999) @@ -45659,7 +45808,7 @@ SUBROUTINE cmfe_MeshElements_UserNumberSetNumber(regionUserNumber,meshUserNumber NULLIFY(region) NULLIFY(mesh) NULLIFY(meshElements) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_MeshGet(region,meshUserNumber,mesh,err,error,*999) CALL Mesh_MeshElementsGet(mesh,meshComponentNumber,meshElements,err,error,*999) CALL MeshElements_ElementUserNumberSet(elementGlobalNumber,elementUserNumber,meshElements,err,error,*999) @@ -45725,7 +45874,7 @@ SUBROUTINE cmfe_MeshElements_UserNumbersAllSetNumber(regionUserNumber,meshUserNu NULLIFY(region) NULLIFY(mesh) NULLIFY(meshElements) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_MeshGet(region,meshUserNumber,mesh,err,error,*999) CALL Mesh_MeshElementsGet(mesh,meshComponentNumber,meshElements,err,error,*999) CALL MeshTopology_ElementsUserNumbersAllSet(meshElements,elementUserNumbers,err,error,*999) @@ -45793,7 +45942,7 @@ SUBROUTINE cmfe_Mesh_NodeExistsNumber( regionUserNumber, meshUserNumber, meshCom NULLIFY( region ) NULLIFY( mesh ) - CALL Region_Get( regionUserNumber, Region, err, error, *999 ) + CALL Region_Get(regions, regionUserNumber, Region, err, error, *999 ) CALL Region_MeshGet(region, meshUserNumber, Mesh, err, error, *999 ) CALL MeshTopology_NodeCheckExists(Mesh,meshComponentNumber,nodeUserNumber,nodeExists,meshNodeNumber,err,error,*999) @@ -45863,7 +46012,7 @@ SUBROUTINE cmfe_Mesh_ElementExistsNumber( regionUserNumber, meshUserNumber, mesh NULLIFY( region ) NULLIFY( mesh ) - CALL Region_Get( regionUserNumber, region, err, error, *999 ) + CALL Region_Get(regions, regionUserNumber, region, err, error, *999 ) CALL Region_MeshGet(region, meshUserNumber, mesh, err, error, *999 ) CALL MeshTopology_ElementCheckExists(mesh,meshComponentNumber,elementUserNumber,elementExists, & & meshElementNumber,err,error,*999) @@ -45931,7 +46080,7 @@ SUBROUTINE cmfe_Mesh_NodesGetNumber(regionUserNumber,meshUserNumber,meshComponen NULLIFY(region) NULLIFY(mesh) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_MeshGet(region,meshUserNumber,mesh,err,error,*999) CALL Mesh_MeshNodesGet(mesh,meshComponentNumber,meshNodes%meshNodes,err,error,*999) @@ -45997,7 +46146,7 @@ SUBROUTINE cmfe_MeshNodes_NodeOnBoundaryGetNumber(regionUserNumber,meshUserNumbe NULLIFY(region) NULLIFY(mesh) NULLIFY(meshNodes) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_MeshGet(region,meshUserNumber,mesh,err,error,*999) CALL Mesh_MeshNodesGet(mesh,meshComponentNumber,meshNodes,err,error,*999) CALL MeshTopology_NodeOnBoundaryGet(meshNodes,userNodeNumber,onBoundary,err,error,*999) @@ -46061,7 +46210,7 @@ SUBROUTINE cmfe_MeshNodes_NumberOfNodesGetNumber(regionUserNumber,meshUserNumber NULLIFY(region) NULLIFY(mesh) NULLIFY(meshNodes) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_MeshGet(region,meshUserNumber,mesh,err,error,*999) CALL Mesh_MeshNodesGet(mesh,meshComponentNumber,meshNodes,err,error,*999) CALL MeshTopology_NodesNumberOfNodesGet(meshNodes,numberOfNodes,err,error,*999) @@ -46125,7 +46274,7 @@ SUBROUTINE cmfe_MeshNodes_NumberOfDerivativesGetNumber(regionUserNumber,meshUser NULLIFY(region) NULLIFY(mesh) NULLIFY(meshNodes) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_MeshGet(region,meshUserNumber,mesh,err,error,*999) CALL Mesh_MeshNodesGet(mesh,meshComponentNumber,meshNodes,err,error,*999) CALL MeshTopology_NodeNumberOfDerivativesGet(meshNodes,userNodeNumber,numberOfDerivatives,err,error,*999) @@ -46191,7 +46340,7 @@ SUBROUTINE cmfe_MeshNodes_DerivativesGetNumber(regionUserNumber,meshUserNumber,m NULLIFY(region) NULLIFY(mesh) NULLIFY(meshNodes) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_MeshGet(region,meshUserNumber,mesh,err,error,*999) CALL Mesh_MeshNodesGet(mesh,meshComponentNumber,meshNodes,err,error,*999) CALL MeshTopology_NodeDerivativesGet(meshNodes,userNodeNumber,derivatives,err,error,*999) @@ -46258,7 +46407,7 @@ SUBROUTINE cmfe_MeshNodes_NumberOfVersionsGetNumber(regionUserNumber,meshUserNum NULLIFY(region) NULLIFY(mesh) NULLIFY(meshNodes) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_MeshGet(region,meshUserNumber,mesh,err,error,*999) CALL Mesh_MeshNodesGet(mesh,meshComponentNumber,meshNodes,err,error,*999) CALL MeshTopology_NodeNumberOfVersionsGet(meshnodes,derivativeNumber,userNodeNumber,numberOfVersions,err,error,*999) @@ -46872,7 +47021,7 @@ SUBROUTINE cmfe_Nodes_CreateFinishNumber(regionUserNumber,err) NULLIFY(region) NULLIFY(nodes) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_NodesGet(region,nodes,err,error,*999) CALL NODES_CREATE_FINISH(nodes,err,error,*999) @@ -46941,7 +47090,7 @@ SUBROUTINE cmfe_Nodes_CreateStartNumber(regionUserNumber,numberOfNodes,err) NULLIFY(region) NULLIFY(nodes) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL NODES_CREATE_START(region,numberOfNodes,nodes,err,error,*999) EXITS("cmfe_Nodes_CreateStartNumber") @@ -47033,7 +47182,7 @@ SUBROUTINE cmfe_Nodes_DestroyNumber(regionUserNumber,err) NULLIFY(region) NULLIFY(nodes) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_NodesGet(region,nodes,err,error,*999) CALL Nodes_Destroy(nodes,err,error,*999) @@ -47090,7 +47239,7 @@ SUBROUTINE cmfe_Nodes_NumberOfNodesGetNumber(regionUserNumber,numberOfNodes,err) NULLIFY(region) NULLIFY(nodes) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_NodesGet(region,nodes,err,error,*999) CALL NODES_NUMBER_OF_NODES_GET(nodes,numberOfNodes,err,error,*999) @@ -47149,7 +47298,7 @@ SUBROUTINE cmfe_Nodes_LabelGetCNumber(regionUserNumber,nodeGlobalNumber,label,er NULLIFY(region) NULLIFY(nodes) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_NodesGet(region,nodes,err,error,*999) CALL NODES_LABEL_GET(nodes,nodeGlobalNumber,label,err,error,*999) @@ -47209,7 +47358,7 @@ SUBROUTINE cmfe_Nodes_LabelGetVSNumber(regionUserNumber,nodeGlobalNumber,label,e NULLIFY(region) NULLIFY(nodes) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_NodesGet(region,nodes,err,error,*999) CALL NODES_LABEL_GET(nodes,nodeGlobalNumber,label,err,error,*999) @@ -47269,7 +47418,7 @@ SUBROUTINE cmfe_Nodes_LabelSetCNumber(regionUserNumber,nodeGlobalNumber,label,er NULLIFY(region) NULLIFY(nodes) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_NodesGet(region,nodes,err,error,*999) CALL NODES_LABEL_SET(nodes,nodeGlobalNumber,label,err,error,*999) @@ -47329,7 +47478,7 @@ SUBROUTINE cmfe_Nodes_LabelSetVSNumber(regionUserNumber,nodeGlobalNumber,label,e NULLIFY(region) NULLIFY(nodes) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_NodesGet(region,nodes,err,error,*999) CALL NODES_LABEL_SET(nodes,nodeGlobalNumber,label,err,error,*999) @@ -47389,7 +47538,7 @@ SUBROUTINE cmfe_Nodes_UserNumberGetNumber(regionUserNumber,nodeGlobalNumber,node NULLIFY(region) NULLIFY(nodes) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_NodesGet(region,nodes,err,error,*999) CALL NODES_USER_NUMBER_GET(nodes,nodeGlobalNumber,nodeUserNumber,err,error,*999) @@ -47449,7 +47598,7 @@ SUBROUTINE cmfe_Nodes_UserNumberSetNumber(regionUserNumber,nodeGlobalNumber,node NULLIFY(region) NULLIFY(nodes) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_NodesGet(region,nodes,err,error,*999) CALL NODES_USER_NUMBER_SET(nodes,nodeGlobalNumber,nodeUserNumber,err,error,*999) @@ -47508,7 +47657,7 @@ SUBROUTINE cmfe_Nodes_UserNumbersAllSetNumber(regionUserNumber,nodeUserNumbers,e NULLIFY(region) NULLIFY(nodes) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_NodesGet(region,nodes,err,error,*999) CALL NodesUserNumbersAllSet(nodes,nodeUserNumbers,err,error,*999) @@ -47565,7 +47714,7 @@ SUBROUTINE cmfe_Problem_CellMLEquationsCreateFinishNumber(problemUserNumber,err) ENTERS("cmfe_Problem_CellMLEquationsCreateFinishNumber",err,error,*999) NULLIFY(problem) - CALL Problem_Get(problemUserNumber,problem,err,error,*999) + CALL Problem_Get(problems,problemUserNumber,problem,err,error,*999) CALL PROBLEM_CELLML_EQUATIONS_CREATE_FINISH(problem,err,error,*999) #ifdef TAUPROF @@ -47631,7 +47780,7 @@ SUBROUTINE cmfe_Problem_CellMLEquationsCreateStartNumber(problemUserNumber,err) #endif NULLIFY(problem) - CALL Problem_Get(problemUserNumber,problem,err,error,*999) + CALL Problem_Get(problems,problemUserNumber,problem,err,error,*999) CALL PROBLEM_CELLML_EQUATIONS_CREATE_START(problem,err,error,*999) EXITS("cmfe_Problem_CellMLEquationsCreateStartNumber") @@ -47692,7 +47841,7 @@ SUBROUTINE cmfe_Problem_CellMLEquationsGetNumber0(problemUserNumber,controlLoopI ENTERS("cmfe_Problem_CellMLEquationsGetNumber0",err,error,*999) NULLIFY(problem) - CALL Problem_Get(problemUserNumber,problem,err,error,*999) + CALL Problem_Get(problems,problemUserNumber,problem,err,error,*999) CALL Problem_CellMLEquationsGet(problem,controlLoopIdentifier,solverIndex,cellMLEquations%cellmlEquations,err,error,*999) EXITS("cmfe_Problem_CellMLEquationsGetNumber0") @@ -47723,7 +47872,7 @@ SUBROUTINE cmfe_Problem_CellMLEquationsGetNumber1(problemUserNumber,controlLoopI ENTERS("cmfe_Problem_CellMLEquationsGetNumber1",err,error,*999) NULLIFY(problem) - CALL Problem_Get(problemUserNumber,problem,err,error,*999) + CALL Problem_Get(problems,problemUserNumber,problem,err,error,*999) CALL Problem_CellMLEquationsGet(problem,controlLoopIdentifiers,solverIndex,cellMLEquations%cellmlEquations,err,error,*999) EXITS("cmfe_Problem_CellMLEquationsGetNumber1") @@ -47809,7 +47958,7 @@ SUBROUTINE cmfe_Problem_CreateFinishNumber(problemUserNumber,err) ENTERS("cmfe_Problem_CreateFinishNumber",err,error,*999) NULLIFY(problem) - CALL Problem_Get(problemUserNumber,problem,err,error,*999) + CALL Problem_Get(problems,problemUserNumber,problem,err,error,*999) CALL PROBLEM_CREATE_FINISH(problem,err,error,*999) #ifdef TAUPROF @@ -47933,7 +48082,7 @@ SUBROUTINE cmfe_Problem_ControlLoopCreateFinishNumber(problemUserNumber,err) ENTERS("cmfe_Problem_ControlLoopCreateFinishNumber",err,error,*999) NULLIFY(problem) - CALL Problem_Get(problemUserNumber,problem,err,error,*999) + CALL Problem_Get(problems,problemUserNumber,problem,err,error,*999) CALL PROBLEM_CONTROL_LOOP_CREATE_FINISH(problem,err,error,*999) #ifdef TAUPROF @@ -47998,7 +48147,7 @@ SUBROUTINE cmfe_Problem_ControlLoopCreateStartNumber(problemUserNumber,err) #endif NULLIFY(problem) - CALL Problem_Get(problemUserNumber,problem,err,error,*999) + CALL Problem_Get(problems,problemUserNumber,problem,err,error,*999) CALL PROBLEM_CONTROL_LOOP_CREATE_START(problem,err,error,*999) EXITS("cmfe_Problem_ControlLoopCreateStartNumber") @@ -48055,7 +48204,7 @@ SUBROUTINE cmfe_Problem_ControlLoopDestroyNumber(problemUserNumber,err) ENTERS("cmfe_Problem_ControlLoopDestroyNumber",err,error,*999) NULLIFY(problem) - CALL Problem_Get(problemUserNumber,problem,err,error,*999) + CALL Problem_Get(problems,problemUserNumber,problem,err,error,*999) CALL PROBLEM_CONTROL_LOOP_DESTROY(problem,err,error,*999) EXITS("cmfe_Problem_ControlLoopDestroyNumber") @@ -48110,7 +48259,7 @@ SUBROUTINE cmfe_Problem_ControlLoopGetNumber0(problemUserNumber,controlLoopIdent ENTERS("cmfe_Problem_ControlLoopGetNumber0",err,error,*999) NULLIFY(problem) - CALL Problem_Get(problemUserNumber,problem,err,error,*999) + CALL Problem_Get(problems,problemUserNumber,problem,err,error,*999) CALL Problem_ControlLoopGet(problem,controlLoopIdentifier,controlLoop%controlLoop,err,error,*999) EXITS("cmfe_Problem_ControlLoopGetNumber0") @@ -48140,7 +48289,7 @@ SUBROUTINE cmfe_Problem_ControlLoopGetNumber1(problemUserNumber,controlLoopIdent ENTERS("cmfe_Problem_ControlLoopGetNumber1",err,error,*999) NULLIFY(problem) - CALL Problem_Get(problemUserNumber,problem,err,error,*999) + CALL Problem_Get(problems,problemUserNumber,problem,err,error,*999) CALL Problem_ControlLoopGet(problem,controlLoopIdentifiers,controlLoop%controlLoop,err,error,*999) EXITS("cmfe_Problem_ControlLoopGetNumber1") @@ -48222,7 +48371,7 @@ SUBROUTINE cmfe_Problem_DestroyNumber(problemUserNumber,err) ENTERS("cmfe_Problem_DestroyNumber",err,error,*999) NULLIFY(problem) - CALL Problem_Get(problemUserNumber,problem,err,error,*999) + CALL Problem_Get(problems,problemUserNumber,problem,err,error,*999) CALL Problem_Destroy(problem,err,error,*999) EXITS("cmfe_Problem_DestroyNumber") @@ -48279,7 +48428,7 @@ SUBROUTINE cmfe_Problem_SolveNumber(problemUserNumber,err) #endif NULLIFY(problem) - CALL Problem_Get(problemUserNumber,problem,err,error,*999) + CALL Problem_Get(problems,problemUserNumber,problem,err,error,*999) CALL Problem_Solve(problem,err,error,*999) #ifdef TAUPROF @@ -48347,7 +48496,7 @@ SUBROUTINE cmfe_Problem_SolverGetNumber0(problemUserNumber,controlLoopIdentifier ENTERS("cmfe_Problem_SolverGetNumber0",err,error,*999) NULLIFY(problem) - CALL Problem_Get(problemUserNumber,problem,err,error,*999) + CALL Problem_Get(problems,problemUserNumber,problem,err,error,*999) CALL Problem_SolverGet(problem,controlLoopIdentifier,solverIndex,solver%solver,err,error,*999) EXITS("cmfe_Problem_SolverGetNumber0") @@ -48379,7 +48528,7 @@ SUBROUTINE cmfe_Problem_SolverGetNumber1(problemUserNumber,controlLoopIdentifier ENTERS("cmfe_Problem_SolverGetNumber1",err,error,*999) NULLIFY(problem) - CALL Problem_Get(problemUserNumber,problem,err,error,*999) + CALL Problem_Get(problems,problemUserNumber,problem,err,error,*999) CALL Problem_SolverGet(problem,controlLoopIdentifiers,solverIndex,solver%solver,err,error,*999) EXITS("cmfe_Problem_SolverGetNumber1") @@ -48469,7 +48618,7 @@ SUBROUTINE cmfe_SolverEquations_BoundaryConditionsAnalyticNumber0(problemUserNum NULLIFY(problem) NULLIFY(solverEquations) NULLIFY(boundaryConditions) - CALL Problem_Get(problemUserNumber,problem,err,error,*999) + CALL Problem_Get(problems,problemUserNumber,problem,err,error,*999) CALL Problem_SolverEquationsGet(problem,controlLoopIdentifier,solverIndex,solverEquations,err,error,*999) CALL Problem_SolverEquationsBoundaryConditionsAnalytic(solverEquations,err,error,*999) @@ -48505,7 +48654,7 @@ SUBROUTINE cmfe_SolverEquations_BoundaryConditionsAnalyticNumber1(problemUserNum NULLIFY(problem) NULLIFY(solverEquations) NULLIFY(boundaryConditions) - CALL Problem_Get(problemUserNumber,problem,err,error,*999) + CALL Problem_Get(problems,problemUserNumber,problem,err,error,*999) CALL Problem_SolverEquationsGet(problem,controlLoopIdentifiers,solverIndex,solverEquations,err,error,*999) CALL Problem_SolverEquationsBoundaryConditionsAnalytic(solverEquations,err,error,*999) @@ -48560,7 +48709,7 @@ SUBROUTINE cmfe_Problem_SolverEquationsCreateFinishNumber(problemUserNumber,err) ENTERS("cmfe_Problem_SolverEquationsCreateFinishNumber",err,error,*999) NULLIFY(problem) - CALL Problem_Get(problemUserNumber,problem,err,error,*999) + CALL Problem_Get(problems,problemUserNumber,problem,err,error,*999) CALL PROBLEM_SOLVER_EQUATIONS_CREATE_FINISH(problem,err,error,*999) #ifdef TAUPROF @@ -48626,7 +48775,7 @@ SUBROUTINE cmfe_Problem_SolverEquationsCreateStartNumber(problemUserNumber,err) #endif NULLIFY(problem) - CALL Problem_Get(problemUserNumber,problem,err,error,*999) + CALL Problem_Get(problems,problemUserNumber,problem,err,error,*999) CALL PROBLEM_SOLVER_EQUATIONS_CREATE_START(problem,err,error,*999) EXITS("cmfe_Problem_SolverEquationsCreateStartNumber") @@ -48684,7 +48833,7 @@ SUBROUTINE cmfe_Problem_SolverEquationsDestroyNumber(problemUserNumber,err) ENTERS("cmfe_Problem_SolverEquationsDestroyNumber",err,error,*999) NULLIFY(problem) - CALL Problem_Get(problemUserNumber,problem,err,error,*999) + CALL Problem_Get(problems,problemUserNumber,problem,err,error,*999) CALL PROBLEM_SOLVER_EQUATIONS_DESTROY(problem,err,error,*999) EXITS("cmfe_Problem_SolverEquationsDestroyNumber") @@ -48740,7 +48889,7 @@ SUBROUTINE cmfe_Problem_SolverEquationsGetNumber0(problemUserNumber,controlLoopI ENTERS("cmfe_Problem_SolverEquationsGetNumber0",err,error,*999) NULLIFY(problem) - CALL Problem_Get(problemUserNumber,problem,err,error,*999) + CALL Problem_Get(problems,problemUserNumber,problem,err,error,*999) CALL Problem_SolverEquationsGet(problem,controlLoopIdentifier,solverIndex,solverEquations%solverEquations,err,error,*999) EXITS("cmfe_Problem_SolverEquationsGetNumber0") @@ -48771,7 +48920,7 @@ SUBROUTINE cmfe_Problem_SolverEquationsGetNumber1(problemUserNumber,controlLoopI ENTERS("cmfe_Problem_SolverEquationsGetNumber1",err,error,*999) NULLIFY(problem) - CALL Problem_Get(problemUserNumber,problem,err,error,*999) + CALL Problem_Get(problems,problemUserNumber,problem,err,error,*999) CALL Problem_SolverEquationsGet(problem,controlLoopIdentifiers,solverIndex,solverEquations%solverEquations,err,error,*999) EXITS("cmfe_Problem_SolverEquationsGetNumber1") @@ -48857,7 +49006,7 @@ SUBROUTINE cmfe_Problem_SolversCreateFinishNumber(problemUserNumber,err) ENTERS("cmfe_Problem_SolversCreateFinishNumber",err,error,*999) NULLIFY(problem) - CALL Problem_Get(problemUserNumber,problem,err,error,*999) + CALL Problem_Get(problems,problemUserNumber,problem,err,error,*999) CALL PROBLEM_SOLVERS_CREATE_FINISH(problem,err,error,*999) #ifdef TAUPROF @@ -48922,7 +49071,7 @@ SUBROUTINE cmfe_Problem_SolversCreateStartNumber(problemUserNumber,err) #endif NULLIFY(problem) - CALL Problem_Get(problemUserNumber,problem,err,error,*999) + CALL Problem_Get(problems,problemUserNumber,problem,err,error,*999) CALL PROBLEM_SOLVERS_CREATE_START(problem,err,error,*999) EXITS("cmfe_Problem_SolversCreateStartNumber") @@ -48979,7 +49128,7 @@ SUBROUTINE cmfe_Problem_SolversDestroyNumber(problemUserNumber,err) ENTERS("cmfe_Problem_SolversDestroyNumber",err,error,*999) NULLIFY(problem) - CALL Problem_Get(problemUserNumber,problem,err,error,*999) + CALL Problem_Get(problems,problemUserNumber,problem,err,error,*999) CALL PROBLEM_SOLVERS_DESTROY(problem,err,error,*999) EXITS("cmfe_Problem_SolversDestroyNumber") @@ -49033,7 +49182,7 @@ SUBROUTINE cmfe_Problem_SpecificationGetNumber(problemUserNumber,problemSpecific ENTERS("cmfe_Problem_SpecificationGetNumber",err,error,*999) NULLIFY(problem) - CALL Problem_Get(problemUserNumber,problem,err,error,*999) + CALL Problem_Get(problems,problemUserNumber,problem,err,error,*999) CALL Problem_SpecificationGet(problem,problemSpecification,err,error,*999) EXITS("cmfe_Problem_SpecificationGetNumber") @@ -49089,7 +49238,7 @@ SUBROUTINE cmfe_Problem_SpecificationSizeGetNumber(problemUserNumber,specificati ENTERS("cmfe_Problem_SpecificationSizeGetNumber",err,error,*999) NULLIFY(problem) - CALL Problem_Get(problemUserNumber,problem,err,error,*999) + CALL Problem_Get(problems,problemUserNumber,problem,err,error,*999) CALL Problem_SpecificationSizeGet(problem,specificationSize,err,error,*999) EXITS("cmfe_Problem_SpecificationSizeGetNumber") @@ -49146,7 +49295,7 @@ SUBROUTINE cmfe_Problem_WorkGroupSetNumber(problemUserNumber,workGroupUserNumber NULLIFY(problem) NULLIFY(workGroup) - CALL Problem_Get(problemUserNumber,problem,err,error,*999) + CALL Problem_Get(problems,problemUserNumber,problem,err,error,*999) CALL WorkGroup_Get(computationEnvironment,workGroupUserNumber,workGroup,err,error,*999) CALL Problem_WorkGroupSet(problem,workGroup,err,error,*999) @@ -49207,7 +49356,7 @@ SUBROUTINE cmfe_Region_CoordinateSystemGetNumber(regionUserNumber,coordinateSyst NULLIFY(region) NULLIFY(coordinateSystem) - CALL Region_Get(regionUserNumber,region,err,error,*999) + CALL Region_Get(regions,regionUserNumber,region,err,error,*999) CALL Region_CoordinateSystemGet(region,coordinateSystem,err,error,*999) coordinateSystemUserNumber = coordinateSystem%USER_NUMBER @@ -49250,23 +49399,33 @@ END SUBROUTINE cmfe_Region_CoordinateSystemGetObj ! !>Sets/changes the coordinate system for a region identified by an user number. - SUBROUTINE cmfe_Region_CoordinateSystemSetNumber(regionUserNumber,coordinateSystemUserNumber,err) + SUBROUTINE cmfe_Region_CoordinateSystemSetNumber(contextUserNumber,regionUserNumber,coordinateSystemUserNumber,err) !DLLEXPORT(cmfe_Region_CoordinateSystemSetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns a pointer to the context for a problem. + SUBROUTINE Problem_ContextGet(problem,context,err,error,*) + + !Argument variables + TYPE(PROBLEM_TYPE), POINTER :: problem !problem%problems%context + IF(.NOT.ASSOCIATED(context)) THEN + localError="The context is not associated for the problems for problem number "// & + & TRIM(NumberToVString(problem%USER_NUMBER,"*",err,error))//"." + CALL FlagError(localError,err,error,*999) + ENDIF + + EXITS("Problem_ContextGet") + RETURN +999 NULLIFY(context) +998 ERRORSEXITS("Problem_ContextGet",err,error) + RETURN 1 + + END SUBROUTINE Problem_ContextGet + + ! + !================================================================================================================================ + ! + !>Returns a pointer to the control loop for a problem. \see OpenCMISS::Iron::cmfe_Problem_ControlLoopGet SUBROUTINE Problem_ControlLoopGet0(problem,controlLoopIdentifier,controlLoop,err,error,*) @@ -304,9 +343,10 @@ END SUBROUTINE Problem_ControlLoopRootGet ! !>Finds and returns a pointer to the problem with the given user number. - SUBROUTINE Problem_Get(userNumber,problem,err,error,*) + SUBROUTINE Problem_Get(problems,userNumber,problem,err,error,*) !Argument variables + TYPE(ProblemsType), POINTER :: problems !Finds and returns a pointer to the problem identified by a user number. If no problem with that user number exists problem is left nullified. - SUBROUTINE Problem_UserNumberFind(userNumber,problem,err,error,*) + SUBROUTINE Problem_UserNumberFind(problems,userNumber,problem,err,error,*) !Argument variables + TYPE(ProblemsType), POINTER :: problems !problems%problems(problemIdx)%ptr diff --git a/src/problem_routines.f90 b/src/problem_routines.f90 index 726df9cd..679ca9f3 100644 --- a/src/problem_routines.f90 +++ b/src/problem_routines.f90 @@ -90,11 +90,11 @@ MODULE PROBLEM_ROUTINES !Interfaces - PUBLIC PROBLEMS_INITIALISE,PROBLEMS_FINALISE + PUBLIC Problems_Initialise,Problems_Finalise PUBLIC PROBLEM_CELLML_EQUATIONS_CREATE_START,PROBLEM_CELLML_EQUATIONS_CREATE_FINISH - PUBLIC PROBLEM_CREATE_START,PROBLEM_CREATE_FINISH,PROBLEM_DESTROY + PUBLIC PROBLEM_CREATE_START,PROBLEM_CREATE_FINISH,Problem_Destroy PUBLIC Problem_SpecificationGet,Problem_SpecificationSizeGet @@ -661,43 +661,46 @@ END SUBROUTINE PROBLEM_CONTROL_LOOP_SOLVE ! !>Finishes the process of creating a problem. \see OpenCMISS::cmfe_Problem_CreateFinish - SUBROUTINE PROBLEM_CREATE_FINISH(PROBLEM,err,error,*) + SUBROUTINE PROBLEM_CREATE_FINISH(problem,err,error,*) !Argument variables - TYPE(PROBLEM_TYPE), POINTER :: PROBLEM !PROBLEMS + NULLIFY(context) + CALL Problems_ContextGet(problems,context,err,error,*999) + NULLIFY(computationEnvironment) + CALL Context_ComputationEnvironment(context,computationEnvironment,err,error,*999) NULLIFY(worldWorkGroup) CALL ComputationEnvironment_WorldWorkGroupGet(computationEnvironment,worldWorkGroup,err,error,*999) NEW_PROBLEM%workGroup=>worldWorkGroup @@ -769,15 +779,15 @@ SUBROUTINE PROBLEM_CREATE_START(USER_NUMBER,PROBLEM_SPECIFICATION,PROBLEM,err,er !Finalise the problem setup information CALL PROBLEM_SETUP_FINALISE(PROBLEM_SETUP_INFO,err,error,*999) !Add new problem into list of problems - ALLOCATE(NEW_PROBLEMS(PROBLEMS%NUMBER_OF_PROBLEMS+1),STAT=ERR) + ALLOCATE(NEW_PROBLEMS(PROBLEMS%numberOfProblems+1),STAT=ERR) IF(ERR/=0) CALL FlagError("Could not allocate new problems.",err,error,*999) - DO problem_idx=1,PROBLEMS%NUMBER_OF_PROBLEMS + DO problem_idx=1,PROBLEMS%numberOfProblems NEW_PROBLEMS(problem_idx)%PTR=>PROBLEMS%PROBLEMS(problem_idx)%PTR ENDDO !problem_idx - NEW_PROBLEMS(PROBLEMS%NUMBER_OF_PROBLEMS+1)%PTR=>NEW_PROBLEM + NEW_PROBLEMS(PROBLEMS%numberOfProblems+1)%PTR=>NEW_PROBLEM IF(ASSOCIATED(PROBLEMS%PROBLEMS)) DEALLOCATE(PROBLEMS%PROBLEMS) PROBLEMS%PROBLEMS=>NEW_PROBLEMS - PROBLEMS%NUMBER_OF_PROBLEMS=PROBLEMS%NUMBER_OF_PROBLEMS+1 + PROBLEMS%numberOfProblems=PROBLEMS%numberOfProblems+1 PROBLEM=>NEW_PROBLEM ENDIF ENDIF @@ -793,7 +803,7 @@ END SUBROUTINE PROBLEM_CREATE_START ! !>Destroys a problem. \see OpenCMISS::cmfe_Problem_Destroy - SUBROUTINE PROBLEM_DESTROY(PROBLEM,err,error,*) + SUBROUTINE Problem_Destroy(PROBLEM,err,error,*) !Argument variables TYPE(PROBLEM_TYPE), POINTER :: PROBLEM !1) THEN - ALLOCATE(NEW_PROBLEMS(PROBLEMS%NUMBER_OF_PROBLEMS-1),STAT=ERR) + IF(PROBLEMS%numberOfProblems>1) THEN + ALLOCATE(NEW_PROBLEMS(PROBLEMS%numberOfProblems-1),STAT=ERR) IF(ERR/=0) CALL FlagError("Could not allocate new problems.",err,error,*999) - DO problem_idx=1,PROBLEMS%NUMBER_OF_PROBLEMS + DO problem_idx=1,PROBLEMS%numberOfProblems IF(problem_idxPROBLEMS%PROBLEMS(problem_idx)%PTR ELSE IF(problem_idx>problem_position) THEN @@ -829,10 +842,10 @@ SUBROUTINE PROBLEM_DESTROY(PROBLEM,err,error,*) ENDDO !problem_idx DEALLOCATE(PROBLEMS%PROBLEMS) PROBLEMS%PROBLEMS=>NEW_PROBLEMS - PROBLEMS%NUMBER_OF_PROBLEMS=PROBLEMS%NUMBER_OF_PROBLEMS-1 + PROBLEMS%numberOfProblems=PROBLEMS%numberOfProblems-1 ELSE DEALLOCATE(PROBLEMS%PROBLEMS) - PROBLEMS%NUMBER_OF_PROBLEMS=0 + PROBLEMS%numberOfProblems=0 ENDIF ELSE @@ -842,12 +855,13 @@ SUBROUTINE PROBLEM_DESTROY(PROBLEM,err,error,*) CALL FlagError("Problem is not associated.",err,error,*998) ENDIF - EXITS("PROBLEM_DESTROY") + EXITS("Problem_Destroy") RETURN 999 IF(ASSOCIATED(NEW_PROBLEMS)) DEALLOCATE(NEW_PROBLEMS) -998 ERRORSEXITS("PROBLEM_DESTROY",err,error) - RETURN 1 - END SUBROUTINE PROBLEM_DESTROY +998 ERRORSEXITS("Problem_Destroy",err,error) + RETURN 1 + + END SUBROUTINE Problem_Destroy ! !================================================================================================================================ @@ -3781,47 +3795,64 @@ END SUBROUTINE Problem_WorkGroupSet ! !>Finalises all problems and deallocates all memory. - SUBROUTINE PROBLEMS_FINALISE(err,error,*) + SUBROUTINE Problems_Finalise(problems,err,error,*) !Argument variables + TYPE(ProblemsType), POINTER :: problems !0) - CALL PROBLEM_DESTROY(PROBLEMS%PROBLEMS(1)%PTR,err,error,*999) - ENDDO !problem_idx + IF(ASSOCIATED(problems)) THEN + DO WHILE(problems%numberOfProblems>0) + CALL Problem_Destroy(problems%problems(1)%ptr,err,error,*999) + ENDDO !problemIdx + DEALLOCATE(problems) + ENDIF - EXITS("PROBLEMS_FINALISE") + EXITS("Problems_Finalise") RETURN -999 ERRORSEXITS("PROBLEMS_FINALISE",err,error) - RETURN 1 - END SUBROUTINE PROBLEMS_FINALISE +999 ERRORSEXITS("Problems_Finalise",err,error) + RETURN 1 + + END SUBROUTINE Problems_Finalise ! !================================================================================================================================ ! - !>Intialises all problems. - SUBROUTINE PROBLEMS_INITIALISE(err,error,*) + !>Intialises all problems for a context. + SUBROUTINE Problems_Initialise(context,err,error,*) !Argument variables + TYPE(ContextType), POINTER :: context !context + context%problems%numberOfProblems=0 + NULLIFY(context%problems%problems) - EXITS("PROBLEMS_INITIALISE") + EXITS("Problems_Initialise") RETURN -999 ERRORSEXITS("PROBLEMS_INITIALISE",err,error) - RETURN 1 - END SUBROUTINE PROBLEMS_INITIALISE +999 CALL Problems_Finalise(context%problems,dummyErr,dummyError,*998) +998 ERRORSEXITS("Problems_Initialise",err,error) + RETURN 1 + + END SUBROUTINE Problems_Initialise ! !================================================================================================================================ @@ -4271,8 +4302,10 @@ SUBROUTINE Problem_SolverConvergenceTestPetsc(snes,iterationNumber,xnorm,gnorm,f USE BaseRoutines USE CmissPetsc USE CmissPetscTypes + USE Constants USE DistributedMatrixVector USE INPUT_OUTPUT + USE ISO_VARYING_STRING USE KINDS USE PROBLEM_ROUTINES USE SOLVER_ROUTINES @@ -4428,8 +4461,10 @@ SUBROUTINE Problem_SolverDAECellMLRHSPetsc(ts,time,states,rates,ctx,err) USE BaseRoutines USE CmissPetscTypes USE CmissPetsc + USE ISO_VARYING_STRING + USE Kinds USE PROBLEM_ROUTINES - USE TYPES + USE Types IMPLICIT NONE diff --git a/src/profiling_routines.f90 b/src/profiling_routines.f90 index 8523a341..958650d3 100644 --- a/src/profiling_routines.f90 +++ b/src/profiling_routines.f90 @@ -45,11 +45,12 @@ MODULE ProfilingRoutines USE BaseRoutines + USE Constants USE INPUT_OUTPUT + USE ISO_VARYING_STRING USE Kinds USE Strings USE Types - USE ISO_VARYING_STRING #include "macros.h" diff --git a/src/reaction_diffusion_IO_routines.f90 b/src/reaction_diffusion_IO_routines.f90 index 384c5f49..40c3fc43 100755 --- a/src/reaction_diffusion_IO_routines.f90 +++ b/src/reaction_diffusion_IO_routines.f90 @@ -52,10 +52,11 @@ MODULE REACTION_DIFFUSION_IO_ROUTINES USE EquationsSetConstants USE FIELD_ROUTINES USE FieldAccessRoutines - USE TYPES USE INPUT_OUTPUT + USE ISO_VARYING_STRING USE KINDS USE MESH_ROUTINES + USE TYPES #ifndef NOMPIMOD USE MPI @@ -89,8 +90,9 @@ SUBROUTINE REACTION_DIFFUSION_IO_WRITE_CMGUI(REGION, EQUATIONS_SET_GLOBAL_NUMBER LOGICAL, INTENT(IN) :: exportExelem !Returns a pointer to the context for a region. + SUBROUTINE Region_ContextGet(region,context,err,error,*) + + !Argument variables + TYPE(REGION_TYPE), POINTER :: region !region%regions%context + IF(.NOT.ASSOCIATED(context)) THEN + localError="The context is not associated for the regions for region number "// & + & TRIM(NumberToVString(region%USER_NUMBER,"*",err,error))//"." + CALL FlagError(localError,err,error,*999) + ENDIF + + EXITS("Region_ContextGet") + RETURN +999 NULLIFY(context) +998 ERRORSEXITS("Region_ContextGet",err,error) + RETURN 1 + + END SUBROUTINE Region_ContextGet + + ! !================================================================================================================================ ! @@ -350,9 +389,10 @@ END SUBROUTINE Region_GeneratedMeshGet ! !>Finds and returns a pointer to the region with the given user number. - SUBROUTINE Region_Get(userNumber,region,err,error,*) + SUBROUTINE Region_Get(regions,userNumber,region,err,error,*) !Argument variables + TYPE(RegionsType), POINTER :: regions !Finds and returns a pointer to the region with the given user number. If no region with that number exists region is left nullified. - SUBROUTINE Region_UserNumberFind(userNumber,region,err,error,*) + SUBROUTINE Region_UserNumberFind(regions,userNumber,region,err,error,*) !Argument variables + TYPE(RegionsType), POINTER :: regions !regions%WORLD_REGION + IF(.NOT.ASSOCIATED(regions)) CALL FlagError("Regions is not associated.",err,error,*999) + + worldRegion=>regions%worldRegion IF(.NOT.ASSOCIATED(worldRegion)) CALL FlagError("World region is not associated.",err,error,*999) NULLIFY(region) diff --git a/src/region_routines.f90 b/src/region_routines.f90 index 6885bf03..a0e34a83 100755 --- a/src/region_routines.f90 +++ b/src/region_routines.f90 @@ -96,9 +96,7 @@ MODULE REGION_ROUTINES PUBLIC REGION_LABEL_GET,REGION_LABEL_SET - PUBLIC REGION_USER_NUMBER_TO_REGION - - PUBLIC REGIONS_INITIALISE,REGIONS_FINALISE + PUBLIC Regions_Initialise,Regions_Finalise CONTAINS @@ -107,38 +105,38 @@ MODULE REGION_ROUTINES ! !>Sets the coordinate system of region. \see OPENCMISS::Iron::cmfe_RegionCoordinateSystemSet - SUBROUTINE REGION_COORDINATE_SYSTEM_SET(REGION,COORDINATE_SYSTEM,ERR,ERROR,*) + SUBROUTINE REGION_COORDINATE_SYSTEM_SET(REGION,COORDINATE_SYSTEM,err,error,*) !Argument variables TYPE(REGION_TYPE), POINTER :: REGION !COORDINATE_SYSTEM ELSE - CALL FlagError("Coordinate system has not been finished.",ERR,ERROR,*999) + CALL FlagError("Coordinate system has not been finished.",err,error,*999) ENDIF ELSE - CALL FlagError("Coordinate system is not associated.",ERR,ERROR,*999) + CALL FlagError("Coordinate system is not associated.",err,error,*999) ENDIF ENDIF ELSE - CALL FlagError("Region is not associated.",ERR,ERROR,*999) + CALL FlagError("Region is not associated.",err,error,*999) ENDIF EXITS("REGION_COORDINATE_SYSTEM_SET") RETURN -999 ERRORSEXITS("REGION_COORDINATE_SYSTEM_SET",ERR,ERROR) +999 ERRORSEXITS("REGION_COORDINATE_SYSTEM_SET",err,error) RETURN 1 END SUBROUTINE REGION_COORDINATE_SYSTEM_SET @@ -147,40 +145,40 @@ END SUBROUTINE REGION_COORDINATE_SYSTEM_SET ! !>Finishes the creation of a region. \see OPENCMISS::Iron::cmfe_RegionCreateFinish - SUBROUTINE REGION_CREATE_FINISH(REGION,ERR,ERROR,*) + SUBROUTINE REGION_CREATE_FINISH(REGION,err,error,*) !Argument variables TYPE(REGION_TYPE), POINTER :: REGION !- PARENT_REGION: global region !>- NUMBER_OF_SUB_REGIONS: 0 !>- SUB_REGIONS: 0 region - SUBROUTINE REGION_CREATE_START(USER_NUMBER,PARENT_REGION,REGION,ERR,ERROR,*) + SUBROUTINE REGION_CREATE_START(USER_NUMBER,PARENT_REGION,REGION,err,error,*) !Argument variables INTEGER(INTG), INTENT(IN) :: USER_NUMBER !PARENT_REGION%regions !CPB 21/02/07 The vstring operation crashes the AIX compiler so put a CHAR() etc. around it. - !REGION%LABEL="Region "//NUMBER_TO_VSTRING(USER_NUMBER,"*",ERR,ERROR) - LOCAL_STRING="Region "//NUMBER_TO_VSTRING(USER_NUMBER,"*",ERR,ERROR) + !REGION%LABEL="Region "//NUMBER_TO_VSTRING(USER_NUMBER,"*",err,error) + LOCAL_STRING="Region "//NUMBER_TO_VSTRING(USER_NUMBER,"*",err,error) REGION%LABEL=CHAR(LOCAL_STRING) - IF(ERR/=0) GOTO 999 + IF(err/=0) GOTO 999 REGION%COORDINATE_SYSTEM=>PARENT_REGION%COORDINATE_SYSTEM !Adjust the parent region to include this new daughter - ALLOCATE(NEW_SUB_REGIONS(PARENT_REGION%NUMBER_OF_SUB_REGIONS+1),STAT=ERR) - IF(ERR/=0) CALL FlagError("Could not allocate new sub-regions.",ERR,ERROR,*999) + ALLOCATE(NEW_SUB_REGIONS(PARENT_REGION%NUMBER_OF_SUB_REGIONS+1),STAT=err) + IF(err/=0) CALL FlagError("Could not allocate new sub-regions.",err,error,*999) DO region_idx=1,PARENT_REGION%NUMBER_OF_SUB_REGIONS NEW_SUB_REGIONS(region_idx)%PTR=>PARENT_REGION%SUB_REGIONS(region_idx)%PTR ENDDO !region_no @@ -255,13 +257,13 @@ SUBROUTINE REGION_CREATE_START(USER_NUMBER,PARENT_REGION,REGION,ERR,ERROR,*) !Set the new regions parent region to the parent region REGION%PARENT_REGION=>PARENT_REGION ELSE - CALL FlagError("Parent region does not have an associated coordinate system.",ERR,ERROR,*997) + CALL FlagError("Parent region does not have an associated coordinate system.",err,error,*997) ENDIF ELSE - CALL FlagError("Parent region has not been finished.",ERR,ERROR,*997) + CALL FlagError("Parent region has not been finished.",err,error,*997) ENDIF ELSE - CALL FlagError("Parent region is not associated.",ERR,ERROR,*997) + CALL FlagError("Parent region is not associated.",err,error,*997) ENDIF ENDIF ENDIF @@ -270,7 +272,7 @@ SUBROUTINE REGION_CREATE_START(USER_NUMBER,PARENT_REGION,REGION,ERR,ERROR,*) RETURN 999 CALL REGION_FINALISE(REGION,DUMMY_ERR,DUMMY_ERROR,*998) 998 IF(ASSOCIATED(NEW_SUB_REGIONS)) DEALLOCATE(NEW_SUB_REGIONS) -997 ERRORSEXITS("REGION_CREATE_START",ERR,ERROR) +997 ERRORSEXITS("REGION_CREATE_START",err,error) RETURN 1 END SUBROUTINE REGION_CREATE_START @@ -279,21 +281,22 @@ END SUBROUTINE REGION_CREATE_START ! !>Destroys a region given by USER_NUMBER and all sub-regions under it. \todo create destroy by pointer method. \see OpenCMISS::Iron::cmfe_Region_Destroy - RECURSIVE SUBROUTINE REGION_DESTROY_NUMBER(USER_NUMBER,ERR,ERROR,*) + RECURSIVE SUBROUTINE REGION_DESTROY_NUMBER(regions,USER_NUMBER,err,error,*) !Argument variables + TYPE(RegionsType), POINTER :: regions !1) THEN !If the parent region has more than one sub regions then remove this instance from its sub-regions list - ALLOCATE(NEW_SUB_REGIONS(REGION%PARENT_REGION%NUMBER_OF_SUB_REGIONS-1),STAT=ERR) - IF(ERR/=0) CALL FlagError("Could not allocate new sub-regions.",ERR,ERROR,*999) + ALLOCATE(NEW_SUB_REGIONS(REGION%PARENT_REGION%NUMBER_OF_SUB_REGIONS-1),STAT=err) + IF(err/=0) CALL FlagError("Could not allocate new sub-regions.",err,error,*999) count=0 DO nr=1,REGION%PARENT_REGION%NUMBER_OF_SUB_REGIONS IF(REGION%PARENT_REGION%SUB_REGIONS(nr)%PTR%USER_NUMBER/=REGION%USER_NUMBER) THEN @@ -321,25 +324,25 @@ RECURSIVE SUBROUTINE REGION_DESTROY_NUMBER(USER_NUMBER,ERR,ERROR,*) IF(ASSOCIATED(REGION%PARENT_REGION%SUB_REGIONS)) DEALLOCATE(REGION%PARENT_REGION%SUB_REGIONS) REGION%PARENT_REGION%SUB_REGIONS=>NEW_SUB_REGIONS !Finalise the region - CALL REGION_FINALISE(REGION,ERR,ERROR,*999) + CALL REGION_FINALISE(REGION,err,error,*999) ELSE - CALL FlagError("Parent region is not associated.",ERR,ERROR,*999) + CALL FlagError("Parent region is not associated.",err,error,*999) ENDIF ELSE !Recursively delete sub regions first DO WHILE(REGION%NUMBER_OF_SUB_REGIONS>0) - CALL REGION_DESTROY_NUMBER(REGION%SUB_REGIONS(1)%PTR%USER_NUMBER,ERR,ERROR,*999) + CALL REGION_DESTROY_NUMBER(regions,REGION%SUB_REGIONS(1)%PTR%USER_NUMBER,err,error,*999) ENDDO !Now delete this instance - CALL REGION_DESTROY_NUMBER(REGION%USER_NUMBER,ERR,ERROR,*999) + CALL REGION_DESTROY_NUMBER(regions,REGION%USER_NUMBER,err,error,*999) ENDIF ELSE - CALL FlagError("Region number does not exist.",ERR,ERROR,*999) + CALL FlagError("Region number does not exist.",err,error,*999) ENDIF EXITS("REGION_DESTROY_NUMBER") RETURN -999 ERRORSEXITS("REGION_DESTROY_NUMBER",ERR,ERROR) +999 ERRORSEXITS("REGION_DESTROY_NUMBER",err,error) RETURN 1 END SUBROUTINE REGION_DESTROY_NUMBER @@ -348,27 +351,30 @@ END SUBROUTINE REGION_DESTROY_NUMBER ! !>Destroys a region identified by a pointer and all sub-regions under it. \see OPENCMISS::Iron::cmfe_RegionDestroy - SUBROUTINE REGION_DESTROY(REGION,ERR,ERROR,*) + SUBROUTINE REGION_DESTROY(REGION,err,error,*) !Argument variables TYPE(REGION_TYPE), POINTER :: REGION !Finalises a region and deallocates all memory - SUBROUTINE REGION_FINALISE(REGION,ERR,ERROR,*) + SUBROUTINE REGION_FINALISE(REGION,err,error,*) !Argument variables TYPE(REGION_TYPE), POINTER :: REGION !Initialises a region. - SUBROUTINE REGION_INITIALISE(REGION,ERR,ERROR,*) + SUBROUTINE REGION_INITIALISE(REGION,err,error,*) !Argument variables TYPE(REGION_TYPE), POINTER :: REGION !Returns the label of a region. \see OPENCMISS::Iron::cmfe_RegionLabelGet - SUBROUTINE REGION_LABEL_GET_C(REGION,LABEL,ERR,ERROR,*) + SUBROUTINE REGION_LABEL_GET_C(REGION,LABEL,err,error,*) !Argument variables TYPE(REGION_TYPE), POINTER :: REGION !Returns the label of a region. \see OPENCMISS::Iron::cmfe_RegionLabelGet - SUBROUTINE REGION_LABEL_GET_VS(REGION,LABEL,ERR,ERROR,*) + SUBROUTINE REGION_LABEL_GET_VS(REGION,LABEL,err,error,*) !Argument variables TYPE(REGION_TYPE), POINTER :: REGION !Sets the label of a region. \see OPENCMISS::Iron::cmfe_RegionLabelSet - SUBROUTINE REGION_LABEL_SET_C(REGION,LABEL,ERR,ERROR,*) + SUBROUTINE REGION_LABEL_SET_C(REGION,LABEL,err,error,*) !Argument variables TYPE(REGION_TYPE), POINTER :: REGION !Sets the label of a region. \see OPENCMISS::Iron::cmfe_RegionLabelSet - SUBROUTINE REGION_LABEL_SET_VS(REGION,LABEL,ERR,ERROR,*) + SUBROUTINE REGION_LABEL_SET_VS(REGION,LABEL,err,error,*) !Argument variables TYPE(REGION_TYPE), POINTER :: REGION !Finalises the regions and destroys any current regions. - SUBROUTINE REGIONS_FINALISE(ERR,ERROR,*) + SUBROUTINE Regions_Finalise(regions,err,error,*) !Argument variables - INTEGER(INTG), INTENT(OUT) :: ERR !0) - CALL REGION_DESTROY_NUMBER(REGIONS%WORLD_REGION%SUB_REGIONS(1)%PTR%USER_NUMBER,ERR,ERROR,*999) - ENDDO !region - !Destroy global region and deallocated any memory allocated in the global region - CALL REGION_FINALISE(REGIONS%WORLD_REGION,ERR,ERROR,*999) - NULLIFY(REGIONS%WORLD_REGION) + IF(ASSOCIATED(regions)) THEN + IF(ASSOCIATED(regions%worldRegion)) THEN + !Destroy any global region daughter regions first + DO WHILE(regions%worldRegion%NUMBER_OF_SUB_REGIONS>0) + CALL REGION_DESTROY_NUMBER(regions,regions%worldRegion%SUB_REGIONS(1)%PTR%USER_NUMBER,err,error,*999) + ENDDO !region + !Destroy global region and deallocated any memory allocated in the global region + CALL REGION_FINALISE(regions%worldRegion,err,error,*999) + ENDIF + DEALLOCATE(regions) ENDIF - EXITS("REGIONS_FINALISE") + EXITS("Regions_Finalise") RETURN -999 ERRORSEXITS("REGIONS_FINALISE",ERR,ERROR) +999 ERRORSEXITS("Regions_Finalise",err,error) RETURN 1 - END SUBROUTINE REGIONS_FINALISE + + END SUBROUTINE Regions_Finalise ! !================================================================================================================================ ! - !>Initialises the regions and creates the global world region. - SUBROUTINE REGIONS_INITIALISE(WORLD_REGION,ERR,ERROR,*) + !>Initialises the regions and creates the global world region for a context. + SUBROUTINE Regions_Initialise(context,err,error,*) !Argument variables - TYPE(REGION_TYPE), POINTER :: WORLD_REGION !WORLD_COORDINATE_SYSTEM - REGIONS%WORLD_REGION%REGION_FINISHED=.TRUE. - !Return the pointer - WORLD_REGION=>REGIONS%WORLD_REGION - ELSE - CALL FlagError("World coordinate system has not been created.",ERR,ERROR,*999) - ENDIF - ENDIF + ENTERS("Regions_Initialise",err,error,*998) + + IF(.NOT.ASSOCIATED(context)) CALL FlagError("Context is not associated.",err,error,*998) + IF(ASSOCIATED(context%regions)) CALL FlagError("Context regions is already associated.",err,error,*998) + + NULLIFY(coordinateSystems) + CALL Context_CoordinateSystemsGet(context,coordinateSystems,err,error,*998) + CALL CoordinateSystem_UserNumberFind(coordinateSystems,0,worldCoordinateSystem,err,error,*998) + IF(.NOT.ASSOCIATED(worldCoordinateSystem)) CALL FlagError("World coordinate system has not been created.",err,error,*998) + + !Allocate context regions + ALLOCATE(context%regions,STAT=err) + IF(err/=0) CALL FlagError("Could not allocate regions.",err,error,*999) + !Initialise + context%regions%context=>context + NULLIFY(context%regions%worldRegion) + !Create world region + CALL Region_Initialise(context%regions%worldRegion,err,error,*999) + context%regions%worldRegion%USER_NUMBER=0 + context%regions%worldRegion%regions=>context%regions + context%regions%worldRegion%LABEL="World Region" + context%regions%worldRegion%COORDINATE_SYSTEM=>worldCoordinateSystem + context%regions%worldRegion%REGION_FINISHED=.TRUE. - EXITS("REGIONS_INITIALISE") - RETURN -999 ERRORSEXITS("REGIONS_INITIALISE",ERR,ERROR) - RETURN 1 - END SUBROUTINE REGIONS_INITIALISE - - ! - !================================================================================================================================ - ! - - !> Find the region with the given user number, or throw an error if it does not exist. - SUBROUTINE REGION_USER_NUMBER_TO_REGION( USER_NUMBER, REGION, ERR, ERROR, * ) - !Arguments - INTEGER(INTG), INTENT(IN) :: USER_NUMBER ! interface conditions --- @@ -320,8 +326,7 @@ SUBROUTINE SOLVER_MAPPING_CALCULATE(SOLVER_MAPPING,ERR,ERROR,*) ! for each rank. ! !Calculate the row mappings. - CALL ComputationEnvironment_NumberOfWorldNodesGet(computationEnvironment,numberOfWorldComputationNodes,err,error,*999) - CALL ComputationEnvironment_WorldNodeNumberGet(computationEnvironment,myrank,err,error,*999) + CALL WorkGroup_NumberOfGroupNodesGet(workGroup,numberOfGroupComputationNodes,err,error,*999) NUMBER_OF_GLOBAL_SOLVER_ROWS=0 NUMBER_OF_LOCAL_SOLVER_ROWS=0 !Add in the rows from any equations sets that have been added to the solver equations @@ -329,10 +334,10 @@ SUBROUTINE SOLVER_MAPPING_CALCULATE(SOLVER_MAPPING,ERR,ERROR,*) ! !Allocate and initialise the rank lists. ALLOCATE(RANK_GLOBAL_ROWS_LISTS(SOLVER_MAPPING%NUMBER_OF_EQUATIONS_SETS+SOLVER_MAPPING% & - & NUMBER_OF_INTERFACE_CONDITIONS,0:numberOfWorldComputationNodes-1),STAT=ERR) + & NUMBER_OF_INTERFACE_CONDITIONS,0:numberOfGroupComputationNodes-1),STAT=ERR) IF(ERR/=0) CALL FlagError("Could not allocate rank global rows lists.",ERR,ERROR,*999) CALL SolverDofCouplings_Initialise(rowCouplings,err,error,*999) - DO rank=0,numberOfWorldComputationNodes-1 + DO rank=0,numberOfGroupComputationNodes-1 equations_idx=0 DO equations_set_idx=1,SOLVER_MAPPING%NUMBER_OF_EQUATIONS_SETS equations_idx=equations_idx+1 @@ -348,7 +353,7 @@ SUBROUTINE SOLVER_MAPPING_CALCULATE(SOLVER_MAPPING,ERR,ERROR,*) CALL LIST_CREATE_START(RANK_GLOBAL_ROWS_LISTS(equations_idx,rank)%PTR,ERR,ERROR,*999) CALL LIST_DATA_TYPE_SET(RANK_GLOBAL_ROWS_LISTS(equations_idx,rank)%PTR,LIST_INTG_TYPE,ERR,ERROR,*999) CALL LIST_INITIAL_SIZE_SET(RANK_GLOBAL_ROWS_LISTS(equations_idx,rank)%PTR,INT(vectorMapping% & - & numberOfGlobalRows/numberOfWorldComputationNodes,INTG),ERR,ERROR,*999) + & numberOfGlobalRows/numberOfGroupComputationNodes,INTG),ERR,ERROR,*999) CALL LIST_DATA_DIMENSION_SET(RANK_GLOBAL_ROWS_LISTS(equations_idx,rank)%PTR,4,ERR,ERROR,*999) CALL LIST_KEY_DIMENSION_SET(RANK_GLOBAL_ROWS_LISTS(equations_idx,rank)%PTR,1,ERR,ERROR,*999) CALL LIST_CREATE_FINISH(RANK_GLOBAL_ROWS_LISTS(equations_idx,rank)%PTR,ERR,ERROR,*999) @@ -370,7 +375,7 @@ SUBROUTINE SOLVER_MAPPING_CALCULATE(SOLVER_MAPPING,ERR,ERROR,*) CALL LIST_CREATE_START(RANK_GLOBAL_ROWS_LISTS(equations_idx,rank)%PTR,ERR,ERROR,*999) CALL LIST_DATA_TYPE_SET(RANK_GLOBAL_ROWS_LISTS(equations_idx,rank)%PTR,LIST_INTG_TYPE,ERR,ERROR,*999) CALL LIST_INITIAL_SIZE_SET(RANK_GLOBAL_ROWS_LISTS(equations_idx,rank)%PTR, & - & INT(INTERFACE_MAPPING%NUMBER_OF_GLOBAL_COLUMNS/numberOfWorldComputationNodes,INTG),ERR,ERROR,*999) + & INT(INTERFACE_MAPPING%NUMBER_OF_GLOBAL_COLUMNS/numberOfGroupComputationNodes,INTG),ERR,ERROR,*999) CALL LIST_DATA_DIMENSION_SET(RANK_GLOBAL_ROWS_LISTS(equations_idx,rank)%PTR,4,ERR,ERROR,*999) CALL LIST_KEY_DIMENSION_SET(RANK_GLOBAL_ROWS_LISTS(equations_idx,rank)%PTR,1,ERR,ERROR,*999) CALL LIST_CREATE_FINISH(RANK_GLOBAL_ROWS_LISTS(equations_idx,rank)%PTR,ERR,ERROR,*999) @@ -676,7 +681,7 @@ SUBROUTINE SOLVER_MAPPING_CALCULATE(SOLVER_MAPPING,ERR,ERROR,*) ALLOCATE(SOLVER_MAPPING%ROW_DOFS_MAPPING,STAT=ERR) IF(ERR/=0) CALL FlagError("Could not allocate solver mapping row dofs mapping.",ERR,ERROR,*999) !!TODO: what is the real number of domains for a solver??? - CALL DOMAIN_MAPPINGS_MAPPING_INITIALISE(SOLVER_MAPPING%ROW_DOFS_MAPPING,numberOfWorldComputationNodes,ERR,ERROR,*999) + CALL DomainMappings_MappingInitialise(workGroup,SOLVER_MAPPING%ROW_DOFS_MAPPING,ERR,ERROR,*999) ROW_DOMAIN_MAPPING=>SOLVER_MAPPING%ROW_DOFS_MAPPING ALLOCATE(ROW_DOMAIN_MAPPING%GLOBAL_TO_LOCAL_MAP(NUMBER_OF_GLOBAL_SOLVER_ROWS),STAT=ERR) IF(ERR/=0) CALL FlagError("Could not allocate row dofs mapping global to local map.",ERR,ERROR,*999) @@ -787,7 +792,7 @@ SUBROUTINE SOLVER_MAPPING_CALCULATE(SOLVER_MAPPING,ERR,ERROR,*) IF(err/=0) CALL FlagError("Could not allocate dummy DOF coupling values.",err,error,*999) dummyDofCoupling%numberOfDofs=1 !Loop over the ranks to ensure that the lowest ranks have the lowest numbered solver variables - DO rank=0,numberOfWorldComputationNodes-1 + DO rank=0,numberOfGroupComputationNodes-1 NUMBER_OF_LOCAL_SOLVER_ROWS=0 !Calculate the solver row <-> equations row & interface row mappings. @@ -1225,9 +1230,9 @@ SUBROUTINE SOLVER_MAPPING_CALCULATE(SOLVER_MAPPING,ERR,ERROR,*) !dof_type is 1 for domain local DOFs and 2 for ghost DOFs ALLOCATE(RANK_GLOBAL_COLS_LISTS(2,SOLVER_MAPPING%NUMBER_OF_EQUATIONS_SETS+SOLVER_MAPPING% & & NUMBER_OF_INTERFACE_CONDITIONS,SOLVER_MAPPING%VARIABLES_LIST(solver_matrix_idx)%NUMBER_OF_VARIABLES, & - & 0:numberOfWorldComputationNodes-1),STAT=ERR) + & 0:numberOfGroupComputationNodes-1),STAT=ERR) IF(ERR/=0) CALL FlagError("Could not allocate rank global columns lists.",ERR,ERROR,*999) - DO rank=0,numberOfWorldComputationNodes-1 + DO rank=0,numberOfGroupComputationNodes-1 DO solver_variable_idx=1,SOLVER_MAPPING%VARIABLES_LIST(solver_matrix_idx)%NUMBER_OF_VARIABLES DO equations_idx=1,SOLVER_MAPPING%NUMBER_OF_EQUATIONS_SETS+SOLVER_MAPPING%NUMBER_OF_INTERFACE_CONDITIONS DO dof_type=1,2 @@ -1868,14 +1873,14 @@ SUBROUTINE SOLVER_MAPPING_CALCULATE(SOLVER_MAPPING,ERR,ERROR,*) ALLOCATE(SOLVER_MAPPING%SOLVER_COL_TO_EQUATIONS_COLS_MAP(solver_matrix_idx)%COLUMN_DOFS_MAPPING,STAT=ERR) IF(ERR/=0) CALL FlagError("Could not allocate solver col to equations sets map column dofs mapping.",ERR,ERROR,*999) !!TODO: what is the real number of domains for a solver??? - CALL DOMAIN_MAPPINGS_MAPPING_INITIALISE(SOLVER_MAPPING%SOLVER_COL_TO_EQUATIONS_COLS_MAP(solver_matrix_idx)% & - & COLUMN_DOFS_MAPPING,numberOfWorldComputationNodes,ERR,ERROR,*999) + CALL DomainMappings_MappingInitialise (workGroup,SOLVER_MAPPING%SOLVER_COL_TO_EQUATIONS_COLS_MAP(solver_matrix_idx)% & + & COLUMN_DOFS_MAPPING,ERR,ERROR,*999) COL_DOMAIN_MAPPING=>SOLVER_MAPPING%SOLVER_COL_TO_EQUATIONS_COLS_MAP(solver_matrix_idx)%COLUMN_DOFS_MAPPING ALLOCATE(COL_DOMAIN_MAPPING%GLOBAL_TO_LOCAL_MAP(NUMBER_OF_GLOBAL_SOLVER_DOFS),STAT=ERR) IF(ERR/=0) CALL FlagError("Could not allocate column dofs mapping global to local.",ERR,ERROR,*999) COL_DOMAIN_MAPPING%NUMBER_OF_GLOBAL=NUMBER_OF_GLOBAL_SOLVER_DOFS ALLOCATE(VARIABLE_RANK_PROCESSED(SOLVER_MAPPING%VARIABLES_LIST(solver_matrix_idx)%NUMBER_OF_VARIABLES, & - & 0:numberOfWorldComputationNodes-1),STAT=ERR) + & 0:numberOfGroupComputationNodes-1),STAT=ERR) IF(ERR/=0) CALL FlagError("Could not allocate variable rank processed.",ERR,ERROR,*999) VARIABLE_RANK_PROCESSED=.FALSE. !Calculate the column mappings @@ -2259,7 +2264,7 @@ SUBROUTINE SOLVER_MAPPING_CALCULATE(SOLVER_MAPPING,ERR,ERROR,*) DOF_MAP(solver_variable_idx)%PTR=0 ENDDO !solver_variable_idx - ALLOCATE(solver_local_dof(0:numberOfWorldComputationNodes-1),STAT=ERR) + ALLOCATE(solver_local_dof(0:numberOfGroupComputationNodes-1),STAT=ERR) IF(ERR/=0) CALL FlagError("Could not allocate solver local dof array.",ERR,ERROR,*999) ! @@ -2270,7 +2275,7 @@ SUBROUTINE SOLVER_MAPPING_CALCULATE(SOLVER_MAPPING,ERR,ERROR,*) solver_global_dof=0 solver_local_dof=0 DO dof_type=1,2 - DO rank=0,numberOfWorldComputationNodes-1 + DO rank=0,numberOfGroupComputationNodes-1 DO solver_variable_idx=1,SOLVER_MAPPING%VARIABLES_LIST(solver_matrix_idx)%NUMBER_OF_VARIABLES diff --git a/src/solver_matrices_access_routines.f90 b/src/solver_matrices_access_routines.f90 index 06d0de48..843468c6 100644 --- a/src/solver_matrices_access_routines.f90 +++ b/src/solver_matrices_access_routines.f90 @@ -45,6 +45,7 @@ MODULE SolverMatricesAccessRoutines USE BaseRoutines + USE ISO_VARYING_STRING USE Kinds USE Strings USE Types diff --git a/src/solver_routines.f90 b/src/solver_routines.f90 index 25ef4961..1b0b1151 100644 --- a/src/solver_routines.f90 +++ b/src/solver_routines.f90 @@ -9215,6 +9215,7 @@ SUBROUTINE SOLVER_INITIALISE_PTR(SOLVER,ERR,ERROR,*) NULLIFY(SOLVER%SOLVER_EQUATIONS) NULLIFY(SOLVER%CELLML_EQUATIONS) NULLIFY(SOLVER%geometricTransformationSolver) + NULLIFY(solver%workGroup) ELSE CALL FlagError("Solver is not associated.",ERR,ERROR,*999) ENDIF @@ -9734,13 +9735,14 @@ SUBROUTINE SOLVER_LINEAR_DIRECT_CREATE_FINISH(LINEAR_DIRECT_SOLVER,ERR,ERROR,*) INTEGER(INTG), INTENT(OUT) :: ERR !LINEAR_SOLVER%SOLVER IF(ASSOCIATED(SOLVER)) THEN - CALL ComputationEnvironment_WorldCommunicatorGet(computationEnvironment,worldCommunicator,err,error,*999) + NULLIFY(workGroup) + CALL Solver_WorkGroupGet(solver,workGroup,err,error,*999) + CALL WorkGroup_GroupCommunicatorGet(workGroup,groupCommunicator,err,error,*999) SELECT CASE(LINEAR_DIRECT_SOLVER%DIRECT_SOLVER_TYPE) CASE(SOLVER_DIRECT_LU) IF(ASSOCIATED(SOLVER%LINKING_SOLVER)) THEN @@ -9812,7 +9816,7 @@ SUBROUTINE SOLVER_LINEAR_DIRECT_CREATE_FINISH(LINEAR_DIRECT_SOLVER,ERR,ERROR,*) !Nothing else to do CASE(SOLVER_MUMPS_LIBRARY,SOLVER_SUPERLU_LIBRARY,SOLVER_PASTIX_LIBRARY,SOLVER_LAPACK_LIBRARY) !Set up solver through PETSc - CALL Petsc_KSPCreate(worldCommunicator,LINEAR_DIRECT_SOLVER%KSP,ERR,ERROR,*999) + CALL Petsc_KSPCreate(groupCommunicator,LINEAR_DIRECT_SOLVER%KSP,ERR,ERROR,*999) !Set any further KSP options from the command line options CALL Petsc_KSPSetFromOptions(LINEAR_DIRECT_SOLVER%KSP,ERR,ERROR,*999) @@ -10928,7 +10932,7 @@ SUBROUTINE SOLVER_LINEAR_ITERATIVE_CREATE_FINISH(LINEAR_ITERATIVE_SOLVER,ERR,ERR INTEGER(INTG), INTENT(OUT) :: ERR !LINEAR_SOLVER%SOLVER IF(ASSOCIATED(SOLVER)) THEN - CALL ComputationEnvironment_WorldCommunicatorGet(computationEnvironment,worldCommunicator,err,error,*999) + NULLIFY(workGroup) + CALL Solver_WorkGroupGet(solver,workGroup,err,error,*999) + CALL WorkGroup_GroupCommunicatorGet(workGroup,groupCommunicator,err,error,*999) !Should really check iterative types here and then the solver library but as they are all PETSc for now hold off. SELECT CASE(LINEAR_ITERATIVE_SOLVER%SOLVER_LIBRARY) CASE(SOLVER_CMISS_LIBRARY) @@ -11067,7 +11074,7 @@ SUBROUTINE SOLVER_LINEAR_ITERATIVE_CREATE_FINISH(LINEAR_ITERATIVE_SOLVER,ERR,ERR CALL FlagError("Solver linking solve is not associated.",ERR,ERROR,*999) ENDIF ELSE - CALL Petsc_KSPCreate(worldCommunicator,LINEAR_ITERATIVE_SOLVER%KSP,ERR,ERROR,*999) + CALL Petsc_KSPCreate(groupCommunicator,LINEAR_ITERATIVE_SOLVER%KSP,ERR,ERROR,*999) ENDIF !Set the iterative solver type SELECT CASE(LINEAR_ITERATIVE_SOLVER%ITERATIVE_SOLVER_TYPE) @@ -15724,7 +15731,7 @@ SUBROUTINE Solver_QuasiNewtonLinesearchCreateFinish(LINESEARCH_SOLVER,ERR,ERROR, EXTERNAL :: Problem_SolverResidualEvaluatePetsc EXTERNAL :: Problem_SolverConvergenceTestPetsc EXTERNAL :: Problem_SolverNonlinearMonitorPETSC - INTEGER(INTG) :: equations_matrix_idx,equations_set_idx,interface_condition_idx,interface_matrix_idx,worldCommunicator + INTEGER(INTG) :: equations_matrix_idx,equations_set_idx,interface_condition_idx,interface_matrix_idx,groupCommunicator TYPE(DistributedMatrixType), POINTER :: JACOBIAN_MATRIX TYPE(DistributedVectorType), POINTER :: RESIDUAL_VECTOR TYPE(EquationsType), POINTER :: equations @@ -15749,8 +15756,8 @@ SUBROUTINE Solver_QuasiNewtonLinesearchCreateFinish(LINESEARCH_SOLVER,ERR,ERROR, TYPE(INTERFACE_MAPPING_TYPE), POINTER :: INTERFACE_MAPPING TYPE(INTERFACE_MATRICES_TYPE), POINTER :: INTERFACE_MATRICES TYPE(INTERFACE_MATRIX_TYPE), POINTER :: INTERFACE_MATRIX - TYPE(VARYING_STRING) :: LOCAL_ERROR + TYPE(WorkGroupType), POINTER :: workGroup ENTERS("Solver_QuasiNewtonLinesearchCreateFinish",ERR,ERROR,*999) @@ -15761,7 +15768,9 @@ SUBROUTINE Solver_QuasiNewtonLinesearchCreateFinish(LINESEARCH_SOLVER,ERR,ERROR, IF(ASSOCIATED(NONLINEAR_SOLVER)) THEN SOLVER=>NONLINEAR_SOLVER%SOLVER IF(ASSOCIATED(SOLVER)) THEN - CALL ComputationEnvironment_WorldCommunicatorGet(computationEnvironment,worldCommunicator,err,error,*999) + NULLIFY(workGroup) + CALL Solver_WorkGroupGet(solver,workGroup,err,error,*999) + CALL WorkGroup_GroupCommunicatorGet(workGroup,groupCommunicator,err,error,*999) SOLVER_EQUATIONS=>SOLVER%SOLVER_EQUATIONS IF(ASSOCIATED(SOLVER_EQUATIONS)) THEN SELECT CASE(LINESEARCH_SOLVER%SOLVER_LIBRARY) @@ -15903,7 +15912,7 @@ SUBROUTINE Solver_QuasiNewtonLinesearchCreateFinish(LINESEARCH_SOLVER,ERR,ERROR, ENDIF ENDDO !interface_idx !Create the PETSc SNES solver - CALL Petsc_SnesCreate(worldCommunicator,LINESEARCH_SOLVER%snes,ERR,ERROR,*999) + CALL Petsc_SnesCreate(groupCommunicator,LINESEARCH_SOLVER%snes,ERR,ERROR,*999) !Set the nonlinear solver type to be a Quasi-Newton line search solver CALL Petsc_SnesSetType(LINESEARCH_SOLVER%snes,PETSC_SNESQN,ERR,ERROR,*999) !Following routines don't work for petsc version < 3.5. @@ -16966,7 +16975,7 @@ SUBROUTINE Solver_QuasiNewtonTrustRegionCreateFinish(TRUSTREGION_SOLVER,ERR,ERRO TYPE(VARYING_STRING), INTENT(OUT) :: ERROR !NONLINEAR_SOLVER%SOLVER IF(ASSOCIATED(SOLVER)) THEN - CALL ComputationEnvironment_WorldCommunicatorGet(computationEnvironment,worldCommunicator,err,error,*999) + NULLIFY(workGroup) + CALL Solver_WorkGroupGet(solver,workGroup,err,error,*999) + CALL WorkGroup_GroupCommunicatorGet(workGroup,groupCommunicator,err,error,*999) SOLVER_EQUATIONS=>SOLVER%SOLVER_EQUATIONS IF(ASSOCIATED(SOLVER_EQUATIONS)) THEN SELECT CASE(TRUSTREGION_SOLVER%SOLVER_LIBRARY) @@ -17086,7 +17098,7 @@ SUBROUTINE Solver_QuasiNewtonTrustRegionCreateFinish(TRUSTREGION_SOLVER,ERR,ERRO END SELECT CALL SOLVER_MATRICES_CREATE_FINISH(SOLVER_MATRICES,ERR,ERROR,*999) !Create the PETSc SNES solver - CALL Petsc_SnesCreate(worldCommunicator,TRUSTREGION_SOLVER%snes,ERR,ERROR,*999) + CALL Petsc_SnesCreate(groupCommunicator,TRUSTREGION_SOLVER%snes,ERR,ERROR,*999) !Set the nonlinear solver type to be a Quasi-Newton trust region solver CALL Petsc_SnesSetType(TRUSTREGION_SOLVER%snes,PETSC_SNESNEWTONTR,ERR,ERROR,*999) !Set the nonlinear function @@ -18500,7 +18512,7 @@ SUBROUTINE SOLVER_NEWTON_LINESEARCH_CREATE_FINISH(LINESEARCH_SOLVER,ERR,ERROR,*) EXTERNAL :: Problem_SolverResidualEvaluatePetsc EXTERNAL :: Problem_SolverConvergenceTestPetsc EXTERNAL :: Problem_SolverNonlinearMonitorPetsc - INTEGER(INTG) :: equations_matrix_idx,equations_set_idx,interface_condition_idx,interface_matrix_idx,worldCommunicator + INTEGER(INTG) :: equations_matrix_idx,equations_set_idx,interface_condition_idx,interface_matrix_idx,groupCommunicator TYPE(DistributedMatrixType), POINTER :: JACOBIAN_MATRIX TYPE(DistributedVectorType), POINTER :: RESIDUAL_VECTOR TYPE(EquationsType), POINTER :: equations @@ -18525,8 +18537,8 @@ SUBROUTINE SOLVER_NEWTON_LINESEARCH_CREATE_FINISH(LINESEARCH_SOLVER,ERR,ERROR,*) TYPE(INTERFACE_MAPPING_TYPE), POINTER :: INTERFACE_MAPPING TYPE(INTERFACE_MATRICES_TYPE), POINTER :: INTERFACE_MATRICES TYPE(INTERFACE_MATRIX_TYPE), POINTER :: INTERFACE_MATRIX - TYPE(VARYING_STRING) :: LOCAL_ERROR + TYPE(WorkGroupType), POINTER :: workGroup ENTERS("SOLVER_NEWTON_LINESEARCH_CREATE_FINISH",ERR,ERROR,*999) @@ -18537,7 +18549,9 @@ SUBROUTINE SOLVER_NEWTON_LINESEARCH_CREATE_FINISH(LINESEARCH_SOLVER,ERR,ERROR,*) IF(ASSOCIATED(NONLINEAR_SOLVER)) THEN SOLVER=>NONLINEAR_SOLVER%SOLVER IF(ASSOCIATED(SOLVER)) THEN - CALL ComputationEnvironment_WorldCommunicatorGet(computationEnvironment,worldCommunicator,err,error,*999) + NULLIFY(workGroup) + CALL Solver_WorkGroupGet(solver,workGroup,err,error,*999) + CALL WorkGroup_GroupCommunicatorGet(workGroup,groupCommunicator,err,error,*999) SOLVER_EQUATIONS=>SOLVER%SOLVER_EQUATIONS IF(ASSOCIATED(SOLVER_EQUATIONS)) THEN SELECT CASE(LINESEARCH_SOLVER%SOLVER_LIBRARY) @@ -18679,7 +18693,7 @@ SUBROUTINE SOLVER_NEWTON_LINESEARCH_CREATE_FINISH(LINESEARCH_SOLVER,ERR,ERROR,*) ENDIF ENDDO !interface_idx !Create the PETSc SNES solver - CALL Petsc_SnesCreate(worldCommunicator,LINESEARCH_SOLVER%snes,ERR,ERROR,*999) + CALL Petsc_SnesCreate(groupCommunicator,LINESEARCH_SOLVER%snes,ERR,ERROR,*999) !Set the nonlinear solver type to be a Newton line search solver CALL Petsc_SnesSetType(LINESEARCH_SOLVER%snes,PETSC_SNESNEWTONLS,ERR,ERROR,*999) @@ -19725,7 +19739,7 @@ SUBROUTINE SOLVER_NEWTON_TRUSTREGION_CREATE_FINISH(TRUSTREGION_SOLVER,ERR,ERROR, TYPE(VARYING_STRING), INTENT(OUT) :: ERROR !NONLINEAR_SOLVER%SOLVER IF(ASSOCIATED(SOLVER)) THEN - CALL ComputationEnvironment_WorldCommunicatorGet(computationEnvironment,worldCommunicator,err,error,*999) + NULLIFY(workGroup) + CALL Solver_WorkGroupGet(solver,workGroup,err,error,*999) + CALL WorkGroup_GroupCommunicatorGet(workGroup,groupCommunicator,err,error,*999) SOLVER_EQUATIONS=>SOLVER%SOLVER_EQUATIONS IF(ASSOCIATED(SOLVER_EQUATIONS)) THEN SELECT CASE(TRUSTREGION_SOLVER%SOLVER_LIBRARY) @@ -19845,7 +19862,7 @@ SUBROUTINE SOLVER_NEWTON_TRUSTREGION_CREATE_FINISH(TRUSTREGION_SOLVER,ERR,ERROR, END SELECT CALL SOLVER_MATRICES_CREATE_FINISH(SOLVER_MATRICES,ERR,ERROR,*999) !Create the PETSc SNES solver - CALL Petsc_SnesCreate(worldCommunicator,TRUSTREGION_SOLVER%snes,ERR,ERROR,*999) + CALL Petsc_SnesCreate(groupCommunicator,TRUSTREGION_SOLVER%snes,ERR,ERROR,*999) !Set the nonlinear solver type to be a Newton trust region solver CALL Petsc_SnesSetType(TRUSTREGION_SOLVER%snes,PETSC_SNESNEWTONTR,ERR,ERROR,*999) !Set the solver as the SNES application context diff --git a/src/types.f90 b/src/types.f90 index 92c9052e..7c2a7907 100644 --- a/src/types.f90 +++ b/src/types.f90 @@ -1,3555 +1,4056 @@ -!> \file -!> \author Chris Bradley -!> \brief This module contains all type definitions in order to avoid cyclic module references. -!> -!> \section LICENSE -!> -!> Version: MPL 1.1/GPL 2.0/LGPL 2.1 -!> -!> The contents of this file are subject to the Mozilla Public License -!> Version 1.1 (the "License"); you may not use this file except in -!> compliance with the License. You may obtain a copy of the License at -!> http://www.mozilla.org/MPL/ -!> -!> Software distributed under the License is distributed on an "AS IS" -!> basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -!> License for the specific language governing rights and limitations -!> under the License. -!> -!> The Original Code is OpenCMISS -!> -!> The Initial Developer of the Original Code is University of Auckland, -!> Auckland, New Zealand, the University of Oxford, Oxford, United -!> Kingdom and King's College, London, United Kingdom. Portions created -!> by the University of Auckland, the University of Oxford and King's -!> College, London are Copyright (C) 2007-2010 by the University of -!> Auckland, the University of Oxford and King's College, London. -!> All Rights Reserved. -!> -!> Contributor(s): Chris Bradley -!> -!> Alternatively, the contents of this file may be used under the terms of -!> either the GNU General Public License Version 2 or later (the "GPL"), or -!> the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), -!> in which case the provisions of the GPL or the LGPL are applicable instead -!> of those above. If you wish to allow use of your version of this file only -!> under the terms of either the GPL or the LGPL, and not to allow others to -!> use your version of this file under the terms of the MPL, indicate your -!> decision by deleting the provisions above and replace them with the notice -!> and other provisions required by the GPL or the LGPL. If you do not delete -!> the provisions above, a recipient may use your version of this file under -!> the terms of any one of the MPL, the GPL or the LGPL. -!> - -!#### Index: ne -!### Description: -!### Index label for a element. -!#### Index: ng -!### Description: -!### Index label for a gauss point. -!#### Index: ni -!### Description: -!### Index label for a xi direction. -!#### Index: nk -!### Description: -!### Index label for a derivative with respect to the global directions. -!#### Index: nn -!### Description: -!### Index for a local node within an element. -!#### Index: np -!### Description: -!### Index for a node. -!#### Index: ns -!### Description: -!### Index for a element parameter within an element. -!#### Index: nu -!### Description: -!### Index for a partial derivative. - -!> This module contains all type definitions in order to avoid cyclic module references. -MODULE Types - - USE CmissPetscTypes, ONLY : PetscISColoringType,PetscKspType,PetscMatType,PetscMatColoringType,PetscMatFDColoringType, & - & PetscPCType,PetscSnesType,PetscSnesLineSearchType,PetscTaoType,PetscVecType - USE ComputationAccessRoutines - USE Constants - USE Kinds - USE ISO_C_BINDING - USE ISO_VARYING_STRING - USE Trees - use linkedlist_routines - - IMPLICIT NONE - - ! - !================================================================================================================================ - ! - ! Base types - ! - - TYPE REAL_DP_PTR_TYPE - REAL(DP), POINTER :: PTR(:) - END TYPE REAL_DP_PTR_TYPE - - TYPE INTEGER_INTG_PTR_TYPE - INTEGER(INTG), POINTER :: PTR(:) - END TYPE INTEGER_INTG_PTR_TYPE - - TYPE INTEGER_CINT_ALLOC_TYPE - INTEGER(C_INT), ALLOCATABLE :: ARRAY(:) - END TYPE INTEGER_CINT_ALLOC_TYPE - - ! - !================================================================================================================================ - ! - ! List types - ! - - !>Buffer type to allow arrays of pointers to a list - TYPE LIST_PTR_TYPE - TYPE(LIST_TYPE), POINTER :: PTR !Contains information on a list - TYPE LIST_TYPE - LOGICAL :: MUTABLE ! 1) for integer lists. - REAL(SP), ALLOCATABLE :: LIST_SP(:) ! 1) for single precision real lists. - REAL(DP), ALLOCATABLE :: LIST_DP(:) ! 1) for double precision real lists. - INTEGER(C_INT), ALLOCATABLE :: LIST_C_INT(:) ! 1) for integer lists. - END TYPE LIST_TYPE - - ! - !================================================================================================================================ - ! - ! Quadrature types - ! - - !>Contains information for a particular quadrature scheme. \see OPENCMISS::Iron::cmfe_QuadratureSchemeType \todo Also evaluate the product of the basis functions at gauss points for speed??? - TYPE QUADRATURE_SCHEME_TYPE - INTEGER(INTG) :: GLOBAL_NUMBER !A buffer type to allow for an array of pointers to a QUADRATURE_SCHEME_TYPE \see Types::QUADRATURE_SCHEME_TYPE - TYPE QUADRATURE_SCHEME_PTR_TYPE - TYPE(QUADRATURE_SCHEME_TYPE), POINTER :: PTR !Contains information on the quadrature to be used for integrating a basis. \see OPENCMISS::Iron::cmfe_QuadratureType - TYPE QUADRATURE_TYPE - INTEGER(INTG) :: TYPE ! A buffer type to allow for an array of pointers to a BASIS_TYPE. - TYPE BASIS_PTR_TYPE - TYPE(BASIS_TYPE), POINTER :: PTR ! Contains all information about a basis . - TYPE BASIS_TYPE - !\todo Add in different sub types for the different types of bases??? - INTEGER(INTG) :: USER_NUMBER ! 1. - TYPE(BASIS_PTR_TYPE), ALLOCATABLE :: faceBases(:) ! 2. - INTEGER(INTG) :: numberOfSubBases !Contains information on the defined basis functions - TYPE BASIS_FUNCTIONS_TYPE - INTEGER(INTG) :: numberOfBasisFunctions !Contains information on a coordinate system. \todo Have a list of coordinate systems and have a pointer in the coordinate_system_type back to the regions that use them. - TYPE, BIND(C) :: COORDINATE_SYSTEM_TYPE - INTEGER(INTG) :: USER_NUMBER !A buffer type to allow for an array of pointers to a COORDINATE_SYSTEM_TYPE. - TYPE COORDINATE_SYSTEM_PTR_TYPE - TYPE(COORDINATE_SYSTEM_TYPE), POINTER :: PTR !Contains information on the list of coordinate systems - TYPE CoordinateSystemsType - INTEGER(INTG) :: numberOfCoordinateSystems !Contains information about a data projection result. - TYPE DataProjectionResultType - INTEGER(INTG) :: userNumber !Contains information on projection candidates - TYPE DataProjectionCandidateType - INTEGER(INTG), ALLOCATABLE :: candidateElementNumbers(:) !Contains information on a data point projection - TYPE DataProjectionType - INTEGER(INTG) :: globalNumber !A buffer type to allow for an array of pointers to a DataProjectionType. - TYPE DataProjectionPtrType - TYPE(DataProjectionType), POINTER :: ptr !Contains information on the data point projectiosn defined on data points - TYPE DataProjectionsType - TYPE(DataPointsType), POINTER :: dataPoints !Contains information about a data point. - TYPE DataPointType - INTEGER(INTG) :: globalNumber !Contains information on the data points defined on a region. \see OPENCMISS::Iron::cmfe_DataPointsType - TYPE DataPointsType - INTEGER(INTG) :: globalNumber !A buffer type to allow for an array of pointers to a DataPointsType. - TYPE DataPointsPtrType - TYPE(DataPointsType), POINTER :: ptr !Contains information on the data point sets defined on a region. - TYPE DataPointSetsType - TYPE(REGION_TYPE), POINTER :: region !Contains information about a node. - TYPE NODE_TYPE - INTEGER(INTG) :: GLOBAL_NUMBER !Contains information on the nodes defined on a region. \see OPENCMISS::Iron::cmfe_NodesType - TYPE NODES_TYPE - TYPE(REGION_TYPE), POINTER :: REGION !Contains information on the dofs for a mesh. - TYPE MeshDofsType - TYPE(MeshComponentTopologyType), POINTER :: meshComponentTopology !Contains information on the mesh adjacent elements for a xi coordinate - TYPE MESH_ADJACENT_ELEMENT_TYPE - INTEGER(INTG) :: NUMBER_OF_ADJACENT_ELEMENTS !Contains the information for an element in a mesh. - TYPE MESH_ELEMENT_TYPE - INTEGER(INTG) :: GLOBAL_NUMBER !Contains the information for the elements of a mesh. - TYPE MeshElementsType - TYPE(MeshComponentTopologyType), POINTER :: meshComponentTopology !Contains the information for a node derivative of a mesh. - TYPE MeshNodeDerivativeType - INTEGER(INTG) :: numberOfVersions !The number of global versions at the node for the mesh. - INTEGER(INTG), ALLOCATABLE :: userVersionNumbers(:) !userVersionNumbers(versionIdx). The user version numbers for the versionIdx'th version for the node. - INTEGER(INTG), ALLOCATABLE :: dofIndex(:) !The global dof version index (nv) in the domain of the nk'th global derivative for the node. - INTEGER(INTG) :: globalDerivativeIndex !The global derivative index of the nk'th global derivative for the node. - INTEGER(INTG) :: partialDerivativeIndex !The partial derivative index (nu) of the nk'th global derivative for the node. Old CMISS name NUNK(nk,nj,np). - END TYPE MeshNodeDerivativeType - - !>Contains the topology information for a global node of a mesh. - TYPE MeshNodeType - INTEGER(INTG) :: meshNumber !Contains the information for the nodes of a mesh. - TYPE MeshNodesType - TYPE(MeshComponentTopologyType), POINTER :: meshComponentTopology !Contains information on the projected data points on an element - TYPE MeshElementDataPointsType - INTEGER(INTG) :: numberOfProjectedData !Contains information of the projected data point - TYPE MeshDataPointType - INTEGER(INTG) :: userNumber !Contains information on the (global) topology of a mesh. - TYPE MeshComponentTopologyType - TYPE(MESH_TYPE), POINTER :: mesh !A buffer type to allow for an array of pointers to a MeshComponentTopologyType. - TYPE MeshComponentTopologyPtrType - TYPE(MeshComponentTopologyType), POINTER :: ptr !Embedded mesh types - TYPE EMBEDDING_XI_TYPE - INTEGER(INTG) :: NUMBER_OF_NODES !Contains information on a mesh defined on a region. \see OPENCMISS::Iron::cmfe_MeshType - TYPE MESH_TYPE - INTEGER(INTG) :: USER_NUMBER !A buffer type to allow for an array of pointers to a MESH_TYPE. - TYPE MESH_PTR_TYPE - TYPE(MESH_TYPE), POINTER :: PTR !Contains information on the meshes defined on a region. - TYPE MESHES_TYPE - TYPE(REGION_TYPE), POINTER :: REGION !Contains information on a generated regular mesh - TYPE GENERATED_MESH_REGULAR_TYPE - TYPE(GENERATED_MESH_TYPE), POINTER :: GENERATED_MESH !Contains information of a generated cylinder mesh - !>Allows only a 3D cylinder mesh with xi directions (r,theta,z) - TYPE GENERATED_MESH_CYLINDER_TYPE - TYPE(GENERATED_MESH_TYPE), POINTER :: GENERATED_MESH !Contains information of a generated ellipsoid mesh - !>Allows only a 3D ellipsoid mesh - TYPE GENERATED_MESH_ELLIPSOID_TYPE - TYPE(GENERATED_MESH_TYPE), POINTER :: GENERATED_MESH !Contains information on a generated mesh. \see OPENCMISS::Iron::cmfe_GeneratedMeshType - TYPE GENERATED_MESH_TYPE - INTEGER(INTG) :: USER_NUMBER !A buffer type to allow for an array of pointers to a GENERATED_MESH_TYPE. - TYPE GENERATED_MESH_PTR_TYPE - TYPE(GENERATED_MESH_TYPE), POINTER :: PTR !Contains information on the generated meshes defined on a region. - TYPE GeneratedMeshesType - TYPE(REGION_TYPE), POINTER :: region !Contains information on the degrees-of-freedom (dofs) for a domain. - TYPE DOMAIN_DOFS_TYPE - TYPE(DOMAIN_TYPE), POINTER :: DOMAIN !Contains the information for a line in a domain. - TYPE DOMAIN_LINE_TYPE - INTEGER(INTG) :: NUMBER !A buffer type to allow for an array of pointers to a DOMAIN_LINE_TYPE - TYPE DOMAIN_LINE_PTR_TYPE - TYPE(DOMAIN_LINE_TYPE), POINTER :: PTR !Contains the topology information for the lines of a domain. - TYPE DOMAIN_LINES_TYPE - TYPE(DOMAIN_TYPE), POINTER :: DOMAIN !Contains the information for a face in a domain. - TYPE DOMAIN_FACE_TYPE - INTEGER(INTG) :: NUMBER !A buffer type to allow for an array of pointers to a DOMAIN_FACE_TYPE. - TYPE DOMAIN_FACE_PTR_TYPE - TYPE(DOMAIN_FACE_TYPE), POINTER :: PTR !Contains the topology information for the faces of a domain. - TYPE DOMAIN_FACES_TYPE - TYPE(DOMAIN_TYPE), POINTER :: DOMAIN !Contains the information for an element in a domain. - TYPE DOMAIN_ELEMENT_TYPE - INTEGER(INTG) :: NUMBER !Contains the topology information for the elements of a domain. - TYPE DOMAIN_ELEMENTS_TYPE - TYPE(DOMAIN_TYPE), POINTER :: DOMAIN !Contains the topology information for a local node derivative of a domain. - TYPE DOMAIN_NODE_DERIVATIVE_TYPE - INTEGER(INTG) :: numberOfVersions !The number of global versions at the node for the mesh. - INTEGER(INTG), ALLOCATABLE :: userVersionNumbers(:) !The user version index of the nk'th global derivative for the node. - INTEGER(INTG), ALLOCATABLE :: DOF_INDEX(:) !The local dof derivative version index in the domain of the nk'th global derivative for the node. - INTEGER(INTG) :: GLOBAL_DERIVATIVE_INDEX !The global derivative index of the nk'th global derivative for the node. - INTEGER(INTG) :: PARTIAL_DERIVATIVE_INDEX !The partial derivative index (nu) of the nk'th global derivative for the node. Old CMISS name NUNK(nk,nj,np). - END TYPE DOMAIN_NODE_DERIVATIVE_TYPE - - !>Contains the topology information for a local node of a domain. - TYPE DOMAIN_NODE_TYPE - INTEGER(INTG) :: LOCAL_NUMBER !Contains the topology information for the nodes of a domain - TYPE DOMAIN_NODES_TYPE - TYPE(DOMAIN_TYPE), POINTER :: DOMAIN !Contains the topology information for a domain - TYPE DOMAIN_TOPOLOGY_TYPE - TYPE(DOMAIN_TYPE), POINTER :: DOMAIN !Contains the information for an adjacent domain for transfering the ghost data of a distributed vector to/from the - !>current domain. - TYPE DistributedVectorTransferType - TYPE(DistributedVectorCMISSType), POINTER :: cmissVector !Contains information for a CMISS distributed vector - TYPE DistributedVectorCMISSType - TYPE(DistributedVectorType), POINTER :: distributedVector !Contains information for a PETSc distributed vector - TYPE DistributedVectorPETScType - TYPE(DistributedVectorType), POINTER :: distributedVector !Contains the information for a vector that is distributed across a number of domains. - TYPE DistributedVectorType - LOGICAL :: vectorFinished !Contains information for a CMISS distributed matrix - TYPE DistributedMatrixCMISSType - TYPE(DistributedMatrixType), POINTER :: distributedMatrix !Contains information for a PETSc distributed matrix - TYPE DistributedMatrixPETScType - TYPE(DistributedMatrixType), POINTER :: distributedMatrix !Contains the information for a matrix that is distributed across a number of domains. - TYPE DistributedMatrixType - LOGICAL :: matrixFinished !Contains information for a vector - TYPE VECTOR_TYPE - INTEGER(INTG) :: ID !Contains information for a matrix - TYPE MATRIX_TYPE - INTEGER(INTG) :: ID !Contains the information on an adjacent domain to a domain in a domain mapping. - TYPE DOMAIN_ADJACENT_DOMAIN_TYPE - INTEGER(INTG) :: DOMAIN_NUMBER !Contains the local information for a global mapping number for a domain mapping. - TYPE DOMAIN_GLOBAL_MAPPING_TYPE - INTEGER(INTG) :: NUMBER_OF_DOMAINS !Contains information on the domain mappings (i.e., local and global numberings). - TYPE DOMAIN_MAPPING_TYPE - INTEGER(INTG) :: NUMBER_OF_LOCAL !Contains information on the domain decomposition mappings. - TYPE DOMAIN_MAPPINGS_TYPE - TYPE(DOMAIN_TYPE), POINTER :: DOMAIN !A pointer to the domain decomposition for this domain. - TYPE DOMAIN_TYPE - TYPE(DECOMPOSITION_TYPE), POINTER :: DECOMPOSITION !A buffer type to allow for an array of pointers to a DOMAIN_TYPE. - TYPE DOMAIN_PTR_TYPE - TYPE(DOMAIN_TYPE), POINTER :: PTR !Contains the information for a line in a decomposition. - TYPE DECOMPOSITION_LINE_TYPE - INTEGER(INTG) :: NUMBER !Contains the topology information for the lines of a decomposition. - TYPE DECOMPOSITION_LINES_TYPE - TYPE(DECOMPOSITION_TYPE), POINTER :: DECOMPOSITION !Contains the information for a face in a decomposition. - TYPE DECOMPOSITION_FACE_TYPE - INTEGER(INTG) :: NUMBER !Contains the topology information for the faces of a decomposition. - TYPE DECOMPOSITION_FACES_TYPE - TYPE(DECOMPOSITION_TYPE), POINTER :: DECOMPOSITION !Contains information on the decomposition adjacent elements for a xi coordinate - TYPE DECOMPOSITION_ADJACENT_ELEMENT_TYPE - INTEGER(INTG) :: NUMBER_OF_ADJACENT_ELEMENTS !Contains the information for an element in a decomposition. - TYPE DECOMPOSITION_ELEMENT_TYPE - INTEGER(INTG) :: LOCAL_NUMBER !Contains the topology information for the elements of a decomposition. - TYPE DECOMPOSITION_ELEMENTS_TYPE - TYPE(DECOMPOSITION_TYPE), POINTER :: DECOMPOSITION !Contains data point information - TYPE DecompositionElementDataPointType - INTEGER(INTG) :: userNumber !Contains information on the projected data points on an element, for decomposition since data points on elements go with the elements - TYPE DecompositionElementDataPointsType - INTEGER(INTG) :: numberOfProjectedData !Contains data point decompostion topology - TYPE DecompositionDataPointsType - TYPE(DECOMPOSITION_TYPE), POINTER :: DECOMPOSITION !Contains the topology information for a decomposition - TYPE DECOMPOSITION_TOPOLOGY_TYPE - TYPE(DECOMPOSITION_TYPE), POINTER :: decomposition !Contains information on the mesh decomposition. \see OPENCMISS::Iron::cmfe_DecompositionType - TYPE DECOMPOSITION_TYPE - INTEGER(INTG) :: USER_NUMBER !A buffer type to allow for an array of pointers to a DECOMPOSITION_TYPE. - TYPE DECOMPOSITION_PTR_TYPE - TYPE(DECOMPOSITION_TYPE), POINTER :: PTR !Contains information on the domain decompositions defined on a mesh. - TYPE DECOMPOSITIONS_TYPE - TYPE(MESH_TYPE), POINTER :: mesh !Contains information on a physical point in a field. - TYPE FIELD_PHYSICAL_POINT_TYPE - TYPE(FIELD_INTERPOLATED_POINT_TYPE), POINTER :: FIELD_INTERPOLATED_POINT !Buffer type to allow for arrays of pointers to FIELD_PHYSICAL_POINT_TYPE - TYPE FIELD_PHYSICAL_POINT_PTR_TYPE - TYPE(FIELD_PHYSICAL_POINT_TYPE), POINTER :: PTR - END TYPE FIELD_PHYSICAL_POINT_PTR_TYPE - - !> Contains the interpolated point coordinate metrics. Old CMISS name GL,GU,RG. - TYPE FIELD_INTERPOLATED_POINT_METRICS_TYPE - TYPE(FIELD_INTERPOLATED_POINT_TYPE), POINTER :: INTERPOLATED_POINT !Contains the interpolated value (and the derivatives wrt xi) of a field at a point. Old CMISS name XG. - TYPE FIELD_INTERPOLATED_POINT_TYPE - TYPE(FIELD_INTERPOLATION_PARAMETERS_TYPE), POINTER :: INTERPOLATION_PARAMETERS !Contains the parameters required to interpolate a field variable within an element. Old CMISS name XE - TYPE FIELD_INTERPOLATION_PARAMETERS_TYPE - TYPE(FIELD_TYPE), POINTER :: FIELD !Contains the geometric parameters (lines, faces, volumes etc.) for a geometric field decomposition. - TYPE FIELD_GEOMETRIC_PARAMETERS_TYPE - INTEGER(INTG) :: NUMBER_OF_LINES !A type to hold the scale factors for the appropriate mesh component of a field. - TYPE FIELD_SCALING_TYPE - INTEGER(INTG) :: MESH_COMPONENT_NUMBER !A type to hold the field scalings for the field. - TYPE FIELD_SCALINGS_TYPE - INTEGER(INTG) :: SCALING_TYPE ! A type to hold the mapping from field dof numbers to field parameters (nodes, elements, etc) - TYPE FIELD_DOF_TO_PARAM_MAP_TYPE - INTEGER(INTG) :: NUMBER_OF_DOFS !A type to hold the mapping from a field node derivative's versions to field dof numbers for a particular field variable component. - TYPE FIELD_NODE_PARAM_TO_DOF_MAP_DERIVATIVE_TYPE - INTEGER(INTG) :: NUMBER_OF_VERSIONS !A type to hold the mapping from a field node's derivative to field dof numbers for a particular field variable component. - TYPE FIELD_NODE_PARAM_TO_DOF_MAP_NODE_TYPE - INTEGER(INTG) :: NUMBER_OF_DERIVATIVES !A type to hold the mapping from field nodes to field dof numbers for a particular field variable component. - TYPE FIELD_NODE_PARAM_TO_DOF_MAP_TYPE - INTEGER(INTG) :: NUMBER_OF_NODE_PARAMETERS !A type to hold the mapping from field elements to field dof numbers for a particular field variable component. - TYPE FIELD_ELEMENT_PARAM_TO_DOF_MAP_TYPE - INTEGER(INTG) :: NUMBER_OF_ELEMENT_PARAMETERS !A type to hold the mapping from field grid points to field dof numbers for a particular field variable component. - TYPE FIELD_GRID_POINT_PARAM_TO_DOF_MAP_TYPE - INTEGER(INTG) :: NUMBER_OF_GRID_POINT_PARAMETERS !A type to hold the mapping from field Gauss points to field dof numbers for a particular field variable component. - TYPE FIELD_GAUSS_POINT_PARAM_TO_DOF_MAP_TYPE - INTEGER(INTG) :: NUMBER_OF_GAUSS_POINT_PARAMETERS !A type to hold the mapping from field data points to field dof numbers for a particular field variable component. - TYPE FIELD_DATA_POINT_PARAM_TO_DOF_MAP_TYPE - INTEGER(INTG) :: NUMBER_OF_DATA_POINT_PARAMETERS !A type to hold the mapping from field parameters (nodes, elements, etc) to field dof numbers for a particular field variable component. - TYPE FIELD_PARAM_TO_DOF_MAP_TYPE - INTEGER(INTG) :: NUMBER_OF_CONSTANT_PARAMETERS ! A type to hold the mapping from field element parameters to field dof numbers - TYPE(FIELD_NODE_PARAM_TO_DOF_MAP_TYPE) :: NODE_PARAM2DOF_MAP !> A type to hold the mapping from field node parameters to field dof numbers - TYPE(FIELD_GRID_POINT_PARAM_TO_DOF_MAP_TYPE) :: GRID_POINT_PARAM2DOF_MAP !> A type to hold the mapping from grid point element parameters to field dof numbers - TYPE(FIELD_GAUSS_POINT_PARAM_TO_DOF_MAP_TYPE) :: GAUSS_POINT_PARAM2DOF_MAP !> A type to hold the mapping from field gauss point parameters to field dof numbers - TYPE(FIELD_DATA_POINT_PARAM_TO_DOF_MAP_TYPE) :: DATA_POINT_PARAM2DOF_MAP !> A type to hold the mapping from field data point parameters to field dof numbers - END TYPE FIELD_PARAM_TO_DOF_MAP_TYPE - - !>Contains information for a component of a field variable. - TYPE FIELD_VARIABLE_COMPONENT_TYPE - INTEGER(INTG) :: COMPONENT_NUMBER !A type to hold the parameter sets for a field. - TYPE FIELD_PARAMETER_SET_TYPE - INTEGER(INTG) :: SET_INDEX !A buffer type to allow for an array of pointers to a FIELD_PARAMETER_SET_TYPE. - TYPE FIELD_PARAMETER_SET_PTR_TYPE - TYPE(FIELD_PARAMETER_SET_TYPE), POINTER :: PTR !A type to store the parameter sets for a field. - TYPE FIELD_PARAMETER_SETS_TYPE - TYPE(FIELD_VARIABLE_TYPE), POINTER :: FIELD_VARIABLE !Contains information for a field variable defined on a field. - TYPE FIELD_VARIABLE_TYPE - INTEGER(INTG) :: VARIABLE_NUMBER !A buffer type to allow for an array of pointers to a FIELD_VARIABLE_TYPE. - TYPE FIELD_VARIABLE_PTR_TYPE - TYPE(FIELD_VARIABLE_TYPE), POINTER :: PTR !A type to temporarily hold (cache) the user modifiable values which are used to create a field. - TYPE FIELD_CREATE_VALUES_CACHE_TYPE - LOGICAL :: LABEL_LOCKED !Contains information for a field defined on a region. \see OPENCMISS::Iron::cmfe_FieldType - TYPE FIELD_TYPE - INTEGER(INTG) :: GLOBAL_NUMBER !A buffer type to allow for an array of pointers to a FIELD_TYPE. - TYPE FIELD_PTR_TYPE - TYPE(FIELD_TYPE), POINTER :: PTR !Contains information on the fields defined on a region. - TYPE FIELDS_TYPE - TYPE(REGION_TYPE), POINTER :: REGION !Contains information for an element matrix. - TYPE ElementMatrixType - INTEGER(INTG) :: equationsMatrixNumber !Contains information for an element vector. - TYPE ElementVectorType - INTEGER(INTG) :: numberOfRows !Contains information for an nodal matrix. - TYPE NodalMatrixType - INTEGER(INTG) :: equationsMatrixNumber !Contains information for an nodal vector. - TYPE NodalVectorType - INTEGER(INTG) :: numberOfRows !Contains information about an equations matrix. - TYPE EquationsMatrixType - INTEGER(INTG) :: matrixNumber !A buffer type to allow for an array of pointers to a EquationsMatrixType \see Types::EquationsMatrixType. - TYPE EquationsMatrixPtrType - TYPE(EquationsMatrixType), POINTER :: ptr !Contains information on the Jacobian matrix for nonlinear problems - TYPE EquationsJacobianType - INTEGER(INTG) :: jacobianNumber !A buffer type to allow for an array of pointers to a EquationsJacobianType \see Types::EquationsJacobianType. - TYPE EquationsJacobianPtrType - TYPE(EquationsJacobianType), POINTER :: ptr - END TYPE EquationsJacobianPtrType - - !>Contains information on the Hessian matrix for optimisation problems - TYPE EquationsHessianType - INTEGER(INTG) :: hessianNumber !A buffer type to allow for an array of pointers to a EquationsHessianType \see Types::EquationsHessianType - TYPE EquationsHessianPtrType - TYPE(EquationsHessianType), POINTER :: ptr - END TYPE EquationsHessianPtrType - - !>Contains information on functions for scalar equations - TYPE EquationsMatricesFunctionType - TYPE(EquationsMatricesScalarType), POINTER :: scalarMatrices !Contains information on norms for scalar equations - TYPE EquationsMatricesNormType - TYPE(EquationsMatricesScalarType), POINTER :: scalarMatrices !Contains information on dot products for scalar equations - TYPE EquationsMatricesDotProductType - TYPE(EquationsMatricesScalarType), POINTER :: scalarMatrices !Contains information on quadratic matrix vector forms for scalar equations - TYPE EquationsMatricesQuadraticType - TYPE(EquationsMatricesScalarType), POINTER :: scalarMatrices !Contains information of the dynamic matrices for equations matrices - TYPE EquationsMatricesDynamicType - TYPE(EquationsMatricesVectorType), POINTER :: vectorMatrices !Contains information of the linear matrices for equations matrices - TYPE EquationsMatricesLinearType - TYPE(EquationsMatricesVectorType), POINTER :: vectorMatrices !Contains information of the nolinear matrices and vectors for equations matrices - TYPE EquationsMatricesNonlinearType - TYPE(EquationsMatricesVectorType), POINTER :: vectorMatrices !Contains information of the optimisation matrices and vectors for equations matrices - TYPE EquationsMatricesOptimisationType - TYPE(EquationsMatricesVectorType), POINTER :: vectorMatrices !Contains information of the RHS vector for equations matrices - TYPE EquationsMatricesRHSType - TYPE(EquationsMatricesVectorType), POINTER :: vectorMatrices !Contains information of the source vector for equations matrices - TYPE EquationsMatricesSourceType - TYPE(EquationsMatricesVectorType), POINTER :: vectorMatrices !Contains information on the scalar equations matrices, vectors and scalars - TYPE EquationsMatricesScalarType - TYPE(EquationsScalarType), POINTER :: scalarEquations !Contains information on the vector equations matrices and vectors - TYPE EquationsMatricesVectorType - TYPE(EquationsVectorType), POINTER :: vectorEquations !Contains the information about the mapping of a variable DOF to an equations matrix column - TYPE varToEquationsColumnMapType - INTEGER(INTG), ALLOCATABLE :: columnDOF(:) !Contains the mapping for a dependent variable type to the equations matrices - TYPE varToEquationsMatricesMapType - INTEGER(INTG) :: variableIndex !Contains information for mapping an equations matrix to a field variable. - TYPE EquationsMatrixToVarMapType - INTEGER(INTG) :: matrixNumber !Contains information for function mapping in the scalar equations mapping - TYPE EquationsMappingFunctionType - INTEGER(INTG) :: functionNumber !Contains information for mapping field variables to functions in the scalar equations mapping - TYPE EquationsMappingFunctionsType - TYPE(EquationsMappingScalarType), POINTER :: scalarMapping !Contains information for mapping field variables to a norm i.e., ||x|| in the scalar equations mapping - TYPE EquationsMappingNormType - INTEGER(INTG) :: normNumber !Contains information for mapping field variables to norms i.e., ||x|| in the scalar equations mapping - TYPE EquationsMappingNormsType - TYPE(EquationsMappingScalarType), POINTER :: scalarMapping !Contains information for mapping field variables to a dot product i.e., x^T.y in the scalar equations mapping - TYPE EquationsMappingDotProductType - INTEGER(INTG) :: dotProductNumber !Contains information for mapping field variables to dot products i.e., x^T.y in the equations set of the mapping - TYPE EquationsMappingDotProductsType - TYPE(EquationsMappingScalarType), POINTER :: scalarMapping !Contains information for mapping field variables to a quadratic form i.e., x^T.A.y in the scalar equations mapping - TYPE EquationsMappingQuadraticType - INTEGER(INTG) :: quadraticNumber !Contains information for mapping field variables to quadratic forms i.e., x^T.A.y in the scalar equations mapping - TYPE EquationsMappingQuadraticsType - TYPE(EquationsMappingScalarType), POINTER :: scalarMapping !Contains information for mapping field variables to the dynamic matrices in the vector equations mapping - TYPE EquationsMappingDynamicType - TYPE(EquationsMappingVectorType), POINTER :: vectorMapping !Contains information for mapping field variables to the linear matrices in the vector equations mapping - TYPE EquationsMappingLinearType - TYPE(EquationsMappingVectorType), POINTER :: vectorMapping !Contains the mapping from the Jacobian back to the nonlinear residual variables. - TYPE EquationsJacobianToVarMapType - INTEGER(INTG) :: jacobianNumber !Contains the mapping for a dependent variable type to the nonlinear Jacobian matrix - TYPE VarToEquationsJacobianMapType - INTEGER(INTG) :: jacobianNumber !Contains information on the equations mapping for nonlinear matrices i.e., how a field variable is mapped to residual - !>vectors, and how the field variables are mapped to the rows and columns of the associated Jacobian matrices of the - !>vector equations mapping. There may be multiple residual variables with a Jacobian matrix for each variable - TYPE EquationsMappingNonlinearType - TYPE(EquationsMappingVectorType), POINTER :: vectorMapping !Contains information on the equations mapping for a RHS i.e., how a field variable is mapped to the RHS vector for - !>the vector equations mapping. - TYPE EquationsMappingRHSType - TYPE(EquationsMappingVectorType), POINTER :: vectorMapping !Contains information on the equations mapping for a source i.e., how a field variable is mapped to the source vector for - !>the vector equation mapping. - TYPE EquationsMappingSourceType - TYPE(EquationsMappingVectorType), POINTER :: vectorMapping !Contains information on the create values cache for the scalar equations mapping. Because we do not want to allocate and - !deallocate large data structures as the equations mapping options are changed between create start and create finish we - !cache the important information and the allocate and process the data structures at create finish. - TYPE EquationsMappingScalarCreateValuesCacheType - END TYPE EquationsMappingScalarCreateValuesCacheType - - !>Contains information on the create values cache for the vector equations mapping. Because we do not want to allocate and - !deallocate large data structures as the equations mapping options are changed between create start and create finish we - !cache the important information and the allocate and process the data structures at create finish. - TYPE EquationsMappingVectorCreateValuesCacheType - INTEGER(INTG) :: numberOfDynamicMatrices !Contains information on the vector equations LHS mapping i.e., how a field variable is mapped to the vector equations rows - !>for this equations mapping. - TYPE EquationsMappingLHSType - TYPE(EquationsMappingVectorType), POINTER :: vectorMapping !Contains information on the mapping of field variables for a scalar equation - TYPE EquationsMappingScalarType - TYPE(EquationsScalarType), POINTER :: scalarEquations !Contains information on the mapping of field variables for vector equations - TYPE EquationsMappingVectorType - TYPE(EquationsVectorType), POINTER :: vectorEquations !Contains information on the interpolation for the equations - TYPE EquationsInterpolationType - TYPE(EquationsType), POINTER :: equations !Contains information about scalar equations (i.e., a single equation row). - TYPE EquationsScalarType - TYPE(EquationsType), POINTER :: equations !Contains information about vector equations (i.e., a number of equation rows). - TYPE EquationsVectorType - TYPE(EquationsType), POINTER :: equations !Contains information about the equations in an equations set. \see OPENCMISS::Iron::cmfe_EquationsType - TYPE EquationsType - TYPE(EQUATIONS_SET_TYPE), POINTER :: equationsSet !Contains information on the boundary conditions for a dependent field variable - TYPE BOUNDARY_CONDITIONS_VARIABLE_TYPE - TYPE(BOUNDARY_CONDITIONS_TYPE), POINTER :: BOUNDARY_CONDITIONS !A buffer type to allow for an array of pointers to a VARIABLE_BOUNDARY_CONDITIONS_TYPE \see Types::VARIABLE_BOUNDARY_CONDITIONS_TYPE - TYPE BOUNDARY_CONDITIONS_VARIABLE_PTR_TYPE - TYPE(BOUNDARY_CONDITIONS_VARIABLE_TYPE), POINTER :: PTR !Contains information on the boundary conditions for the solver equations. \see OPENCMISS::Iron::cmfe_BoundaryConditionsType - TYPE BOUNDARY_CONDITIONS_TYPE - TYPE(SOLVER_EQUATIONS_TYPE), POINTER :: SOLVER_EQUATIONS !A buffer type to allow for an array of pointers to a BOUNDARY_CONDITIONS_SPARSITY_INDICES_TYPE \see Types::BOUNDARY_CONDITIONS_SPARSITY_INDICES_TYPE - TYPE BOUNDARY_CONDITIONS_SPARSITY_INDICES_PTR_TYPE - TYPE(BOUNDARY_CONDITIONS_SPARSITY_INDICES_TYPE), POINTER :: PTR ! Contains information on dofs with associated dirichlet conditions and corresponding non-zero elements in the equations matrices - TYPE BOUNDARY_CONDITIONS_DIRICHLET_TYPE - INTEGER(INTG), ALLOCATABLE :: DIRICHLET_DOF_INDICES(:) ! Contains information on indices of non-zero elements with associated dirichlet conditions - !> Indices stored in compressed column format without a values array - TYPE BOUNDARY_CONDITIONS_SPARSITY_INDICES_TYPE - INTEGER(INTG), ALLOCATABLE :: SPARSE_ROW_INDICES(:) !Contains information used to integrate Neumann boundary conditions - TYPE BoundaryConditionsNeumannType - INTEGER(INTG), ALLOCATABLE :: setDofs(:) !Contains information on dofs associated with pressure incremented conditions - TYPE BOUNDARY_CONDITIONS_PRESSURE_INCREMENTED_TYPE - INTEGER(INTG), ALLOCATABLE :: PRESSURE_INCREMENTED_DOF_INDICES(:) !Describes the value of a DOF as a linear combination of other DOFs. - TYPE BoundaryConditionsDofConstraintType - INTEGER(INTG) :: globalDof !A pointer to a linear DOF constraint. - TYPE BoundaryConditionsDofConstraintPtrType - TYPE(BoundaryConditionsDofConstraintType), POINTER :: ptr - END TYPE BoundaryConditionsDofConstraintPtrType - - !>The coupled equations DOF information for the DOF constraints. - !>The BoundaryConditionsDofConstraintType describes how an - !>equations DOF is a linear combination of other equations DOFs. - !>This data structure describes a solver row or column that is mapped to multiple - !>equations rows or columns and is used to help build the solver mapping. - !>The first equation row/column is used as the owner of the solver row/column. - TYPE BoundaryConditionsCoupledDofsType - INTEGER(INTG) :: numberOfDofs !A pointer to the coupled equations DOF information for the DOF constraints. - TYPE BoundaryConditionsCoupledDofsPtrType - TYPE(BoundaryConditionsCoupledDofsType), POINTER :: ptr - END TYPE BoundaryConditionsCoupledDofsPtrType - - !>Describes linear constraints between solver DOFs in the solver mapping. - TYPE BoundaryConditionsDofConstraintsType - INTEGER(INTG) :: numberOfConstraints !Contains information on the setup information for an equations set - TYPE EQUATIONS_SET_SETUP_TYPE - INTEGER(INTG) :: SETUP_TYPE !Contains information on the geometry for an equations set - TYPE EQUATIONS_SET_GEOMETRY_TYPE - TYPE(EQUATIONS_SET_TYPE), POINTER :: EQUATIONS_SET !Contains information on the dependent variables for the equations set. - TYPE EQUATIONS_SET_DEPENDENT_TYPE - TYPE(EQUATIONS_SET_TYPE), POINTER :: EQUATIONS_SET !Contains information on the derived variables for the equations set, eg. stress or strain - TYPE EquationsSetDerivedType - TYPE(EQUATIONS_SET_TYPE), POINTER :: equationsSet !Contains information on the independent variables for the equations set. - TYPE EQUATIONS_SET_INDEPENDENT_TYPE - TYPE(EQUATIONS_SET_TYPE), POINTER :: EQUATIONS_SET !Contains information on the source for the equations set. - TYPE EQUATIONS_SET_SOURCE_TYPE - TYPE(EQUATIONS_SET_TYPE), POINTER :: EQUATIONS_SET !Contains information on the analytic setup for the equations set. - TYPE EQUATIONS_SET_ANALYTIC_TYPE - TYPE(EQUATIONS_SET_TYPE), POINTER :: EQUATIONS_SET !Contains information on an equations set. \see OPENCMISS::Iron::cmfe_EquationsSetType - TYPE EQUATIONS_SET_TYPE - INTEGER(INTG) :: USER_NUMBER !A buffer type to allow for an array of pointers to a EQUATIONS_SET_TYPE \see Types::EQUATIONS_SET_TYPE - TYPE EQUATIONS_SET_PTR_TYPE - TYPE(EQUATIONS_SET_TYPE), POINTER :: PTR !Contains information about an interface matrix. - TYPE INTERFACE_MATRIX_TYPE - TYPE(INTERFACE_MATRICES_TYPE), POINTER :: INTERFACE_MATRICES !A buffer type to allow for an array of pointers to a INTERFACE_MATRIX_TYPE \see Types::INTERFACE_MATRIX_TYPE. - TYPE INTERFACE_MATRIX_PTR_TYPE - TYPE(INTERFACE_MATRIX_TYPE), POINTER :: PTR !Contains information of the RHS vector for interface matrices - TYPE INTERFACE_RHS_TYPE - TYPE(INTERFACE_MATRICES_TYPE), POINTER :: INTERFACE_MATRICES !Contains information on the interface matrices - TYPE INTERFACE_MATRICES_TYPE - TYPE(INTERFACE_EQUATIONS_TYPE), POINTER :: INTERFACE_EQUATIONS !Contains information on interface variable mapping for an interface matrix. - TYPE INTERFACE_MATRIX_TO_VAR_MAP_TYPE - INTEGER(INTG) :: MATRIX_NUMBER !Contains information on an interface mapping. TODO: Generalise to non-Lagrange multipler mappings - TYPE INTERFACE_MAPPING_TYPE - TYPE(INTERFACE_EQUATIONS_TYPE), POINTER :: INTERFACE_EQUATIONS !Contains information about the interpolation for a parameter set in interface equations - TYPE INTERFACE_EQUATIONS_INTERPOLATION_SET_TYPE - TYPE(FIELD_INTERPOLATION_PARAMETERS_PTR_TYPE), POINTER :: INTERPOLATION_PARAMETERS(:) !Contains information about the interpolation for a domain (interface or coupled mesh) in the interface equations - TYPE INTERFACE_EQUATIONS_DOMAIN_INTERPOLATION_TYPE - TYPE(INTERFACE_EQUATIONS_INTERPOLATION_TYPE), POINTER :: INTERPOLATION !Contains information on the interpolation for the interface equations - TYPE INTERFACE_EQUATIONS_INTERPOLATION_TYPE - TYPE(INTERFACE_EQUATIONS_TYPE), POINTER :: INTERFACE_EQUATIONS !Contains information about the interface equations for an interface condition. - TYPE INTERFACE_EQUATIONS_TYPE - TYPE(INTERFACE_CONDITION_TYPE), POINTER :: INTERFACE_CONDITION !Contains information on the geometry for an interface condition - TYPE INTERFACE_GEOMETRY_TYPE - TYPE(INTERFACE_CONDITION_TYPE), POINTER :: INTERFACE_CONDITION !Contains information about the penalty field information for an interface condition. - TYPE INTERFACE_PENALTY_TYPE - TYPE(INTERFACE_CONDITION_TYPE), POINTER :: INTERFACE_CONDITION !Contains information about the Lagrange field information for an interface condition. - TYPE INTERFACE_LAGRANGE_TYPE - TYPE(INTERFACE_CONDITION_TYPE), POINTER :: INTERFACE_CONDITION !Contains information about the dependent field information for an interface condition. - TYPE INTERFACE_DEPENDENT_TYPE - TYPE(INTERFACE_CONDITION_TYPE), POINTER :: INTERFACE_CONDITION !Contains information for the interface condition data. - TYPE INTERFACE_CONDITION_TYPE - INTEGER(INTG) :: USER_NUMBER !A buffer type to allow for an array of pointers to a INTERFACE_CONDITION_TYPE. - TYPE INTERFACE_CONDITION_PTR_TYPE - TYPE(INTERFACE_CONDITION_TYPE), POINTER :: PTR !Contains information for interface region specific data that is not of 'region' importance. <<>> - TYPE INTERFACE_CONDITIONS_TYPE - TYPE(INTERFACE_TYPE), POINTER :: INTERFACE !Contains information on the mesh connectivity for a given coupled mesh element - TYPE INTERFACE_ELEMENT_CONNECTIVITY_TYPE - INTEGER(INTG) :: COUPLED_MESH_ELEMENT_NUMBER !< The coupled mesh number to define the connectivity for. - REAL(DP), ALLOCATABLE :: XI(:,:,:) !Contains information on the coupling between meshes in an interface - TYPE INTERFACE_MESH_CONNECTIVITY_TYPE - TYPE(INTERFACE_TYPE), POINTER :: INTERFACE !Contains information on a data connectivity point - TYPE InterfacePointConnectivityType - INTEGER(INTG) :: coupledMeshElementNumber !Contains information on the data point coupling/points connectivity between meshes in the an interface - TYPE InterfacePointsConnectivityType - TYPE(INTERFACE_TYPE), POINTER :: interface !Contains information for the interface data. - TYPE INTERFACE_TYPE - INTEGER :: USER_NUMBER !A buffer type to allow for an array of pointers to a INTERFACE_TYPE. - TYPE INTERFACE_PTR_TYPE - TYPE(INTERFACE_TYPE), POINTER :: PTR !Contains information for interfaces on a parent region. - TYPE INTERFACES_TYPE - TYPE(REGION_TYPE), POINTER :: PARENT_REGION !This type is a wrapper for the C_PTR which references the actual CellML model definition object. - TYPE CELLML_MODEL_TYPE - TYPE(CELLML_TYPE), POINTER :: CELLML !A buffer type to allow for an array of pointers to a CELLML_MODEL_TYPE - TYPE CELLML_MODEL_PTR_TYPE - TYPE(CELLML_MODEL_TYPE), POINTER :: PTR - END TYPE CELLML_MODEL_PTR_TYPE - - !>Contains information on the models field for a CellML environment - TYPE CELLML_MODELS_FIELD_TYPE - TYPE(CELLML_TYPE), POINTER :: CELLML !Contains information on the state field for a CellML environment - TYPE CELLML_STATE_FIELD_TYPE - TYPE(CELLML_TYPE), POINTER :: CELLML !Contains information on the intermediate field for a CellML environment - TYPE CELLML_INTERMEDIATE_FIELD_TYPE - TYPE(CELLML_TYPE), POINTER :: CELLML !Contains information on the parameters field for a CellML environment - TYPE CELLML_PARAMETERS_FIELD_TYPE - TYPE(CELLML_TYPE), POINTER :: CELLML ! Contains information on the solver, cellml, dof etc. for which cellml equations are to be evaluated by petsc - TYPE CellMLPETScContextType - TYPE(SOLVER_TYPE), POINTER :: solver !Contains information on the mapping between CellML fields and OpenCMISS fields and vise versa. - TYPE CELLML_MODEL_MAP_TYPE - INTEGER(INTG) :: CELLML_MAP_TYPE !Buffer type to allow an array of pointers to CELLML_MODEL_MAP_FIELD_TYPE - TYPE CELLML_MODEL_MAP_PTR_TYPE - TYPE(CELLML_MODEL_MAP_TYPE), POINTER :: PTR !Contains information on the maps between a CellML model and external OpenCMISS fields. - TYPE CELLML_MODEL_MAPS_TYPE - INTEGER(INTG) :: NUMBER_OF_FIELDS_MAPPED_TO !Buffer type to allow arrays of pointer to CELLML_MODEL_MAPS_TYPE - TYPE CELLML_MODEL_MAPS_PTR_TYPE - TYPE(CELLML_MODEL_MAPS_TYPE), POINTER :: PTR !Contains information on the maps between CellML and external OpenCMISS fields. - TYPE CELLML_FIELD_MAPS_TYPE - TYPE(CELLML_TYPE), POINTER :: CELLML !Contains information for a CellML environment. - TYPE CELLML_TYPE - TYPE(REGION_TYPE), POINTER :: REGION !Field maps. - TYPE(CELLML_MODELS_FIELD_TYPE), POINTER :: MODELS_FIELD ! A buffer type to allow for an array of pointers to a CELLML_TYPE. - !! \todo Is this needed? not currently used... - TYPE CELLML_PTR_TYPE - TYPE(CELLML_TYPE), POINTER :: PTR !< The pointer to the CellML environment. - END TYPE CELLML_PTR_TYPE - - !>Contains information on the CellML environments defined. - TYPE CELLML_ENVIRONMENTS_TYPE - TYPE(REGION_TYPE), POINTER :: REGION !Contains information on the solver matrix - TYPE SOLVER_MATRIX_TYPE - INTEGER(INTG) :: MATRIX_NUMBER !A buffer type to allow for an array of pointers to a SOLVER_MATRIX_TYPE \see TYPES:SOLUTION_MATRIX_TYPE - TYPE SOLVER_MATRIX_PTR_TYPE - TYPE(SOLVER_MATRIX_TYPE), POINTER :: PTR !Contains information on the solver matrices and rhs vector - TYPE SOLVER_MATRICES_TYPE - TYPE(SOLVER_EQUATIONS_TYPE), POINTER :: SOLVER_EQUATIONS !Contains information about the solver equations for a solver. \see OPENCMISS::Iron::cmfe_SolverEquationsType - TYPE SOLVER_EQUATIONS_TYPE - TYPE(SOLVER_TYPE), POINTER :: SOLVER !Contains information about the CellML equations for a solver. - TYPE CELLML_EQUATIONS_TYPE - TYPE(SOLVER_TYPE), POINTER :: SOLVER !Contains information for a dynamic solver - TYPE DYNAMIC_SOLVER_TYPE - TYPE(SOLVER_TYPE), POINTER :: SOLVER !Contains information for an forward Euler differential-algebraic equation solver - TYPE FORWARD_EULER_DAE_SOLVER_TYPE - TYPE(EULER_DAE_SOLVER_TYPE), POINTER :: EULER_DAE_SOLVER !Contains information for an backward Euler differential-algebraic equation solver - TYPE BACKWARD_EULER_DAE_SOLVER_TYPE - TYPE(EULER_DAE_SOLVER_TYPE), POINTER :: EULER_DAE_SOLVER !Contains information for an improved Euler differential-algebraic equation solver - TYPE IMPROVED_EULER_DAE_SOLVER_TYPE - TYPE(EULER_DAE_SOLVER_TYPE), POINTER :: EULER_DAE_SOLVER !Contains information for an Euler differential-algebraic equation solver - TYPE EULER_DAE_SOLVER_TYPE - TYPE(DAE_SOLVER_TYPE), POINTER :: DAE_SOLVER !Contains information for a Crank-Nicholson differential-algebraic equation solver - TYPE CRANK_NICOLSON_DAE_SOLVER_TYPE - TYPE(DAE_SOLVER_TYPE), POINTER :: DAE_SOLVER !Contains information for a Runge-Kutta differential-algebraic equation solver - TYPE RUNGE_KUTTA_DAE_SOLVER_TYPE - TYPE(DAE_SOLVER_TYPE), POINTER :: DAE_SOLVER !Contains information for an Adams-Moulton differential-algebraic equation solver - TYPE ADAMS_MOULTON_DAE_SOLVER_TYPE - TYPE(DAE_SOLVER_TYPE), POINTER :: DAE_SOLVER !Contains information for a BDF differential-algebraic equation solver - TYPE BDF_DAE_SOLVER_TYPE - TYPE(DAE_SOLVER_TYPE), POINTER :: DAE_SOLVER !Contains information for a Rush-Larson differential-algebraic equation solver - TYPE RUSH_LARSON_DAE_SOLVER_TYPE - TYPE(DAE_SOLVER_TYPE), POINTER :: DAE_SOLVER !Contains information for an external differential-algebraic equation solver - TYPE EXTERNAL_DAE_SOLVER_TYPE - TYPE(DAE_SOLVER_TYPE), POINTER :: DAE_SOLVER !Contains information for an differential-algebraic equation solver - TYPE DAE_SOLVER_TYPE - TYPE(SOLVER_TYPE), POINTER :: SOLVER !Contains information for a direct linear solver - TYPE LINEAR_DIRECT_SOLVER_TYPE - TYPE(LINEAR_SOLVER_TYPE), POINTER :: LINEAR_SOLVER !Contains information for an iterative linear solver - TYPE LINEAR_ITERATIVE_SOLVER_TYPE - TYPE(LINEAR_SOLVER_TYPE), POINTER :: LINEAR_SOLVER !Contains information for a linear solver - TYPE LINEAR_SOLVER_TYPE - TYPE(SOLVER_TYPE), POINTER :: SOLVER !Contains information for a Newton line search nonlinear solver - TYPE NEWTON_LINESEARCH_SOLVER_TYPE - TYPE(NEWTON_SOLVER_TYPE), POINTER :: NEWTON_SOLVER !Contains information for a Newton trust region nonlinear solver - TYPE NEWTON_TRUSTREGION_SOLVER_TYPE - TYPE(NEWTON_SOLVER_TYPE), POINTER :: NEWTON_SOLVER !Contains information about the convergence test for a newton solver - TYPE NewtonSolverConvergenceTest - REAL(DP) :: energyFirstIter !Contains information for a Newton nonlinear solver - TYPE NEWTON_SOLVER_TYPE - TYPE(NONLINEAR_SOLVER_TYPE), POINTER :: NONLINEAR_SOLVER !Contains information for a Quasi-Newton line search nonlinear solver - TYPE QUASI_NEWTON_LINESEARCH_SOLVER_TYPE - TYPE(QUASI_NEWTON_SOLVER_TYPE), POINTER :: QUASI_NEWTON_SOLVER !Contains information for a Quasi-Newton trust region nonlinear solver - TYPE QUASI_NEWTON_TRUSTREGION_SOLVER_TYPE - TYPE(QUASI_NEWTON_SOLVER_TYPE), POINTER :: QUASI_NEWTON_SOLVER !Contains information for a Quasi-Newton nonlinear solver - TYPE QUASI_NEWTON_SOLVER_TYPE - TYPE(NONLINEAR_SOLVER_TYPE), POINTER :: NONLINEAR_SOLVER !Contains information for a nonlinear solver - TYPE NONLINEAR_SOLVER_TYPE - TYPE(SOLVER_TYPE), POINTER :: SOLVER !Contains information for an eigenproblem solver - TYPE EIGENPROBLEM_SOLVER_TYPE - TYPE(SOLVER_TYPE), POINTER :: SOLVER !Contains information for an optimiser solver - TYPE OptimiserSolverType - TYPE(SOLVER_TYPE), POINTER :: solver !Contains information for a CellML evaluation solver - TYPE CELLML_EVALUATOR_SOLVER_TYPE - TYPE(SOLVER_TYPE), POINTER :: SOLVER !Contains information for a geometric transformation solver - TYPE GeometricTransformationSolverType - TYPE(SOLVER_TYPE), POINTER :: solver !A buffer type to allow for an array of pointers to a SOLVER_TYPE \see Types::SOLVER_TYPE - TYPE SOLVER_PTR_TYPE - TYPE(SOLVER_TYPE), POINTER :: PTR - END TYPE SOLVER_PTR_TYPE - - !>Contains information on the type of solver to be used. \see OPENCMISS::Iron::cmfe_SolverType - TYPE SOLVER_TYPE - TYPE(SOLVERS_TYPE), POINTER :: SOLVERS !Contains information on the solvers to be used in a control loop - TYPE SOLVERS_TYPE - TYPE(CONTROL_LOOP_TYPE), POINTER :: CONTROL_LOOP !A buffer type to allow for an array of pointers to a EQUATIONS_TO_SOLVER_MAPS_TYPE \see Types::EQUATIONS_TO_SOLVER_MAPS_TYPE - TYPE EQUATIONS_TO_SOLVER_MAPS_PTR_TYPE - TYPE(EQUATIONS_TO_SOLVER_MAPS_TYPE), POINTER :: PTR !A buffer type to allow for an array of pointers to a INTERFACE_TO_SOLVER_MAPS_TYPE \see Types::INTERFACE_TO_SOLVER_MAPS_TYPE - TYPE INTERFACE_TO_SOLVER_MAPS_PTR_TYPE - TYPE(INTERFACE_TO_SOLVER_MAPS_TYPE), POINTER :: PTR !Contains information on the mappings between field variable dofs inequations and the solver matrix columns (solver dofs) \todo rename solver col to be solver dof here??? - TYPE VARIABLE_TO_SOLVER_COL_MAP_TYPE - INTEGER(INTG), ALLOCATABLE :: COLUMN_NUMBERS(:) !Contains information on the equations to solver matrix mappings when indexing by solver matrix number - TYPE EQUATIONS_TO_SOLVER_MATRIX_MAPS_SM_TYPE - INTEGER(INTG) :: SOLVER_MATRIX_NUMBER !Contains information on the equations to solver matrix mappings when indexing by equations matrix number - TYPE EQUATIONS_TO_SOLVER_MATRIX_MAPS_EM_TYPE - INTEGER(INTG) :: EQUATIONS_MATRIX_NUMBER !Contains information on the mapping from the equations rows in an equations set to the solver rows - TYPE EQUATIONS_ROW_TO_SOLVER_ROWS_MAP_TYPE - INTEGER(INTG) :: NUMBER_OF_SOLVER_ROWS !Contains information on the mappings from an equations set to the solver matrices - TYPE EQUATIONS_SET_TO_SOLVER_MAP_TYPE - INTEGER(INTG) :: EQUATIONS_SET_INDEX !Contains information on the interface to solver matrix mappings when indexing by solver matrix number - TYPE INTERFACE_TO_SOLVER_MATRIX_MAPS_SM_TYPE - INTEGER(INTG) :: SOLVER_MATRIX_NUMBER !Contains information on the mapping from an interface condition column to a solver row. - TYPE INTERFACE_ROW_TO_SOLVER_ROWS_MAP_TYPE - INTEGER(INTG) :: NUMBER_OF_SOLVER_ROWS !Contains information on the interface to solver matrix mappings when indexing by interface matrix number - TYPE INTERFACE_TO_SOLVER_MATRIX_MAPS_IM_TYPE - INTEGER(INTG) :: INTERFACE_MATRIX_NUMBER !Contains information on the mapping from an interface condition column to a solver row. - TYPE INTERFACE_COLUMN_TO_SOLVER_ROWS_MAP_TYPE - INTEGER(INTG) :: NUMBER_OF_SOLVER_ROWS !Contains information on the mappings from an interface condition to the solver matrices - TYPE INTERFACE_CONDITION_TO_SOLVER_MAP_TYPE - INTEGER(INTG) :: INTERFACE_CONDITION_INDEX !Contains information about the mapping from a solver matrix column to dynamic equations matrices and variables - TYPE SOLVER_COL_TO_DYNAMIC_EQUATIONS_MAP_TYPE - INTEGER(INTG) :: NUMBER_OF_DYNAMIC_EQUATIONS_MATRICES !Contains information about the mapping from a solver matrix column to static equations matrices and variables - TYPE SOLVER_COL_TO_STATIC_EQUATIONS_MAP_TYPE - INTEGER(INTG) :: NUMBER_OF_LINEAR_EQUATIONS_MATRICES !Contains information about mapping the solver dof to the field variable dofs in the equations set. - TYPE SOLVER_DOF_TO_VARIABLE_MAP_TYPE - INTEGER(INTG) :: NUMBER_OF_EQUATION_DOFS !Contains information about the mappings from a solver matrix to the equations in an equations set - TYPE SOLVER_COL_TO_EQUATIONS_SET_MAP_TYPE - TYPE(EquationsType), POINTER :: EQUATIONS !Contains information about the mapping from a solver matrix column to interface equations matrices and variables - TYPE SOLVER_COL_TO_INTERFACE_EQUATIONS_MAP_TYPE - INTEGER(INTG) :: NUMBER_OF_INTERFACE_MATRICES !Contains information about the mappings from a solver matrix to the equations in an equations set - TYPE SOLVER_COL_TO_INTERFACE_MAP_TYPE - TYPE(EquationsType), POINTER :: INTERFACE_EQUATIONS !Contains information on the mappings from a solver matrix to equations sets - TYPE SOLVER_COL_TO_EQUATIONS_MAPS_TYPE - INTEGER(INTG) :: SOLVER_MATRIX_NUMBER !Contains information on the mappings from a solver row to the equations. - TYPE SOLVER_ROW_TO_EQUATIONS_MAPS_TYPE - INTEGER(INTG) :: NUMBER_OF_EQUATIONS_SET_ROWS !Contains information about the cached create values for a solver mapping - TYPE SOLVER_MAPPING_CREATE_VALUES_CACHE_TYPE - TYPE(LIST_PTR_TYPE), POINTER :: EQUATIONS_VARIABLE_LIST(:) !Contains information on the variables involved in a solver matrix - TYPE SOLVER_MAPPING_VARIABLES_TYPE - INTEGER(INTG) :: NUMBER_OF_VARIABLES !Describes the coupled rows or columns in the solver mapping - TYPE SolverMappingDofCouplingsType - INTEGER(INTG) :: numberOfCouplings !Contains information on the solver mapping between the global equation sets and the solver matrices. - TYPE SOLVER_MAPPING_TYPE - TYPE(SOLVER_EQUATIONS_TYPE), POINTER :: SOLVER_EQUATIONS !Contains information about a history file for a control loop. \see OPENCMISS::Iron::cmfe_HistoryType - TYPE HISTORY_TYPE - TYPE(CONTROL_LOOP_TYPE), POINTER :: CONTROL_LOOP !Contains information on a simple (execute once) control loop - TYPE CONTROL_LOOP_SIMPLE_TYPE - TYPE(CONTROL_LOOP_TYPE), POINTER :: CONTROL_LOOP - END TYPE CONTROL_LOOP_SIMPLE_TYPE - - !>Contains information on a fixed iteration control loop - TYPE CONTROL_LOOP_FIXED_TYPE - TYPE(CONTROL_LOOP_TYPE), POINTER :: CONTROL_LOOP - INTEGER(INTG) :: ITERATION_NUMBER - INTEGER(INTG) :: START_ITERATION - INTEGER(INTG) :: STOP_ITERATION - INTEGER(INTG) :: ITERATION_INCREMENT - END TYPE CONTROL_LOOP_FIXED_TYPE - - !>Contains information on a time iteration control loop - TYPE CONTROL_LOOP_TIME_TYPE - TYPE(CONTROL_LOOP_TYPE), POINTER :: CONTROL_LOOP - INTEGER(INTG) :: ITERATION_NUMBER - INTEGER(INTG) :: GLOBAL_ITERATION_NUMBER -! sebk: is thei usefull? - INTEGER(INTG) :: OUTPUT_NUMBER !< The frequency of output, is only used if the specific problem implementation accesses it - INTEGER(INTG) :: INPUT_NUMBER - REAL(DP) :: CURRENT_TIME - REAL(DP) :: START_TIME - REAL(DP) :: STOP_TIME - REAL(DP) :: TIME_INCREMENT - INTEGER(INTG) :: NUMBER_OF_ITERATIONS !< The total number of iterations for this loop, if 0 it will be computed from time span and increment - END TYPE CONTROL_LOOP_TIME_TYPE - - !>Contains information on a do-while control loop - TYPE CONTROL_LOOP_WHILE_TYPE - TYPE(CONTROL_LOOP_TYPE), POINTER :: CONTROL_LOOP - INTEGER(INTG) :: ITERATION_NUMBER - INTEGER(INTG) :: MAXIMUM_NUMBER_OF_ITERATIONS - REAL(DP) :: ABSOLUTE_TOLERANCE - REAL(DP) :: RELATIVE_TOLERANCE - LOGICAL :: CONTINUE_LOOP - END TYPE CONTROL_LOOP_WHILE_TYPE - - !>Contains information on a load-increment control loop - TYPE CONTROL_LOOP_LOAD_INCREMENT_TYPE - TYPE(CONTROL_LOOP_TYPE), POINTER :: CONTROL_LOOP - INTEGER(INTG) :: ITERATION_NUMBER - INTEGER(INTG) :: MAXIMUM_NUMBER_OF_ITERATIONS - INTEGER(INTG) :: OUTPUT_NUMBER - END TYPE CONTROL_LOOP_LOAD_INCREMENT_TYPE - - !>Contains information about a dependent field variable involved in a control loop solver. - TYPE ControlLoopFieldVariableType - TYPE(FIELD_VARIABLE_TYPE), POINTER :: fieldVariable !Contains information on the list of dependent field variables involved in the control loop solvers. - TYPE ControlLoopFieldVariablesType - INTEGER(INTG) :: numberOfFieldVariables !A buffer type to allow for an array of pointers to a CONTROL_LOOP_TYPE \see Types::CONTROL_LOOP_TYPE - TYPE CONTROL_LOOP_PTR_TYPE - TYPE(CONTROL_LOOP_TYPE), POINTER :: PTR !Contains information on a control loop. \see OPENCMISS::Iron::cmfe_ControlLoopType - TYPE CONTROL_LOOP_TYPE - TYPE(PROBLEM_TYPE), POINTER :: PROBLEM !Contains information for a problem. \see OPENCMISS::Iron::cmfe_ProblemType - TYPE PROBLEM_TYPE - INTEGER(INTG) :: USER_NUMBER !A buffer type to allow for an array of pointers to a PROBLEM_TYPE \see TYPES:PROBLEM_TYPE - TYPE PROBLEM_PTR_TYPE - TYPE(PROBLEM_TYPE), POINTER :: PTR !Contains information on the problems defined. - TYPE PROBLEMS_TYPE - INTEGER(INTG) :: NUMBER_OF_PROBLEMS !A buffer type to allow for an array of pointers to a REGION_TYPE. - TYPE REGION_PTR_TYPE - TYPE(REGION_TYPE), POINTER :: PTR !Contains information for a region. \see OPENCMISS::Iron::cmfe_RegionType - TYPE REGION_TYPE - INTEGER(INTG) :: USER_NUMBER !Contains information about the regions - TYPE REGIONS_TYPE - TYPE(REGION_TYPE), POINTER :: WORLD_REGION ! \file +!> \author Chris Bradley +!> \brief This module contains all type definitions in order to avoid cyclic module references. +!> +!> \section LICENSE +!> +!> Version: MPL 1.1/GPL 2.0/LGPL 2.1 +!> +!> The contents of this file are subject to the Mozilla Public License +!> Version 1.1 (the "License"); you may not use this file except in +!> compliance with the License. You may obtain a copy of the License at +!> http://www.mozilla.org/MPL/ +!> +!> Software distributed under the License is distributed on an "AS IS" +!> basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +!> License for the specific language governing rights and limitations +!> under the License. +!> +!> The Original Code is OpenCMISS +!> +!> The Initial Developer of the Original Code is University of Auckland, +!> Auckland, New Zealand, the University of Oxford, Oxford, United +!> Kingdom and King's College, London, United Kingdom. Portions created +!> by the University of Auckland, the University of Oxford and King's +!> College, London are Copyright (C) 2007-2010 by the University of +!> Auckland, the University of Oxford and King's College, London. +!> All Rights Reserved. +!> +!> Contributor(s): Chris Bradley +!> +!> Alternatively, the contents of this file may be used under the terms of +!> either the GNU General Public License Version 2 or later (the "GPL"), or +!> the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), +!> in which case the provisions of the GPL or the LGPL are applicable instead +!> of those above. If you wish to allow use of your version of this file only +!> under the terms of either the GPL or the LGPL, and not to allow others to +!> use your version of this file under the terms of the MPL, indicate your +!> decision by deleting the provisions above and replace them with the notice +!> and other provisions required by the GPL or the LGPL. If you do not delete +!> the provisions above, a recipient may use your version of this file under +!> the terms of any one of the MPL, the GPL or the LGPL. +!> + +!#### Index: ne +!### Description: +!### Index label for a element. +!#### Index: ng +!### Description: +!### Index label for a gauss point. +!#### Index: ni +!### Description: +!### Index label for a xi direction. +!#### Index: nk +!### Description: +!### Index label for a derivative with respect to the global directions. +!#### Index: nn +!### Description: +!### Index for a local node within an element. +!#### Index: np +!### Description: +!### Index for a node. +!#### Index: ns +!### Description: +!### Index for a element parameter within an element. +!#### Index: nu +!### Description: +!### Index for a partial derivative. + +!> This module contains all type definitions in order to avoid cyclic module references. +MODULE Types + + USE CMISSPETScTypes, ONLY : PetscISColoringType,PetscKspType,PetscMatType,PetscMatColoringType,PetscMatFDColoringType, & + & PetscPCType,PetscSnesType,PetscSnesLineSearchType,PetscTaoType,PetscVecType + USE Constants + USE Kinds + USE ISO_C_BINDING + USE ISO_VARYING_STRING +#ifndef NOMPIMOD + USE MPI +#endif + USE Trees + use linkedlist_routines + + IMPLICIT NONE + + PRIVATE + +#ifdef NOMPIMOD +#include "mpif.h" +#endif + + + ! + !================================================================================================================================ + ! + ! Base types + ! + + TYPE REAL_DP_PTR_TYPE + REAL(DP), POINTER :: PTR(:) + END TYPE REAL_DP_PTR_TYPE + + TYPE INTEGER_INTG_PTR_TYPE + INTEGER(INTG), POINTER :: PTR(:) + END TYPE INTEGER_INTG_PTR_TYPE + + TYPE INTEGER_CINT_ALLOC_TYPE + INTEGER(C_INT), ALLOCATABLE :: ARRAY(:) + END TYPE INTEGER_CINT_ALLOC_TYPE + + PUBLIC REAL_DP_PTR_TYPE,INTEGER_INTG_PTR_TYPE,INTEGER_CINT_ALLOC_TYPE + + ! + !================================================================================================================================ + ! + ! List types + ! + + !>Buffer type to allow arrays of pointers to a list + TYPE LIST_PTR_TYPE + TYPE(LIST_TYPE), POINTER :: PTR !Contains information on a list + TYPE LIST_TYPE + LOGICAL :: MUTABLE ! 1) for integer lists. + REAL(SP), ALLOCATABLE :: LIST_SP(:) ! 1) for single precision real lists. + REAL(DP), ALLOCATABLE :: LIST_DP(:) ! 1) for double precision real lists. + INTEGER(C_INT), ALLOCATABLE :: LIST_C_INT(:) ! 1) for integer lists. + END TYPE LIST_TYPE + + PUBLIC LIST_PTR_TYPE,LIST_TYPE + + ! + !================================================================================================================================ + ! + ! Quadrature types + ! + + !>Contains information for a particular quadrature scheme. \see OpenCMISS::Iron::cmfe_QuadratureSchemeType \todo Also evaluate the product of the basis functions at gauss points for speed??? + TYPE QUADRATURE_SCHEME_TYPE + INTEGER(INTG) :: GLOBAL_NUMBER !A buffer type to allow for an array of pointers to a QUADRATURE_SCHEME_TYPE \see Types::QUADRATURE_SCHEME_TYPE + TYPE QUADRATURE_SCHEME_PTR_TYPE + TYPE(QUADRATURE_SCHEME_TYPE), POINTER :: PTR !Contains information on the quadrature to be used for integrating a basis. \see OpenCMISS::Iron::cmfe_QuadratureType + TYPE QUADRATURE_TYPE + INTEGER(INTG) :: TYPE ! A buffer type to allow for an array of pointers to a BASIS_TYPE. + TYPE BASIS_PTR_TYPE + TYPE(BASIS_TYPE), POINTER :: PTR ! Contains all information about a basis . + TYPE BASIS_TYPE + !\todo Add in different sub types for the different types of bases??? + INTEGER(INTG) :: USER_NUMBER ! 1. + TYPE(BASIS_PTR_TYPE), ALLOCATABLE :: faceBases(:) ! 2. + INTEGER(INTG) :: numberOfSubBases !Contains information on the defined basis functions + TYPE BasisFunctionsType + TYPE(ContextType), POINTER :: context !Contains information on a coordinate system. \todo Have a list of coordinate systems and have a pointer in the coordinate_system_type back to the regions that use them. + TYPE COORDINATE_SYSTEM_TYPE + INTEGER(INTG) :: USER_NUMBER !A buffer type to allow for an array of pointers to a COORDINATE_SYSTEM_TYPE. + TYPE COORDINATE_SYSTEM_PTR_TYPE + TYPE(COORDINATE_SYSTEM_TYPE), POINTER :: PTR !Contains information on the list of coordinate systems + TYPE CoordinateSystemsType + TYPE(ContextType), POINTER :: context !Contains information about a data projection result. + TYPE DataProjectionResultType + INTEGER(INTG) :: userNumber !Contains information on projection candidates + TYPE DataProjectionCandidateType + INTEGER(INTG), ALLOCATABLE :: candidateElementNumbers(:) !Contains information on a data point projection + TYPE DataProjectionType + INTEGER(INTG) :: globalNumber !A buffer type to allow for an array of pointers to a DataProjectionType. + TYPE DataProjectionPtrType + TYPE(DataProjectionType), POINTER :: ptr !Contains information on the data point projectiosn defined on data points + TYPE DataProjectionsType + TYPE(DataPointsType), POINTER :: dataPoints !Contains information about a data point. + TYPE DataPointType + INTEGER(INTG) :: globalNumber !Contains information on the data points defined on a region. \see OpenCMISS::Iron::cmfe_DataPointsType + TYPE DataPointsType + INTEGER(INTG) :: globalNumber !A buffer type to allow for an array of pointers to a DataPointsType. + TYPE DataPointsPtrType + TYPE(DataPointsType), POINTER :: ptr !Contains information on the data point sets defined on a region. + TYPE DataPointSetsType + TYPE(REGION_TYPE), POINTER :: region !Contains information about a node. + TYPE NODE_TYPE + INTEGER(INTG) :: GLOBAL_NUMBER !Contains information on the nodes defined on a region. \see OpenCMISS::Iron::cmfe_NodesType + TYPE NODES_TYPE + TYPE(REGION_TYPE), POINTER :: REGION !Contains information on the dofs for a mesh. + TYPE MeshDofsType + TYPE(MeshComponentTopologyType), POINTER :: meshComponentTopology !Contains information on the mesh adjacent elements for a xi coordinate + TYPE MESH_ADJACENT_ELEMENT_TYPE + INTEGER(INTG) :: NUMBER_OF_ADJACENT_ELEMENTS !Contains the information for an element in a mesh. + TYPE MESH_ELEMENT_TYPE + INTEGER(INTG) :: GLOBAL_NUMBER !Contains the information for the elements of a mesh. + TYPE MeshElementsType + TYPE(MeshComponentTopologyType), POINTER :: meshComponentTopology !Contains the information for a node derivative of a mesh. + TYPE MeshNodeDerivativeType + INTEGER(INTG) :: numberOfVersions !The number of global versions at the node for the mesh. + INTEGER(INTG), ALLOCATABLE :: userVersionNumbers(:) !userVersionNumbers(versionIdx). The user version numbers for the versionIdx'th version for the node. + INTEGER(INTG), ALLOCATABLE :: dofIndex(:) !The global dof version index (nv) in the domain of the nk'th global derivative for the node. + INTEGER(INTG) :: globalDerivativeIndex !The global derivative index of the nk'th global derivative for the node. + INTEGER(INTG) :: partialDerivativeIndex !The partial derivative index (nu) of the nk'th global derivative for the node. Old CMISS name NUNK(nk,nj,np). + END TYPE MeshNodeDerivativeType + + !>Contains the topology information for a global node of a mesh. + TYPE MeshNodeType + INTEGER(INTG) :: meshNumber !Contains the information for the nodes of a mesh. + TYPE MeshNodesType + TYPE(MeshComponentTopologyType), POINTER :: meshComponentTopology !Contains information on the projected data points on an element + TYPE MeshElementDataPointsType + INTEGER(INTG) :: numberOfProjectedData !Contains information of the projected data point + TYPE MeshDataPointType + INTEGER(INTG) :: userNumber !Contains information on the (global) topology of a mesh. + TYPE MeshComponentTopologyType + TYPE(MESH_TYPE), POINTER :: mesh !A buffer type to allow for an array of pointers to a MeshComponentTopologyType. + TYPE MeshComponentTopologyPtrType + TYPE(MeshComponentTopologyType), POINTER :: ptr !Embedded mesh types + TYPE EMBEDDING_XI_TYPE + INTEGER(INTG) :: NUMBER_OF_NODES !Contains information on a mesh defined on a region. \see OpenCMISS::Iron::cmfe_MeshType + TYPE MESH_TYPE + INTEGER(INTG) :: USER_NUMBER !A buffer type to allow for an array of pointers to a MESH_TYPE. + TYPE MESH_PTR_TYPE + TYPE(MESH_TYPE), POINTER :: PTR !Contains information on the meshes defined on a region. + TYPE MESHES_TYPE + TYPE(REGION_TYPE), POINTER :: REGION !Contains information on a generated regular mesh + TYPE GENERATED_MESH_REGULAR_TYPE + TYPE(GENERATED_MESH_TYPE), POINTER :: GENERATED_MESH !Contains information of a generated cylinder mesh + !>Allows only a 3D cylinder mesh with xi directions (r,theta,z) + TYPE GENERATED_MESH_CYLINDER_TYPE + TYPE(GENERATED_MESH_TYPE), POINTER :: GENERATED_MESH !Contains information of a generated ellipsoid mesh + !>Allows only a 3D ellipsoid mesh + TYPE GENERATED_MESH_ELLIPSOID_TYPE + TYPE(GENERATED_MESH_TYPE), POINTER :: GENERATED_MESH !Contains information on a generated mesh. \see OpenCMISS::Iron::cmfe_GeneratedMeshType + TYPE GENERATED_MESH_TYPE + INTEGER(INTG) :: USER_NUMBER !A buffer type to allow for an array of pointers to a GENERATED_MESH_TYPE. + TYPE GENERATED_MESH_PTR_TYPE + TYPE(GENERATED_MESH_TYPE), POINTER :: PTR !Contains information on the generated meshes defined on a region. + TYPE GeneratedMeshesType + TYPE(REGION_TYPE), POINTER :: region !Contains information on the degrees-of-freedom (dofs) for a domain. + TYPE DOMAIN_DOFS_TYPE + TYPE(DOMAIN_TYPE), POINTER :: DOMAIN !Contains the information for a line in a domain. + TYPE DOMAIN_LINE_TYPE + INTEGER(INTG) :: NUMBER !A buffer type to allow for an array of pointers to a DOMAIN_LINE_TYPE + TYPE DOMAIN_LINE_PTR_TYPE + TYPE(DOMAIN_LINE_TYPE), POINTER :: PTR !Contains the topology information for the lines of a domain. + TYPE DOMAIN_LINES_TYPE + TYPE(DOMAIN_TYPE), POINTER :: DOMAIN !Contains the information for a face in a domain. + TYPE DOMAIN_FACE_TYPE + INTEGER(INTG) :: NUMBER !A buffer type to allow for an array of pointers to a DOMAIN_FACE_TYPE. + TYPE DOMAIN_FACE_PTR_TYPE + TYPE(DOMAIN_FACE_TYPE), POINTER :: PTR !Contains the topology information for the faces of a domain. + TYPE DOMAIN_FACES_TYPE + TYPE(DOMAIN_TYPE), POINTER :: DOMAIN !Contains the information for an element in a domain. + TYPE DOMAIN_ELEMENT_TYPE + INTEGER(INTG) :: NUMBER !Contains the topology information for the elements of a domain. + TYPE DOMAIN_ELEMENTS_TYPE + TYPE(DOMAIN_TYPE), POINTER :: DOMAIN !Contains the topology information for a local node derivative of a domain. + TYPE DOMAIN_NODE_DERIVATIVE_TYPE + INTEGER(INTG) :: numberOfVersions !The number of global versions at the node for the mesh. + INTEGER(INTG), ALLOCATABLE :: userVersionNumbers(:) !The user version index of the nk'th global derivative for the node. + INTEGER(INTG), ALLOCATABLE :: DOF_INDEX(:) !The local dof derivative version index in the domain of the nk'th global derivative for the node. + INTEGER(INTG) :: GLOBAL_DERIVATIVE_INDEX !The global derivative index of the nk'th global derivative for the node. + INTEGER(INTG) :: PARTIAL_DERIVATIVE_INDEX !The partial derivative index (nu) of the nk'th global derivative for the node. Old CMISS name NUNK(nk,nj,np). + END TYPE DOMAIN_NODE_DERIVATIVE_TYPE + + !>Contains the topology information for a local node of a domain. + TYPE DOMAIN_NODE_TYPE + INTEGER(INTG) :: LOCAL_NUMBER !Contains the topology information for the nodes of a domain + TYPE DOMAIN_NODES_TYPE + TYPE(DOMAIN_TYPE), POINTER :: DOMAIN !Contains the topology information for a domain + TYPE DOMAIN_TOPOLOGY_TYPE + TYPE(DOMAIN_TYPE), POINTER :: DOMAIN !Contains the information for an adjacent domain for transfering the ghost data of a distributed vector to/from the + !>current domain. + TYPE DistributedVectorTransferType + TYPE(DistributedVectorCMISSType), POINTER :: cmissVector !Contains information for a CMISS distributed vector + TYPE DistributedVectorCMISSType + TYPE(DistributedVectorType), POINTER :: distributedVector !Contains information for a PETSc distributed vector + TYPE DistributedVectorPETScType + TYPE(DistributedVectorType), POINTER :: distributedVector !Contains the information for a vector that is distributed across a number of domains. + TYPE DistributedVectorType + LOGICAL :: vectorFinished !Contains information for a CMISS distributed matrix + TYPE DistributedMatrixCMISSType + TYPE(DistributedMatrixType), POINTER :: distributedMatrix !Contains information for a PETSc distributed matrix + TYPE DistributedMatrixPETScType + TYPE(DistributedMatrixType), POINTER :: distributedMatrix !Contains the information for a matrix that is distributed across a number of domains. + TYPE DistributedMatrixType + LOGICAL :: matrixFinished !Contains information for a vector + TYPE VECTOR_TYPE + INTEGER(INTG) :: ID !Contains information for a matrix + TYPE MATRIX_TYPE + INTEGER(INTG) :: ID !Contains the information on an adjacent domain to a domain in a domain mapping. + TYPE DOMAIN_ADJACENT_DOMAIN_TYPE + INTEGER(INTG) :: DOMAIN_NUMBER !Contains the local information for a global mapping number for a domain mapping. + TYPE DOMAIN_GLOBAL_MAPPING_TYPE + INTEGER(INTG) :: NUMBER_OF_DOMAINS !Contains information on the domain mappings (i.e., local and global numberings). + TYPE DOMAIN_MAPPING_TYPE + TYPE(WorkGroupType), POINTER :: workGroup !Contains information on the domain decomposition mappings. + TYPE DOMAIN_MAPPINGS_TYPE + TYPE(DOMAIN_TYPE), POINTER :: DOMAIN !A pointer to the domain decomposition for this domain. + TYPE DOMAIN_TYPE + TYPE(DECOMPOSITION_TYPE), POINTER :: DECOMPOSITION !A buffer type to allow for an array of pointers to a DOMAIN_TYPE. + TYPE DOMAIN_PTR_TYPE + TYPE(DOMAIN_TYPE), POINTER :: PTR !Contains the information for a line in a decomposition. + TYPE DECOMPOSITION_LINE_TYPE + INTEGER(INTG) :: NUMBER !Contains the topology information for the lines of a decomposition. + TYPE DECOMPOSITION_LINES_TYPE + TYPE(DECOMPOSITION_TYPE), POINTER :: DECOMPOSITION !Contains the information for a face in a decomposition. + TYPE DECOMPOSITION_FACE_TYPE + INTEGER(INTG) :: NUMBER !Contains the topology information for the faces of a decomposition. + TYPE DECOMPOSITION_FACES_TYPE + TYPE(DECOMPOSITION_TYPE), POINTER :: DECOMPOSITION !Contains information on the decomposition adjacent elements for a xi coordinate + TYPE DECOMPOSITION_ADJACENT_ELEMENT_TYPE + INTEGER(INTG) :: NUMBER_OF_ADJACENT_ELEMENTS !Contains the information for an element in a decomposition. + TYPE DECOMPOSITION_ELEMENT_TYPE + INTEGER(INTG) :: LOCAL_NUMBER !Contains the topology information for the elements of a decomposition. + TYPE DECOMPOSITION_ELEMENTS_TYPE + TYPE(DECOMPOSITION_TYPE), POINTER :: DECOMPOSITION !Contains data point information + TYPE DecompositionElementDataPointType + INTEGER(INTG) :: userNumber !Contains information on the projected data points on an element, for decomposition since data points on elements go with the elements + TYPE DecompositionElementDataPointsType + INTEGER(INTG) :: numberOfProjectedData !Contains data point decompostion topology + TYPE DecompositionDataPointsType + TYPE(DECOMPOSITION_TYPE), POINTER :: DECOMPOSITION !Contains the topology information for a decomposition + TYPE DECOMPOSITION_TOPOLOGY_TYPE + TYPE(DECOMPOSITION_TYPE), POINTER :: decomposition !Contains information on the mesh decomposition. \see OpenCMISS::Iron::cmfe_DecompositionType + TYPE DECOMPOSITION_TYPE + INTEGER(INTG) :: USER_NUMBER !A buffer type to allow for an array of pointers to a DECOMPOSITION_TYPE. + TYPE DECOMPOSITION_PTR_TYPE + TYPE(DECOMPOSITION_TYPE), POINTER :: PTR !Contains information on the domain decompositions defined on a mesh. + TYPE DECOMPOSITIONS_TYPE + TYPE(MESH_TYPE), POINTER :: mesh !Contains information on a physical point in a field. + TYPE FIELD_PHYSICAL_POINT_TYPE + TYPE(FIELD_INTERPOLATED_POINT_TYPE), POINTER :: FIELD_INTERPOLATED_POINT !Buffer type to allow for arrays of pointers to FIELD_PHYSICAL_POINT_TYPE + TYPE FIELD_PHYSICAL_POINT_PTR_TYPE + TYPE(FIELD_PHYSICAL_POINT_TYPE), POINTER :: PTR + END TYPE FIELD_PHYSICAL_POINT_PTR_TYPE + + !> Contains the interpolated point coordinate metrics. Old CMISS name GL,GU,RG. + TYPE FIELD_INTERPOLATED_POINT_METRICS_TYPE + TYPE(FIELD_INTERPOLATED_POINT_TYPE), POINTER :: INTERPOLATED_POINT !Contains the interpolated value (and the derivatives wrt xi) of a field at a point. Old CMISS name XG. + TYPE FIELD_INTERPOLATED_POINT_TYPE + TYPE(FIELD_INTERPOLATION_PARAMETERS_TYPE), POINTER :: INTERPOLATION_PARAMETERS !Contains the parameters required to interpolate a field variable within an element. Old CMISS name XE + TYPE FIELD_INTERPOLATION_PARAMETERS_TYPE + TYPE(FIELD_TYPE), POINTER :: FIELD !Contains the geometric parameters (lines, faces, volumes etc.) for a geometric field decomposition. + TYPE FIELD_GEOMETRIC_PARAMETERS_TYPE + INTEGER(INTG) :: NUMBER_OF_LINES !A type to hold the scale factors for the appropriate mesh component of a field. + TYPE FIELD_SCALING_TYPE + INTEGER(INTG) :: MESH_COMPONENT_NUMBER !A type to hold the field scalings for the field. + TYPE FIELD_SCALINGS_TYPE + INTEGER(INTG) :: SCALING_TYPE ! A type to hold the mapping from field dof numbers to field parameters (nodes, elements, etc) + TYPE FIELD_DOF_TO_PARAM_MAP_TYPE + INTEGER(INTG) :: NUMBER_OF_DOFS !A type to hold the mapping from a field node derivative's versions to field dof numbers for a particular field variable component. + TYPE FIELD_NODE_PARAM_TO_DOF_MAP_DERIVATIVE_TYPE + INTEGER(INTG) :: NUMBER_OF_VERSIONS !A type to hold the mapping from a field node's derivative to field dof numbers for a particular field variable component. + TYPE FIELD_NODE_PARAM_TO_DOF_MAP_NODE_TYPE + INTEGER(INTG) :: NUMBER_OF_DERIVATIVES !A type to hold the mapping from field nodes to field dof numbers for a particular field variable component. + TYPE FIELD_NODE_PARAM_TO_DOF_MAP_TYPE + INTEGER(INTG) :: NUMBER_OF_NODE_PARAMETERS !A type to hold the mapping from field elements to field dof numbers for a particular field variable component. + TYPE FIELD_ELEMENT_PARAM_TO_DOF_MAP_TYPE + INTEGER(INTG) :: NUMBER_OF_ELEMENT_PARAMETERS !A type to hold the mapping from field grid points to field dof numbers for a particular field variable component. + TYPE FIELD_GRID_POINT_PARAM_TO_DOF_MAP_TYPE + INTEGER(INTG) :: NUMBER_OF_GRID_POINT_PARAMETERS !A type to hold the mapping from field Gauss points to field dof numbers for a particular field variable component. + TYPE FIELD_GAUSS_POINT_PARAM_TO_DOF_MAP_TYPE + INTEGER(INTG) :: NUMBER_OF_GAUSS_POINT_PARAMETERS !A type to hold the mapping from field data points to field dof numbers for a particular field variable component. + TYPE FIELD_DATA_POINT_PARAM_TO_DOF_MAP_TYPE + INTEGER(INTG) :: NUMBER_OF_DATA_POINT_PARAMETERS !A type to hold the mapping from field parameters (nodes, elements, etc) to field dof numbers for a particular field variable component. + TYPE FIELD_PARAM_TO_DOF_MAP_TYPE + INTEGER(INTG) :: NUMBER_OF_CONSTANT_PARAMETERS ! A type to hold the mapping from field element parameters to field dof numbers + TYPE(FIELD_NODE_PARAM_TO_DOF_MAP_TYPE) :: NODE_PARAM2DOF_MAP !> A type to hold the mapping from field node parameters to field dof numbers + TYPE(FIELD_GRID_POINT_PARAM_TO_DOF_MAP_TYPE) :: GRID_POINT_PARAM2DOF_MAP !> A type to hold the mapping from grid point element parameters to field dof numbers + TYPE(FIELD_GAUSS_POINT_PARAM_TO_DOF_MAP_TYPE) :: GAUSS_POINT_PARAM2DOF_MAP !> A type to hold the mapping from field gauss point parameters to field dof numbers + TYPE(FIELD_DATA_POINT_PARAM_TO_DOF_MAP_TYPE) :: DATA_POINT_PARAM2DOF_MAP !> A type to hold the mapping from field data point parameters to field dof numbers + END TYPE FIELD_PARAM_TO_DOF_MAP_TYPE + + !>Contains information for a component of a field variable. + TYPE FIELD_VARIABLE_COMPONENT_TYPE + INTEGER(INTG) :: COMPONENT_NUMBER !A type to hold the parameter sets for a field. + TYPE FIELD_PARAMETER_SET_TYPE + INTEGER(INTG) :: SET_INDEX !A buffer type to allow for an array of pointers to a FIELD_PARAMETER_SET_TYPE. + TYPE FIELD_PARAMETER_SET_PTR_TYPE + TYPE(FIELD_PARAMETER_SET_TYPE), POINTER :: PTR !A type to store the parameter sets for a field. + TYPE FIELD_PARAMETER_SETS_TYPE + TYPE(FIELD_VARIABLE_TYPE), POINTER :: FIELD_VARIABLE !Contains information for a field variable defined on a field. + TYPE FIELD_VARIABLE_TYPE + INTEGER(INTG) :: VARIABLE_NUMBER !A buffer type to allow for an array of pointers to a FIELD_VARIABLE_TYPE. + TYPE FIELD_VARIABLE_PTR_TYPE + TYPE(FIELD_VARIABLE_TYPE), POINTER :: PTR !A type to temporarily hold (cache) the user modifiable values which are used to create a field. + TYPE FIELD_CREATE_VALUES_CACHE_TYPE + LOGICAL :: LABEL_LOCKED !Contains information for a field defined on a region. \see OpenCMISS::Iron::cmfe_FieldType + TYPE FIELD_TYPE + INTEGER(INTG) :: GLOBAL_NUMBER !A buffer type to allow for an array of pointers to a FIELD_TYPE. + TYPE FIELD_PTR_TYPE + TYPE(FIELD_TYPE), POINTER :: PTR !Contains information on the fields defined on a region. + TYPE FIELDS_TYPE + TYPE(REGION_TYPE), POINTER :: REGION !Contains information for an element matrix. + TYPE ElementMatrixType + INTEGER(INTG) :: equationsMatrixNumber !Contains information for an element vector. + TYPE ElementVectorType + INTEGER(INTG) :: numberOfRows !Contains information for an nodal matrix. + TYPE NodalMatrixType + INTEGER(INTG) :: equationsMatrixNumber !Contains information for an nodal vector. + TYPE NodalVectorType + INTEGER(INTG) :: numberOfRows !Contains information about an equations matrix. + TYPE EquationsMatrixType + INTEGER(INTG) :: matrixNumber !A buffer type to allow for an array of pointers to a EquationsMatrixType \see Types::EquationsMatrixType. + TYPE EquationsMatrixPtrType + TYPE(EquationsMatrixType), POINTER :: ptr !Contains information on the Jacobian matrix for nonlinear problems + TYPE EquationsJacobianType + INTEGER(INTG) :: jacobianNumber !A buffer type to allow for an array of pointers to a EquationsJacobianType \see Types::EquationsJacobianType. + TYPE EquationsJacobianPtrType + TYPE(EquationsJacobianType), POINTER :: ptr + END TYPE EquationsJacobianPtrType + + !>Contains information on the Hessian matrix for optimisation problems + TYPE EquationsHessianType + INTEGER(INTG) :: hessianNumber !A buffer type to allow for an array of pointers to a EquationsHessianType \see Types::EquationsHessianType + TYPE EquationsHessianPtrType + TYPE(EquationsHessianType), POINTER :: ptr + END TYPE EquationsHessianPtrType + + !>Contains information on functions for scalar equations + TYPE EquationsMatricesFunctionType + TYPE(EquationsMatricesScalarType), POINTER :: scalarMatrices !Contains information on norms for scalar equations + TYPE EquationsMatricesNormType + TYPE(EquationsMatricesScalarType), POINTER :: scalarMatrices !Contains information on dot products for scalar equations + TYPE EquationsMatricesDotProductType + TYPE(EquationsMatricesScalarType), POINTER :: scalarMatrices !Contains information on quadratic matrix vector forms for scalar equations + TYPE EquationsMatricesQuadraticType + TYPE(EquationsMatricesScalarType), POINTER :: scalarMatrices !Contains information of the dynamic matrices for equations matrices + TYPE EquationsMatricesDynamicType + TYPE(EquationsMatricesVectorType), POINTER :: vectorMatrices !Contains information of the linear matrices for equations matrices + TYPE EquationsMatricesLinearType + TYPE(EquationsMatricesVectorType), POINTER :: vectorMatrices !Contains information of the nolinear matrices and vectors for equations matrices + TYPE EquationsMatricesNonlinearType + TYPE(EquationsMatricesVectorType), POINTER :: vectorMatrices !Contains information of the optimisation matrices and vectors for equations matrices + TYPE EquationsMatricesOptimisationType + TYPE(EquationsMatricesVectorType), POINTER :: vectorMatrices !Contains information of the RHS vector for equations matrices + TYPE EquationsMatricesRHSType + TYPE(EquationsMatricesVectorType), POINTER :: vectorMatrices !Contains information of the source vector for equations matrices + TYPE EquationsMatricesSourceType + TYPE(EquationsMatricesVectorType), POINTER :: vectorMatrices !Contains information on the scalar equations matrices, vectors and scalars + TYPE EquationsMatricesScalarType + TYPE(EquationsScalarType), POINTER :: scalarEquations !Contains information on the vector equations matrices and vectors + TYPE EquationsMatricesVectorType + TYPE(EquationsVectorType), POINTER :: vectorEquations !Contains the information about the mapping of a variable DOF to an equations matrix column + TYPE VarToEquationsColumnMapType + INTEGER(INTG), ALLOCATABLE :: columnDOF(:) !Contains the mapping for a dependent variable type to the equations matrices + TYPE VarToEquationsMatricesMapType + INTEGER(INTG) :: variableIndex !Contains information for mapping an equations matrix to a field variable. + TYPE EquationsMatrixToVarMapType + INTEGER(INTG) :: matrixNumber !Contains information for function mapping in the scalar equations mapping + TYPE EquationsMappingFunctionType + INTEGER(INTG) :: functionNumber !Contains information for mapping field variables to functions in the scalar equations mapping + TYPE EquationsMappingFunctionsType + TYPE(EquationsMappingScalarType), POINTER :: scalarMapping !Contains information for mapping field variables to a norm i.e., ||x|| in the scalar equations mapping + TYPE EquationsMappingNormType + INTEGER(INTG) :: normNumber !Contains information for mapping field variables to norms i.e., ||x|| in the scalar equations mapping + TYPE EquationsMappingNormsType + TYPE(EquationsMappingScalarType), POINTER :: scalarMapping !Contains information for mapping field variables to a dot product i.e., x^T.y in the scalar equations mapping + TYPE EquationsMappingDotProductType + INTEGER(INTG) :: dotProductNumber !Contains information for mapping field variables to dot products i.e., x^T.y in the equations set of the mapping + TYPE EquationsMappingDotProductsType + TYPE(EquationsMappingScalarType), POINTER :: scalarMapping !Contains information for mapping field variables to a quadratic form i.e., x^T.A.y in the scalar equations mapping + TYPE EquationsMappingQuadraticType + INTEGER(INTG) :: quadraticNumber !Contains information for mapping field variables to quadratic forms i.e., x^T.A.y in the scalar equations mapping + TYPE EquationsMappingQuadraticsType + TYPE(EquationsMappingScalarType), POINTER :: scalarMapping !Contains information for mapping field variables to the dynamic matrices in the vector equations mapping + TYPE EquationsMappingDynamicType + TYPE(EquationsMappingVectorType), POINTER :: vectorMapping !Contains information for mapping field variables to the linear matrices in the vector equations mapping + TYPE EquationsMappingLinearType + TYPE(EquationsMappingVectorType), POINTER :: vectorMapping !Contains the mapping from the Jacobian back to the nonlinear residual variables. + TYPE EquationsJacobianToVarMapType + INTEGER(INTG) :: jacobianNumber !Contains the mapping for a dependent variable type to the nonlinear Jacobian matrix + TYPE VarToEquationsJacobianMapType + INTEGER(INTG) :: jacobianNumber !Contains information on the equations mapping for nonlinear matrices i.e., how a field variable is mapped to residual + !>vectors, and how the field variables are mapped to the rows and columns of the associated Jacobian matrices of the + !>vector equations mapping. There may be multiple residual variables with a Jacobian matrix for each variable + TYPE EquationsMappingNonlinearType + TYPE(EquationsMappingVectorType), POINTER :: vectorMapping !Contains information on the equations mapping for a RHS i.e., how a field variable is mapped to the RHS vector for + !>the vector equations mapping. + TYPE EquationsMappingRHSType + TYPE(EquationsMappingVectorType), POINTER :: vectorMapping !Contains information on the equations mapping for a source i.e., how a field variable is mapped to the source vector for + !>the vector equation mapping. + TYPE EquationsMappingSourceType + TYPE(EquationsMappingVectorType), POINTER :: vectorMapping !Contains information on the create values cache for the scalar equations mapping. Because we do not want to allocate and + !deallocate large data structures as the equations mapping options are changed between create start and create finish we + !cache the important information and the allocate and process the data structures at create finish. + TYPE EquationsMappingScalarCreateValuesCacheType + END TYPE EquationsMappingScalarCreateValuesCacheType + + !>Contains information on the create values cache for the vector equations mapping. Because we do not want to allocate and + !deallocate large data structures as the equations mapping options are changed between create start and create finish we + !cache the important information and the allocate and process the data structures at create finish. + TYPE EquationsMappingVectorCreateValuesCacheType + INTEGER(INTG) :: numberOfDynamicMatrices !Contains information on the vector equations LHS mapping i.e., how a field variable is mapped to the vector equations rows + !>for this equations mapping. + TYPE EquationsMappingLHSType + TYPE(EquationsMappingVectorType), POINTER :: vectorMapping !Contains information on the mapping of field variables for a scalar equation + TYPE EquationsMappingScalarType + TYPE(EquationsScalarType), POINTER :: scalarEquations !Contains information on the mapping of field variables for vector equations + TYPE EquationsMappingVectorType + TYPE(EquationsVectorType), POINTER :: vectorEquations !Contains information on the interpolation for the equations + TYPE EquationsInterpolationType + TYPE(EquationsType), POINTER :: equations !Contains information about scalar equations (i.e., a single equation row). + TYPE EquationsScalarType + TYPE(EquationsType), POINTER :: equations !Contains information about vector equations (i.e., a number of equation rows). + TYPE EquationsVectorType + TYPE(EquationsType), POINTER :: equations !Contains information about the equations in an equations set. \see OpenCMISS::Iron::cmfe_EquationsType + TYPE EquationsType + TYPE(EQUATIONS_SET_TYPE), POINTER :: equationsSet !Contains information on the boundary conditions for a dependent field variable + TYPE BOUNDARY_CONDITIONS_VARIABLE_TYPE + TYPE(BOUNDARY_CONDITIONS_TYPE), POINTER :: BOUNDARY_CONDITIONS !A buffer type to allow for an array of pointers to a VARIABLE_BOUNDARY_CONDITIONS_TYPE \see Types::VARIABLE_BOUNDARY_CONDITIONS_TYPE + TYPE BOUNDARY_CONDITIONS_VARIABLE_PTR_TYPE + TYPE(BOUNDARY_CONDITIONS_VARIABLE_TYPE), POINTER :: PTR !Contains information on the boundary conditions for the solver equations. \see OpenCMISS::Iron::cmfe_BoundaryConditionsType + TYPE BOUNDARY_CONDITIONS_TYPE + TYPE(SOLVER_EQUATIONS_TYPE), POINTER :: SOLVER_EQUATIONS !A buffer type to allow for an array of pointers to a BOUNDARY_CONDITIONS_SPARSITY_INDICES_TYPE \see Types::BOUNDARY_CONDITIONS_SPARSITY_INDICES_TYPE + TYPE BOUNDARY_CONDITIONS_SPARSITY_INDICES_PTR_TYPE + TYPE(BOUNDARY_CONDITIONS_SPARSITY_INDICES_TYPE), POINTER :: PTR ! Contains information on dofs with associated dirichlet conditions and corresponding non-zero elements in the equations matrices + TYPE BOUNDARY_CONDITIONS_DIRICHLET_TYPE + INTEGER(INTG), ALLOCATABLE :: DIRICHLET_DOF_INDICES(:) ! Contains information on indices of non-zero elements with associated dirichlet conditions + !> Indices stored in compressed column format without a values array + TYPE BOUNDARY_CONDITIONS_SPARSITY_INDICES_TYPE + INTEGER(INTG), ALLOCATABLE :: SPARSE_ROW_INDICES(:) !Contains information used to integrate Neumann boundary conditions + TYPE BoundaryConditionsNeumannType + INTEGER(INTG), ALLOCATABLE :: setDofs(:) !Contains information on dofs associated with pressure incremented conditions + TYPE BOUNDARY_CONDITIONS_PRESSURE_INCREMENTED_TYPE + INTEGER(INTG), ALLOCATABLE :: PRESSURE_INCREMENTED_DOF_INDICES(:) !Describes the value of a DOF as a linear combination of other DOFs. + TYPE BoundaryConditionsDofConstraintType + INTEGER(INTG) :: globalDof !A pointer to a linear DOF constraint. + TYPE BoundaryConditionsDofConstraintPtrType + TYPE(BoundaryConditionsDofConstraintType), POINTER :: ptr + END TYPE BoundaryConditionsDofConstraintPtrType + + !>The coupled equations DOF information for the DOF constraints. + !>The BoundaryConditionsDofConstraintType describes how an + !>equations DOF is a linear combination of other equations DOFs. + !>This data structure describes a solver row or column that is mapped to multiple + !>equations rows or columns and is used to help build the solver mapping. + !>The first equation row/column is used as the owner of the solver row/column. + TYPE BoundaryConditionsCoupledDofsType + INTEGER(INTG) :: numberOfDofs !A pointer to the coupled equations DOF information for the DOF constraints. + TYPE BoundaryConditionsCoupledDofsPtrType + TYPE(BoundaryConditionsCoupledDofsType), POINTER :: ptr + END TYPE BoundaryConditionsCoupledDofsPtrType + + !>Describes linear constraints between solver DOFs in the solver mapping. + TYPE BoundaryConditionsDofConstraintsType + INTEGER(INTG) :: numberOfConstraints !Contains information on the setup information for an equations set + TYPE EQUATIONS_SET_SETUP_TYPE + INTEGER(INTG) :: SETUP_TYPE !Contains information on the geometry for an equations set + TYPE EQUATIONS_SET_GEOMETRY_TYPE + TYPE(EQUATIONS_SET_TYPE), POINTER :: EQUATIONS_SET !Contains information on the dependent variables for the equations set. + TYPE EQUATIONS_SET_DEPENDENT_TYPE + TYPE(EQUATIONS_SET_TYPE), POINTER :: EQUATIONS_SET !Contains information on the derived variables for the equations set, eg. stress or strain + TYPE EquationsSetDerivedType + TYPE(EQUATIONS_SET_TYPE), POINTER :: equationsSet !Contains information on the independent variables for the equations set. + TYPE EQUATIONS_SET_INDEPENDENT_TYPE + TYPE(EQUATIONS_SET_TYPE), POINTER :: EQUATIONS_SET !Contains information on the source for the equations set. + TYPE EQUATIONS_SET_SOURCE_TYPE + TYPE(EQUATIONS_SET_TYPE), POINTER :: EQUATIONS_SET !Contains information on the analytic setup for the equations set. + TYPE EQUATIONS_SET_ANALYTIC_TYPE + TYPE(EQUATIONS_SET_TYPE), POINTER :: EQUATIONS_SET !Contains information on an equations set. \see OpenCMISS::Iron::cmfe_EquationsSetType + TYPE EQUATIONS_SET_TYPE + INTEGER(INTG) :: USER_NUMBER !A buffer type to allow for an array of pointers to a EQUATIONS_SET_TYPE \see Types::EQUATIONS_SET_TYPE + TYPE EQUATIONS_SET_PTR_TYPE + TYPE(EQUATIONS_SET_TYPE), POINTER :: PTR !Contains information about an interface matrix. + TYPE INTERFACE_MATRIX_TYPE + TYPE(INTERFACE_MATRICES_TYPE), POINTER :: INTERFACE_MATRICES !A buffer type to allow for an array of pointers to a INTERFACE_MATRIX_TYPE \see Types::INTERFACE_MATRIX_TYPE. + TYPE INTERFACE_MATRIX_PTR_TYPE + TYPE(INTERFACE_MATRIX_TYPE), POINTER :: PTR !Contains information of the RHS vector for interface matrices + TYPE INTERFACE_RHS_TYPE + TYPE(INTERFACE_MATRICES_TYPE), POINTER :: INTERFACE_MATRICES !Contains information on the interface matrices + TYPE INTERFACE_MATRICES_TYPE + TYPE(INTERFACE_EQUATIONS_TYPE), POINTER :: INTERFACE_EQUATIONS !Contains information on interface variable mapping for an interface matrix. + TYPE INTERFACE_MATRIX_TO_VAR_MAP_TYPE + INTEGER(INTG) :: MATRIX_NUMBER !Contains information on an interface mapping. TODO: Generalise to non-Lagrange multipler mappings + TYPE INTERFACE_MAPPING_TYPE + TYPE(INTERFACE_EQUATIONS_TYPE), POINTER :: INTERFACE_EQUATIONS !Contains information about the interpolation for a parameter set in interface equations + TYPE INTERFACE_EQUATIONS_INTERPOLATION_SET_TYPE + TYPE(FIELD_INTERPOLATION_PARAMETERS_PTR_TYPE), POINTER :: INTERPOLATION_PARAMETERS(:) !Contains information about the interpolation for a domain (interface or coupled mesh) in the interface equations + TYPE INTERFACE_EQUATIONS_DOMAIN_INTERPOLATION_TYPE + TYPE(INTERFACE_EQUATIONS_INTERPOLATION_TYPE), POINTER :: INTERPOLATION !Contains information on the interpolation for the interface equations + TYPE INTERFACE_EQUATIONS_INTERPOLATION_TYPE + TYPE(INTERFACE_EQUATIONS_TYPE), POINTER :: INTERFACE_EQUATIONS !Contains information about the interface equations for an interface condition. + TYPE INTERFACE_EQUATIONS_TYPE + TYPE(INTERFACE_CONDITION_TYPE), POINTER :: INTERFACE_CONDITION !Contains information on the geometry for an interface condition + TYPE INTERFACE_GEOMETRY_TYPE + TYPE(INTERFACE_CONDITION_TYPE), POINTER :: INTERFACE_CONDITION !Contains information about the penalty field information for an interface condition. + TYPE INTERFACE_PENALTY_TYPE + TYPE(INTERFACE_CONDITION_TYPE), POINTER :: INTERFACE_CONDITION !Contains information about the Lagrange field information for an interface condition. + TYPE INTERFACE_LAGRANGE_TYPE + TYPE(INTERFACE_CONDITION_TYPE), POINTER :: INTERFACE_CONDITION !Contains information about the dependent field information for an interface condition. + TYPE INTERFACE_DEPENDENT_TYPE + TYPE(INTERFACE_CONDITION_TYPE), POINTER :: INTERFACE_CONDITION !Contains information for the interface condition data. + TYPE INTERFACE_CONDITION_TYPE + INTEGER(INTG) :: USER_NUMBER !A buffer type to allow for an array of pointers to a INTERFACE_CONDITION_TYPE. + TYPE INTERFACE_CONDITION_PTR_TYPE + TYPE(INTERFACE_CONDITION_TYPE), POINTER :: PTR !Contains information for interface region specific data that is not of 'region' importance. <<>> + TYPE INTERFACE_CONDITIONS_TYPE + TYPE(INTERFACE_TYPE), POINTER :: INTERFACE !Contains information on the mesh connectivity for a given coupled mesh element + TYPE INTERFACE_ELEMENT_CONNECTIVITY_TYPE + INTEGER(INTG) :: COUPLED_MESH_ELEMENT_NUMBER !< The coupled mesh number to define the connectivity for. + REAL(DP), ALLOCATABLE :: XI(:,:,:) !Contains information on the coupling between meshes in an interface + TYPE INTERFACE_MESH_CONNECTIVITY_TYPE + TYPE(INTERFACE_TYPE), POINTER :: INTERFACE !Contains information on a data connectivity point + TYPE InterfacePointConnectivityType + INTEGER(INTG) :: coupledMeshElementNumber !Contains information on the data point coupling/points connectivity between meshes in the an interface + TYPE InterfacePointsConnectivityType + TYPE(INTERFACE_TYPE), POINTER :: interface !Contains information for the interface data. + TYPE INTERFACE_TYPE + INTEGER :: USER_NUMBER !A buffer type to allow for an array of pointers to a INTERFACE_TYPE. + TYPE INTERFACE_PTR_TYPE + TYPE(INTERFACE_TYPE), POINTER :: PTR !Contains information for interfaces on a parent region. + TYPE INTERFACES_TYPE + TYPE(REGION_TYPE), POINTER :: PARENT_REGION !This type is a wrapper for the C_PTR which references the actual CellML model definition object. + TYPE CELLML_MODEL_TYPE + TYPE(CELLML_TYPE), POINTER :: CELLML !A buffer type to allow for an array of pointers to a CELLML_MODEL_TYPE + TYPE CELLML_MODEL_PTR_TYPE + TYPE(CELLML_MODEL_TYPE), POINTER :: PTR + END TYPE CELLML_MODEL_PTR_TYPE + + !>Contains information on the models field for a CellML environment + TYPE CELLML_MODELS_FIELD_TYPE + TYPE(CELLML_TYPE), POINTER :: CELLML !Contains information on the state field for a CellML environment + TYPE CELLML_STATE_FIELD_TYPE + TYPE(CELLML_TYPE), POINTER :: CELLML !Contains information on the intermediate field for a CellML environment + TYPE CELLML_INTERMEDIATE_FIELD_TYPE + TYPE(CELLML_TYPE), POINTER :: CELLML !Contains information on the parameters field for a CellML environment + TYPE CELLML_PARAMETERS_FIELD_TYPE + TYPE(CELLML_TYPE), POINTER :: CELLML ! Contains information on the solver, cellml, dof etc. for which cellml equations are to be evaluated by petsc + TYPE CellMLPETScContextType + TYPE(SOLVER_TYPE), POINTER :: solver !Contains information on the mapping between CellML fields and OpenCMISS fields and vise versa. + TYPE CELLML_MODEL_MAP_TYPE + INTEGER(INTG) :: CELLML_MAP_TYPE !Buffer type to allow an array of pointers to CELLML_MODEL_MAP_FIELD_TYPE + TYPE CELLML_MODEL_MAP_PTR_TYPE + TYPE(CELLML_MODEL_MAP_TYPE), POINTER :: PTR !Contains information on the maps between a CellML model and external OpenCMISS fields. + TYPE CELLML_MODEL_MAPS_TYPE + INTEGER(INTG) :: NUMBER_OF_FIELDS_MAPPED_TO !Buffer type to allow arrays of pointer to CELLML_MODEL_MAPS_TYPE + TYPE CELLML_MODEL_MAPS_PTR_TYPE + TYPE(CELLML_MODEL_MAPS_TYPE), POINTER :: PTR !Contains information on the maps between CellML and external OpenCMISS fields. + TYPE CELLML_FIELD_MAPS_TYPE + TYPE(CELLML_TYPE), POINTER :: CELLML !Contains information for a CellML environment. + TYPE CELLML_TYPE + TYPE(REGION_TYPE), POINTER :: REGION !Field maps. + TYPE(CELLML_MODELS_FIELD_TYPE), POINTER :: MODELS_FIELD ! A buffer type to allow for an array of pointers to a CELLML_TYPE. + !! \todo Is this needed? not currently used... + TYPE CELLML_PTR_TYPE + TYPE(CELLML_TYPE), POINTER :: PTR !< The pointer to the CellML environment. + END TYPE CELLML_PTR_TYPE + + !>Contains information on the CellML environments defined. + TYPE CELLML_ENVIRONMENTS_TYPE + TYPE(REGION_TYPE), POINTER :: REGION !Contains information on the solver matrix + TYPE SOLVER_MATRIX_TYPE + INTEGER(INTG) :: MATRIX_NUMBER !A buffer type to allow for an array of pointers to a SOLVER_MATRIX_TYPE \see TYPES:SOLUTION_MATRIX_TYPE + TYPE SOLVER_MATRIX_PTR_TYPE + TYPE(SOLVER_MATRIX_TYPE), POINTER :: PTR !Contains information on the solver matrices and rhs vector + TYPE SOLVER_MATRICES_TYPE + TYPE(SOLVER_EQUATIONS_TYPE), POINTER :: SOLVER_EQUATIONS !Contains information about the solver equations for a solver. \see OpenCMISS::Iron::cmfe_SolverEquationsType + TYPE SOLVER_EQUATIONS_TYPE + TYPE(SOLVER_TYPE), POINTER :: SOLVER !Contains information about the CellML equations for a solver. + TYPE CELLML_EQUATIONS_TYPE + TYPE(SOLVER_TYPE), POINTER :: SOLVER !Contains information for a dynamic solver + TYPE DYNAMIC_SOLVER_TYPE + TYPE(SOLVER_TYPE), POINTER :: SOLVER !Contains information for an forward Euler differential-algebraic equation solver + TYPE FORWARD_EULER_DAE_SOLVER_TYPE + TYPE(EULER_DAE_SOLVER_TYPE), POINTER :: EULER_DAE_SOLVER !Contains information for an backward Euler differential-algebraic equation solver + TYPE BACKWARD_EULER_DAE_SOLVER_TYPE + TYPE(EULER_DAE_SOLVER_TYPE), POINTER :: EULER_DAE_SOLVER !Contains information for an improved Euler differential-algebraic equation solver + TYPE IMPROVED_EULER_DAE_SOLVER_TYPE + TYPE(EULER_DAE_SOLVER_TYPE), POINTER :: EULER_DAE_SOLVER !Contains information for an Euler differential-algebraic equation solver + TYPE EULER_DAE_SOLVER_TYPE + TYPE(DAE_SOLVER_TYPE), POINTER :: DAE_SOLVER !Contains information for a Crank-Nicholson differential-algebraic equation solver + TYPE CRANK_NICOLSON_DAE_SOLVER_TYPE + TYPE(DAE_SOLVER_TYPE), POINTER :: DAE_SOLVER !Contains information for a Runge-Kutta differential-algebraic equation solver + TYPE RUNGE_KUTTA_DAE_SOLVER_TYPE + TYPE(DAE_SOLVER_TYPE), POINTER :: DAE_SOLVER !Contains information for an Adams-Moulton differential-algebraic equation solver + TYPE ADAMS_MOULTON_DAE_SOLVER_TYPE + TYPE(DAE_SOLVER_TYPE), POINTER :: DAE_SOLVER !Contains information for a BDF differential-algebraic equation solver + TYPE BDF_DAE_SOLVER_TYPE + TYPE(DAE_SOLVER_TYPE), POINTER :: DAE_SOLVER !Contains information for a Rush-Larson differential-algebraic equation solver + TYPE RUSH_LARSON_DAE_SOLVER_TYPE + TYPE(DAE_SOLVER_TYPE), POINTER :: DAE_SOLVER !Contains information for an external differential-algebraic equation solver + TYPE EXTERNAL_DAE_SOLVER_TYPE + TYPE(DAE_SOLVER_TYPE), POINTER :: DAE_SOLVER !Contains information for an differential-algebraic equation solver + TYPE DAE_SOLVER_TYPE + TYPE(SOLVER_TYPE), POINTER :: SOLVER !Contains information for a direct linear solver + TYPE LINEAR_DIRECT_SOLVER_TYPE + TYPE(LINEAR_SOLVER_TYPE), POINTER :: LINEAR_SOLVER !Contains information for an iterative linear solver + TYPE LINEAR_ITERATIVE_SOLVER_TYPE + TYPE(LINEAR_SOLVER_TYPE), POINTER :: LINEAR_SOLVER !Contains information for a linear solver + TYPE LINEAR_SOLVER_TYPE + TYPE(SOLVER_TYPE), POINTER :: SOLVER !Contains information for a Newton line search nonlinear solver + TYPE NEWTON_LINESEARCH_SOLVER_TYPE + TYPE(NEWTON_SOLVER_TYPE), POINTER :: NEWTON_SOLVER !Contains information for a Newton trust region nonlinear solver + TYPE NEWTON_TRUSTREGION_SOLVER_TYPE + TYPE(NEWTON_SOLVER_TYPE), POINTER :: NEWTON_SOLVER !Contains information about the convergence test for a newton solver + TYPE NewtonSolverConvergenceTest + REAL(DP) :: energyFirstIter !Contains information for a Newton nonlinear solver + TYPE NEWTON_SOLVER_TYPE + TYPE(NONLINEAR_SOLVER_TYPE), POINTER :: NONLINEAR_SOLVER !Contains information for a Quasi-Newton line search nonlinear solver + TYPE QUASI_NEWTON_LINESEARCH_SOLVER_TYPE + TYPE(QUASI_NEWTON_SOLVER_TYPE), POINTER :: QUASI_NEWTON_SOLVER !Contains information for a Quasi-Newton trust region nonlinear solver + TYPE QUASI_NEWTON_TRUSTREGION_SOLVER_TYPE + TYPE(QUASI_NEWTON_SOLVER_TYPE), POINTER :: QUASI_NEWTON_SOLVER !Contains information for a Quasi-Newton nonlinear solver + TYPE QUASI_NEWTON_SOLVER_TYPE + TYPE(NONLINEAR_SOLVER_TYPE), POINTER :: NONLINEAR_SOLVER !Contains information for a nonlinear solver + TYPE NONLINEAR_SOLVER_TYPE + TYPE(SOLVER_TYPE), POINTER :: SOLVER !Contains information for an eigenproblem solver + TYPE EIGENPROBLEM_SOLVER_TYPE + TYPE(SOLVER_TYPE), POINTER :: SOLVER !Contains information for an optimiser solver + TYPE OptimiserSolverType + TYPE(SOLVER_TYPE), POINTER :: solver !Contains information for a CellML evaluation solver + TYPE CELLML_EVALUATOR_SOLVER_TYPE + TYPE(SOLVER_TYPE), POINTER :: SOLVER !Contains information for a geometric transformation solver + TYPE GeometricTransformationSolverType + TYPE(SOLVER_TYPE), POINTER :: solver !A buffer type to allow for an array of pointers to a SOLVER_TYPE \see Types::SOLVER_TYPE + TYPE SOLVER_PTR_TYPE + TYPE(SOLVER_TYPE), POINTER :: PTR + END TYPE SOLVER_PTR_TYPE + + !>Contains information on the type of solver to be used. \see OpenCMISS::Iron::cmfe_SolverType + TYPE SOLVER_TYPE + TYPE(SOLVERS_TYPE), POINTER :: SOLVERS !Contains information on the solvers to be used in a control loop + TYPE SOLVERS_TYPE + TYPE(CONTROL_LOOP_TYPE), POINTER :: CONTROL_LOOP !A buffer type to allow for an array of pointers to a EQUATIONS_TO_SOLVER_MAPS_TYPE \see Types::EQUATIONS_TO_SOLVER_MAPS_TYPE + TYPE EQUATIONS_TO_SOLVER_MAPS_PTR_TYPE + TYPE(EQUATIONS_TO_SOLVER_MAPS_TYPE), POINTER :: PTR !A buffer type to allow for an array of pointers to a INTERFACE_TO_SOLVER_MAPS_TYPE \see Types::INTERFACE_TO_SOLVER_MAPS_TYPE + TYPE INTERFACE_TO_SOLVER_MAPS_PTR_TYPE + TYPE(INTERFACE_TO_SOLVER_MAPS_TYPE), POINTER :: PTR !Contains information on the mappings between field variable dofs inequations and the solver matrix columns (solver dofs) \todo rename solver col to be solver dof here??? + TYPE VARIABLE_TO_SOLVER_COL_MAP_TYPE + INTEGER(INTG), ALLOCATABLE :: COLUMN_NUMBERS(:) !Contains information on the equations to solver matrix mappings when indexing by solver matrix number + TYPE EQUATIONS_TO_SOLVER_MATRIX_MAPS_SM_TYPE + INTEGER(INTG) :: SOLVER_MATRIX_NUMBER !Contains information on the equations to solver matrix mappings when indexing by equations matrix number + TYPE EQUATIONS_TO_SOLVER_MATRIX_MAPS_EM_TYPE + INTEGER(INTG) :: EQUATIONS_MATRIX_NUMBER !Contains information on the mapping from the equations rows in an equations set to the solver rows + TYPE EQUATIONS_ROW_TO_SOLVER_ROWS_MAP_TYPE + INTEGER(INTG) :: NUMBER_OF_SOLVER_ROWS !Contains information on the mappings from an equations set to the solver matrices + TYPE EQUATIONS_SET_TO_SOLVER_MAP_TYPE + INTEGER(INTG) :: EQUATIONS_SET_INDEX !Contains information on the interface to solver matrix mappings when indexing by solver matrix number + TYPE INTERFACE_TO_SOLVER_MATRIX_MAPS_SM_TYPE + INTEGER(INTG) :: SOLVER_MATRIX_NUMBER !Contains information on the mapping from an interface condition column to a solver row. + TYPE INTERFACE_ROW_TO_SOLVER_ROWS_MAP_TYPE + INTEGER(INTG) :: NUMBER_OF_SOLVER_ROWS !Contains information on the interface to solver matrix mappings when indexing by interface matrix number + TYPE INTERFACE_TO_SOLVER_MATRIX_MAPS_IM_TYPE + INTEGER(INTG) :: INTERFACE_MATRIX_NUMBER !Contains information on the mapping from an interface condition column to a solver row. + TYPE INTERFACE_COLUMN_TO_SOLVER_ROWS_MAP_TYPE + INTEGER(INTG) :: NUMBER_OF_SOLVER_ROWS !Contains information on the mappings from an interface condition to the solver matrices + TYPE INTERFACE_CONDITION_TO_SOLVER_MAP_TYPE + INTEGER(INTG) :: INTERFACE_CONDITION_INDEX !Contains information about the mapping from a solver matrix column to dynamic equations matrices and variables + TYPE SOLVER_COL_TO_DYNAMIC_EQUATIONS_MAP_TYPE + INTEGER(INTG) :: NUMBER_OF_DYNAMIC_EQUATIONS_MATRICES !Contains information about the mapping from a solver matrix column to static equations matrices and variables + TYPE SOLVER_COL_TO_STATIC_EQUATIONS_MAP_TYPE + INTEGER(INTG) :: NUMBER_OF_LINEAR_EQUATIONS_MATRICES !Contains information about mapping the solver dof to the field variable dofs in the equations set. + TYPE SOLVER_DOF_TO_VARIABLE_MAP_TYPE + INTEGER(INTG) :: NUMBER_OF_EQUATION_DOFS !Contains information about the mappings from a solver matrix to the equations in an equations set + TYPE SOLVER_COL_TO_EQUATIONS_SET_MAP_TYPE + TYPE(EquationsType), POINTER :: EQUATIONS !Contains information about the mapping from a solver matrix column to interface equations matrices and variables + TYPE SOLVER_COL_TO_INTERFACE_EQUATIONS_MAP_TYPE + INTEGER(INTG) :: NUMBER_OF_INTERFACE_MATRICES !Contains information about the mappings from a solver matrix to the equations in an equations set + TYPE SOLVER_COL_TO_INTERFACE_MAP_TYPE + TYPE(EquationsType), POINTER :: INTERFACE_EQUATIONS !Contains information on the mappings from a solver matrix to equations sets + TYPE SOLVER_COL_TO_EQUATIONS_MAPS_TYPE + INTEGER(INTG) :: SOLVER_MATRIX_NUMBER !Contains information on the mappings from a solver row to the equations. + TYPE SOLVER_ROW_TO_EQUATIONS_MAPS_TYPE + INTEGER(INTG) :: NUMBER_OF_EQUATIONS_SET_ROWS !Contains information about the cached create values for a solver mapping + TYPE SOLVER_MAPPING_CREATE_VALUES_CACHE_TYPE + TYPE(LIST_PTR_TYPE), POINTER :: EQUATIONS_VARIABLE_LIST(:) !Contains information on the variables involved in a solver matrix + TYPE SOLVER_MAPPING_VARIABLES_TYPE + INTEGER(INTG) :: NUMBER_OF_VARIABLES !Describes the coupled rows or columns in the solver mapping + TYPE SolverMappingDofCouplingsType + INTEGER(INTG) :: numberOfCouplings !Contains information on the solver mapping between the global equation sets and the solver matrices. + TYPE SOLVER_MAPPING_TYPE + TYPE(SOLVER_EQUATIONS_TYPE), POINTER :: SOLVER_EQUATIONS !Contains information about a history file for a control loop. \see OpenCMISS::Iron::cmfe_HistoryType + TYPE HISTORY_TYPE + TYPE(CONTROL_LOOP_TYPE), POINTER :: CONTROL_LOOP !Contains information on a simple (execute once) control loop + TYPE CONTROL_LOOP_SIMPLE_TYPE + TYPE(CONTROL_LOOP_TYPE), POINTER :: CONTROL_LOOP + END TYPE CONTROL_LOOP_SIMPLE_TYPE + + !>Contains information on a fixed iteration control loop + TYPE CONTROL_LOOP_FIXED_TYPE + TYPE(CONTROL_LOOP_TYPE), POINTER :: CONTROL_LOOP + INTEGER(INTG) :: ITERATION_NUMBER + INTEGER(INTG) :: START_ITERATION + INTEGER(INTG) :: STOP_ITERATION + INTEGER(INTG) :: ITERATION_INCREMENT + END TYPE CONTROL_LOOP_FIXED_TYPE + + !>Contains information on a time iteration control loop + TYPE CONTROL_LOOP_TIME_TYPE + TYPE(CONTROL_LOOP_TYPE), POINTER :: CONTROL_LOOP + INTEGER(INTG) :: ITERATION_NUMBER + INTEGER(INTG) :: GLOBAL_ITERATION_NUMBER +! sebk: is thei usefull? + INTEGER(INTG) :: OUTPUT_NUMBER !< The frequency of output, is only used if the specific problem implementation accesses it + INTEGER(INTG) :: INPUT_NUMBER + REAL(DP) :: CURRENT_TIME + REAL(DP) :: START_TIME + REAL(DP) :: STOP_TIME + REAL(DP) :: TIME_INCREMENT + INTEGER(INTG) :: NUMBER_OF_ITERATIONS !< The total number of iterations for this loop, if 0 it will be computed from time span and increment + END TYPE CONTROL_LOOP_TIME_TYPE + + !>Contains information on a do-while control loop + TYPE CONTROL_LOOP_WHILE_TYPE + TYPE(CONTROL_LOOP_TYPE), POINTER :: CONTROL_LOOP + INTEGER(INTG) :: ITERATION_NUMBER + INTEGER(INTG) :: MAXIMUM_NUMBER_OF_ITERATIONS + REAL(DP) :: ABSOLUTE_TOLERANCE + REAL(DP) :: RELATIVE_TOLERANCE + LOGICAL :: CONTINUE_LOOP + END TYPE CONTROL_LOOP_WHILE_TYPE + + !>Contains information on a load-increment control loop + TYPE CONTROL_LOOP_LOAD_INCREMENT_TYPE + TYPE(CONTROL_LOOP_TYPE), POINTER :: CONTROL_LOOP + INTEGER(INTG) :: ITERATION_NUMBER + INTEGER(INTG) :: MAXIMUM_NUMBER_OF_ITERATIONS + INTEGER(INTG) :: OUTPUT_NUMBER + END TYPE CONTROL_LOOP_LOAD_INCREMENT_TYPE + + !>Contains information about a dependent field variable involved in a control loop solver. + TYPE ControlLoopFieldVariableType + TYPE(FIELD_VARIABLE_TYPE), POINTER :: fieldVariable !Contains information on the list of dependent field variables involved in the control loop solvers. + TYPE ControlLoopFieldVariablesType + INTEGER(INTG) :: numberOfFieldVariables !A buffer type to allow for an array of pointers to a CONTROL_LOOP_TYPE \see Types::CONTROL_LOOP_TYPE + TYPE CONTROL_LOOP_PTR_TYPE + TYPE(CONTROL_LOOP_TYPE), POINTER :: PTR !Contains information on a control loop. \see OpenCMISS::Iron::cmfe_ControlLoopType + TYPE CONTROL_LOOP_TYPE + TYPE(PROBLEM_TYPE), POINTER :: PROBLEM !Contains information for a problem. \see OpenCMISS::Iron::cmfe_ProblemType + TYPE PROBLEM_TYPE + INTEGER(INTG) :: USER_NUMBER !A buffer type to allow for an array of pointers to a PROBLEM_TYPE \see TYPES:PROBLEM_TYPE + TYPE PROBLEM_PTR_TYPE + TYPE(PROBLEM_TYPE), POINTER :: PTR !Contains information on the problems defined. + TYPE ProblemsType + TYPE(ContextType), POINTER :: context !A buffer type to allow for an array of pointers to a REGION_TYPE. + TYPE REGION_PTR_TYPE + TYPE(REGION_TYPE), POINTER :: PTR !Contains information for a region. \see OpenCMISS::Iron::cmfe_RegionType + TYPE REGION_TYPE + INTEGER(INTG) :: USER_NUMBER !Contains information about the regions + TYPE RegionsType + TYPE(ContextType), POINTER :: context !Pointer type to WorkGroupType + TYPE WorkGroupPtrType + TYPE(WorkGroupType), POINTER :: ptr + END TYPE WorkGroupPtrType + + !>Contains information on logical working groups + TYPE WorkGroupType + INTEGER(INTG) :: userNumber !Contains information on a cache heirarchy + TYPE ComputationCacheType + INTEGER(INTG) :: numberOfLevels !Contains information on a computation node containing a number of processors + TYPE ComputationNodeType + INTEGER(INTG) :: numberOfProcessors !Contains information on the MPI type to transfer information about a computation node + TYPE MPIComputationNodeType + INTEGER(INTG) :: mpiType !Contains information on the computation environment the program is running in. + TYPE ComputationEnvironmentType + TYPE(ContextType), POINTER :: context !Contains information on the OpenCMISS context that contains all base level objects + TYPE ContextType + INTEGER(INTG) :: userNumber !A buffer type to allow for an array of pointers to a ContexType \see OpenCMISS::Types::ContexTypes + TYPE ContextPtrType + TYPE(ContextType), POINTER :: ptr !Contains information on the OpenCMISS contexts. + TYPE ContextsType + INTEGER(INTG) :: numberOfContexts ! Date: Tue, 17 Apr 2018 20:58:01 +1200 Subject: [PATCH 08/13] Adjust node routines for new code style. --- src/Darcy_equations_routines.f90 | 1 - src/Darcy_pressure_equations_routines.f90 | 1 - src/Hamilton_Jacobi_equations_routines.f90 | 1 - src/Helmholtz_equations_routines.f90 | 1 - src/Laplace_equations_routines.f90 | 1 - src/Navier_Stokes_equations_routines.f90 | 13 +- src/Poisson_equations_routines.f90 | 1 - src/Stokes_equations_routines.f90 | 1 - src/boundary_condition_routines.f90 | 1 - src/characteristic_equation_routines.f90 | 1 - ...diffusion_advection_diffusion_routines.f90 | 1 - src/diffusion_diffusion_routines.f90 | 1 - src/equations_set_routines.f90 | 1 - src/field_IO_routines.f90 | 10 +- src/field_routines.f90 | 1 - src/fieldml_input_routines.f90 | 6 +- src/fieldml_output_routines.f90 | 4 +- src/finite_elasticity_Darcy_routines.f90 | 1 - src/fitting_routines.f90 | 1 - src/fsi_routines.f90 | 4 +- src/generated_mesh_routines.f90 | 32 +- src/interface_access_routines.f90 | 2 +- src/interface_routines.f90 | 12 +- src/mesh_routines.f90 | 18 +- src/monodomain_equations_routines.f90 | 1 - src/multi_compartment_transport_routines.f90 | 1 - src/node_routines.f90 | 1073 ++++++++--------- src/opencmiss_iron.f90 | 74 +- src/region_access_routines.f90 | 2 +- src/region_routines.f90 | 2 +- src/stree_equation_routines.f90 | 1 - src/types.f90 | 40 +- 32 files changed, 641 insertions(+), 669 deletions(-) diff --git a/src/Darcy_equations_routines.f90 b/src/Darcy_equations_routines.f90 index ac5c4248..83378fb7 100755 --- a/src/Darcy_equations_routines.f90 +++ b/src/Darcy_equations_routines.f90 @@ -28,7 +28,6 @@ MODULE DARCY_EQUATIONS_ROUTINES USE Maths USE MatrixVector USE MESH_ROUTINES - USE NODE_ROUTINES USE PROBLEM_CONSTANTS USE Strings USE SOLVER_ROUTINES diff --git a/src/Darcy_pressure_equations_routines.f90 b/src/Darcy_pressure_equations_routines.f90 index ca5d0602..2f76aad9 100755 --- a/src/Darcy_pressure_equations_routines.f90 +++ b/src/Darcy_pressure_equations_routines.f90 @@ -66,7 +66,6 @@ MODULE DARCY_PRESSURE_EQUATIONS_ROUTINES USE Kinds USE Maths USE MatrixVector - USE NODE_ROUTINES USE PROBLEM_CONSTANTS USE Strings USE SOLVER_ROUTINES diff --git a/src/Hamilton_Jacobi_equations_routines.f90 b/src/Hamilton_Jacobi_equations_routines.f90 index 2835124e..3621be2f 100644 --- a/src/Hamilton_Jacobi_equations_routines.f90 +++ b/src/Hamilton_Jacobi_equations_routines.f90 @@ -66,7 +66,6 @@ MODULE HAMILTON_JACOBI_EQUATIONS_ROUTINES USE Kinds USE MatrixVector USE Maths - USE NODE_ROUTINES USE PROBLEM_CONSTANTS USE Strings USE SOLVER_ROUTINES diff --git a/src/Helmholtz_equations_routines.f90 b/src/Helmholtz_equations_routines.f90 index a24465ec..71778dc3 100755 --- a/src/Helmholtz_equations_routines.f90 +++ b/src/Helmholtz_equations_routines.f90 @@ -65,7 +65,6 @@ MODULE HELMHOLTZ_EQUATIONS_ROUTINES USE ISO_VARYING_STRING USE Kinds USE MatrixVector - USE NODE_ROUTINES USE PROBLEM_CONSTANTS USE Strings USE SOLVER_ROUTINES diff --git a/src/Laplace_equations_routines.f90 b/src/Laplace_equations_routines.f90 index 1dd75eb4..1a305f43 100755 --- a/src/Laplace_equations_routines.f90 +++ b/src/Laplace_equations_routines.f90 @@ -67,7 +67,6 @@ MODULE LAPLACE_EQUATIONS_ROUTINES USE Kinds USE Maths USE MatrixVector - USE NODE_ROUTINES USE PROBLEM_CONSTANTS USE Strings USE SOLVER_ROUTINES diff --git a/src/Navier_Stokes_equations_routines.f90 b/src/Navier_Stokes_equations_routines.f90 index 6c95e960..38f678fb 100644 --- a/src/Navier_Stokes_equations_routines.f90 +++ b/src/Navier_Stokes_equations_routines.f90 @@ -41,7 +41,6 @@ MODULE NAVIER_STOKES_EQUATIONS_ROUTINES #ifndef NOMPIMOD USE MPI #endif - USE NODE_ROUTINES USE PROBLEM_CONSTANTS USE STREE_EQUATION_ROUTINES USE Strings @@ -8488,13 +8487,13 @@ SUBROUTINE NavierStokes_PreSolveUpdateBoundaryConditions(SOLVER,err,error,*) FluidNodeNumber=node_idx DO search_idx=1,SIZE(Solver2%SOLVER_equations%SOLVER_MAPPING% & & INTERFACE_CONDITIONS(1)%ptr%INTERFACE% & - & NODES%COUPLED_NODES(2,:)) + & NODES%coupledNodes(2,:)) IF(Solver2%SOLVER_equations%SOLVER_MAPPING% & & INTERFACE_CONDITIONS(1)%ptr%INTERFACE% & - & NODES%COUPLED_NODES(2,search_idx)==node_idx) THEN + & NODES%coupledNodes(2,search_idx)==node_idx) THEN SolidNodeNumber=Solver2%SOLVER_equations%SOLVER_MAPPING% & & INTERFACE_CONDITIONS(1)%ptr%INTERFACE% & - & NODES%COUPLED_NODES(1,search_idx)!might wanna put a break here + & NODES%coupledNodes(1,search_idx)!might wanna put a break here SolidNodeFound=.TRUE. END IF END DO @@ -8702,7 +8701,7 @@ SUBROUTINE NavierStokes_PreSolveAleUpdateMesh(solver,err,error,*) TYPE(FIELD_VARIABLE_TYPE), POINTER :: fluidGeometricVariable,interfaceGeometricVariable TYPE(INTERFACE_TYPE), POINTER :: fsiInterface TYPE(INTERFACE_CONDITION_TYPE), POINTER :: fsiInterfaceCondition - TYPE(NODES_TYPE), POINTER :: interfaceNodes + TYPE(NodesType), POINTER :: interfaceNodes TYPE(PROBLEM_TYPE), POINTER :: problem TYPE(SOLVER_EQUATIONS_TYPE), POINTER :: laplaceSolverEquations,fluidSolverEquations,fsiSolverEquations TYPE(SOLVER_MAPPING_TYPE), POINTER :: laplaceSolverMapping,fsiSolverMapping,fluidSolverMapping,solidSolverMapping @@ -9019,8 +9018,8 @@ SUBROUTINE NavierStokes_PreSolveAleUpdateMesh(solver,err,error,*) NULLIFY(domainNodes) CALL DomainTopology_NodesGet(domainTopology,domainNodes,err,error,*999) DO nodeIdx=1,domainNodes%TOTAL_NUMBER_OF_NODES - solidNode=interfaceNodes%COUPLED_NODES(1,nodeIdx) - fluidNode=interfaceNodes%COUPLED_NODES(2,nodeIdx) + solidNode=interfaceNodes%coupledNodes(1,nodeIdx) + fluidNode=interfaceNodes%coupledNodes(2,nodeIdx) DO derivativeIdx=1,domainNodes%nodes(nodeIdx)%NUMBER_OF_DERIVATIVES DO versionIdx=1,domainNodes%nodes(nodeIdx)%derivatives(derivativeIdx)%numberOfVersions CALL Field_ParameterSetGetNode(solidDependentField,FIELD_U_VARIABLE_TYPE,FIELD_VALUES_SET_TYPE, & diff --git a/src/Poisson_equations_routines.f90 b/src/Poisson_equations_routines.f90 index f3cb6c11..ab80aece 100755 --- a/src/Poisson_equations_routines.f90 +++ b/src/Poisson_equations_routines.f90 @@ -67,7 +67,6 @@ MODULE POISSON_EQUATIONS_ROUTINES USE Kinds USE Maths USE MatrixVector - USE NODE_ROUTINES USE PROBLEM_CONSTANTS USE Strings USE SOLVER_ROUTINES diff --git a/src/Stokes_equations_routines.f90 b/src/Stokes_equations_routines.f90 index fb38c228..4c6baf72 100755 --- a/src/Stokes_equations_routines.f90 +++ b/src/Stokes_equations_routines.f90 @@ -69,7 +69,6 @@ MODULE STOKES_EQUATIONS_ROUTINES USE ISO_VARYING_STRING USE Kinds USE MatrixVector - USE NODE_ROUTINES USE PROBLEM_CONSTANTS USE Strings USE SOLVER_ROUTINES diff --git a/src/boundary_condition_routines.f90 b/src/boundary_condition_routines.f90 index 2a9e9368..bc4701ab 100755 --- a/src/boundary_condition_routines.f90 +++ b/src/boundary_condition_routines.f90 @@ -65,7 +65,6 @@ MODULE BOUNDARY_CONDITIONS_ROUTINES #ifndef NOMPIMOD USE MPI #endif - USE NODE_ROUTINES USE Strings USE Timer USE Types diff --git a/src/characteristic_equation_routines.f90 b/src/characteristic_equation_routines.f90 index 9bce7dac..0668cfd9 100644 --- a/src/characteristic_equation_routines.f90 +++ b/src/characteristic_equation_routines.f90 @@ -73,7 +73,6 @@ MODULE CHARACTERISTIC_EQUATION_ROUTINES USE Maths USE MatrixVector USE MESH_ROUTINES - USE NODE_ROUTINES USE PROBLEM_CONSTANTS USE Strings USE SOLVER_ROUTINES diff --git a/src/diffusion_advection_diffusion_routines.f90 b/src/diffusion_advection_diffusion_routines.f90 index e2529f5a..cd1ebc65 100755 --- a/src/diffusion_advection_diffusion_routines.f90 +++ b/src/diffusion_advection_diffusion_routines.f90 @@ -66,7 +66,6 @@ MODULE DIFFUSION_ADVECTION_DIFFUSION_ROUTINES USE Maths USE MatrixVector USE MESH_ROUTINES - USE NODE_ROUTINES USE PROBLEM_CONSTANTS USE Strings USE SOLVER_ROUTINES diff --git a/src/diffusion_diffusion_routines.f90 b/src/diffusion_diffusion_routines.f90 index 2a62971a..94231684 100755 --- a/src/diffusion_diffusion_routines.f90 +++ b/src/diffusion_diffusion_routines.f90 @@ -68,7 +68,6 @@ MODULE DIFFUSION_DIFFUSION_ROUTINES USE Maths USE MatrixVector USE MESH_ROUTINES - USE NODE_ROUTINES USE PROBLEM_CONSTANTS USE Strings USE SOLVER_ROUTINES diff --git a/src/equations_set_routines.f90 b/src/equations_set_routines.f90 index c37c09c7..d907d886 100644 --- a/src/equations_set_routines.f90 +++ b/src/equations_set_routines.f90 @@ -78,7 +78,6 @@ MODULE EQUATIONS_SET_ROUTINES USE MPI #endif USE MULTI_PHYSICS_ROUTINES - USE NODE_ROUTINES USE ProfilingRoutines USE Strings USE Timer diff --git a/src/field_IO_routines.f90 b/src/field_IO_routines.f90 index b26ab275..a9b5fbdc 100755 --- a/src/field_IO_routines.f90 +++ b/src/field_IO_routines.f90 @@ -49,7 +49,7 @@ MODULE FIELD_IO_ROUTINES USE BasisRoutines USE BasisAccessRoutines USE MESH_ROUTINES - USE NODE_ROUTINES + USE NodeRoutines USE ComputationEnvironment USE COORDINATE_ROUTINES USE ISO_VARYING_STRING @@ -1645,7 +1645,7 @@ SUBROUTINE FIELD_IO_IMPORT_GLOBAL_MESH(NAME, REGION, MESH, MESH_USER_NUMBER, MAS !Local Variables TYPE(VARYING_STRING), ALLOCATABLE :: LIST_STR(:) TYPE(BASIS_TYPE), POINTER :: BASIS - TYPE(NODES_TYPE), POINTER :: NODES + TYPE(NodesType), POINTER :: NODES TYPE(MESH_ELEMENTS_TYPE_PTR_TYPE), ALLOCATABLE :: ELEMENTS_PTR(:) TYPE(VARYING_STRING) :: FILE_NAME, FILE_STATUS, LINE TYPE(VARYING_STRING) :: CMISS_KEYWORD_FIELDS, CMISS_KEYWORD_ELEMENT, CMISS_KEYWORD_NODE, CMISS_KEYWORD_COMPONENTS @@ -1860,7 +1860,7 @@ SUBROUTINE FIELD_IO_IMPORT_GLOBAL_MESH(NAME, REGION, MESH, MESH_USER_NUMBER, MAS & computationalEnvironment%mpiCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_BCAST",MPI_IERROR,ERR,ERROR,*999) NULLIFY(NODES) - CALL NODES_CREATE_START(REGION,NUMBER_OF_NODES,NODES,ERR,ERROR,*999) + CALL Nodes_CreateStart(REGION,NUMBER_OF_NODES,NODES,ERR,ERROR,*999) !collect the nodal numberings (nodal labels) to change the nodal user number by reading exnode files CALL REALLOCATE( USER_NODAL_NUMBER_MAP_GLOBAL_NODAL_NUMBER, NUMBER_OF_NODES, & @@ -1892,10 +1892,10 @@ SUBROUTINE FIELD_IO_IMPORT_GLOBAL_MESH(NAME, REGION, MESH, MESH_USER_NUMBER, MAS & computationalEnvironment%mpiCommunicator,MPI_IERROR) CALL MPI_ERROR_CHECK("MPI_BCAST",MPI_IERROR,ERR,ERROR,*999) DO idx_node=1, NUMBER_OF_NODES - IF(idx_node/=USER_NODAL_NUMBER_MAP_GLOBAL_NODAL_NUMBER(idx_node)) CALL NODES_USER_NUMBER_SET(NODES,idx_node, & + IF(idx_node/=USER_NODAL_NUMBER_MAP_GLOBAL_NODAL_NUMBER(idx_node)) CALL Nodes_UserNumberSet(NODES,idx_node, & & USER_NODAL_NUMBER_MAP_GLOBAL_NODAL_NUMBER(idx_node),ERR,ERROR,*999) ENDDO - CALL NODES_CREATE_FINISH(NODES,ERR,ERROR,*999) + CALL Nodes_CreateFinish(NODES,ERR,ERROR,*999) CALL CHECKED_DEALLOCATE( USER_NODAL_NUMBER_MAP_GLOBAL_NODAL_NUMBER ) !IF(ALLOCATED(USER_NODAL_NUMBER_MAP_GLOBAL_NODAL_NUMBER)) DEALLOCATE(USER_NODAL_NUMBER_MAP_GLOBAL_NODAL_NUMBER) diff --git a/src/field_routines.f90 b/src/field_routines.f90 index 5039921d..d275080a 100644 --- a/src/field_routines.f90 +++ b/src/field_routines.f90 @@ -63,7 +63,6 @@ MODULE FIELD_ROUTINES #endif USE MESH_ROUTINES USE MeshAccessRoutines - USE NODE_ROUTINES USE Strings USE Types diff --git a/src/fieldml_input_routines.f90 b/src/fieldml_input_routines.f90 index 27b1f081..3351f0fd 100755 --- a/src/fieldml_input_routines.f90 +++ b/src/fieldml_input_routines.f90 @@ -60,7 +60,7 @@ MODULE FIELDML_INPUT_ROUTINES USE INPUT_OUTPUT USE LISTS USE MESH_ROUTINES - USE NODE_ROUTINES + USE NodeRoutines USE REGION_ROUTINES USE RegionAccessRoutines USE STRINGS @@ -627,7 +627,7 @@ SUBROUTINE FIELDML_INPUT_NODES_CREATE_START( FIELDML_INFO, NODES_ARGUMENT_NAME, TYPE(FIELDML_IO_TYPE), POINTER :: FIELDML_INFO ! Auckland, the University of Oxford and King's College, London. !> All Rights Reserved. !> -!> Contributor(s): +!> Contributor(s): Chris Bradley !> !> Alternatively, the contents of this file may be used under the terms of !> either the GNU General Public License Version 2 or later (the "GPL"), or @@ -42,15 +42,15 @@ !> !> This module handles all node routines. -MODULE NODE_ROUTINES +MODULE NodeRoutines USE BaseRoutines USE INPUT_OUTPUT USE ISO_VARYING_STRING - USE KINDS - USE STRINGS - USE TREES - USE TYPES + USE Kinds + USE Strings + USE Trees + USE Types #include "macros.h" @@ -66,43 +66,89 @@ MODULE NODE_ROUTINES !Interfaces - !>Starts the process of creating nodes for an interface or region + INTERFACE NODE_CHECK_EXISTS + MODULE PROCEDURE Node_CheckExists + END INTERFACE NODE_CHECK_EXISTS + INTERFACE NODES_CREATE_START - MODULE PROCEDURE NODES_CREATE_START_REGION - MODULE PROCEDURE NODES_CREATE_START_INTERFACE - END INTERFACE !NODES_CREATE_START + MODULE PROCEDURE Nodes_CreateStartRegion + MODULE PROCEDURE Nodes_CreateStartInterface + END INTERFACE NODES_CREATE_START + + !>Starts the process of creating nodes for an interface or region + INTERFACE Nodes_CreateStart + MODULE PROCEDURE Nodes_CreateStartRegion + MODULE PROCEDURE Nodes_CreateStartInterface + END INTERFACE Nodes_CreateStart + + INTERFACE NODES_CREATE_FINISH + MODULE PROCEDURE Nodes_CreateFinish + END INTERFACE NODES_CREATE_FINISH !>Initialises nodes for an interface or region - INTERFACE NODES_INITIALISE - MODULE PROCEDURE NODES_INITIALISE_REGION - MODULE PROCEDURE NODES_INITIALISE_INTERFACE - END INTERFACE !NODES_INITIALIES + INTERFACE Nodes_Initialise + MODULE PROCEDURE Nodes_InitialiseRegion + MODULE PROCEDURE Nodes_InitialiseInterface + END INTERFACE Nodes_Initialise - !>Gets the label for a node identified by a given global number. INTERFACE NODES_LABEL_GET - MODULE PROCEDURE NODES_LABEL_GET_C - MODULE PROCEDURE NODES_LABEL_GET_VS - END INTERFACE !NODES_LABEL_SET + MODULE PROCEDURE Nodes_LabelGetC + MODULE PROCEDURE Nodes_LabelGetVS + END INTERFACE NODES_LABEL_GET + + !>Gets the label for a node identified by a given global number. + INTERFACE Nodes_LabelGet + MODULE PROCEDURE Nodes_LabelGetC + MODULE PROCEDURE Nodes_LabelGetVS + END INTERFACE Nodes_LabelGet + + INTERFACE NODES_LABEL_SET + MODULE PROCEDURE Nodes_LabelSetC + MODULE PROCEDURE Nodes_LabelSetVS + END INTERFACE NODES_LABEL_SET !>Changes/sets the label for a node identified by a given global number. - INTERFACE NODES_LABEL_SET - MODULE PROCEDURE NODES_LABEL_SET_C - MODULE PROCEDURE NODES_LABEL_SET_VS - END INTERFACE !NODES_LABEL_SET + INTERFACE Nodes_LabelSet + MODULE PROCEDURE Nodes_LabelSetC + MODULE PROCEDURE Nodes_LabelSetVS + END INTERFACE Nodes_LabelSet + + INTERFACE NODES_NUMBER_OF_NODES_GET + MODULE PROCEDURE Nodes_NumberOfNodesGet + END INTERFACE NODES_NUMBER_OF_NODES_GET + + INTERFACE NODES_USER_NUMBER_GET + MODULE PROCEDURE Nodes_UserNumberGet + END INTERFACE NODES_USER_NUMBER_GET + + INTERFACE NODES_USER_NUMBER_SET + MODULE PROCEDURE Nodes_UserNumberSet + END INTERFACE NODES_USER_NUMBER_SET PUBLIC NODE_CHECK_EXISTS - PUBLIC NODES_CREATE_FINISH,NODES_CREATE_START,NODES_DESTROY + PUBLIC Node_CheckExists + + PUBLIC NODES_CREATE_FINISH,NODES_CREATE_START + + PUBLIC Nodes_CreateFinish,Nodes_CreateStart + + PUBLIC Nodes_Destroy PUBLIC NODES_LABEL_GET,NODES_LABEL_SET + PUBLIC Nodes_LabelGet,Nodes_LabelSet + PUBLIC NODES_NUMBER_OF_NODES_GET + + PUBLIC NODES_NumberOfNodesGet PUBLIC NODES_USER_NUMBER_GET,NODES_USER_NUMBER_SET + + PUBLIC Nodes_UserNumberGet,Nodes_UserNumberSet - PUBLIC NodesUserNumbersAllSet + PUBLIC Nodes_UserNumbersAllSet - !PUBLIC NODES_NUMBER_OF_VERSIONS_SET CONTAINS @@ -111,741 +157,693 @@ MODULE NODE_ROUTINES ! !>Checks that a user node number is defined on the specified region. - SUBROUTINE NODE_CHECK_EXISTS(NODES,USER_NUMBER,NODE_EXISTS,GLOBAL_NUMBER,ERR,ERROR,*) + SUBROUTINE Node_CheckExists(nodes,userNumber,nodeExists,globalNumber,err,error,*) !Argument variables - TYPE(NODES_TYPE), POINTER :: NODES !Finalises a node and deallocates all memory - SUBROUTINE NODE_FINALISE(NODE,ERR,ERROR,*) + SUBROUTINE Node_Finalise(node,err,error,*) !Argument variables - TYPE(NODE_TYPE),INTENT(OUT) :: NODE !Finishes the process of creating nodes in the region. \see OPENCMISS::CMISSNodesCreateFinish - SUBROUTINE NODES_CREATE_FINISH(NODES,ERR,ERROR,*) + !>Initialises a node + SUBROUTINE Node_Initialise(node,err,error,*) + + !Argument variables + TYPE(NodeType), INTENT(OUT) :: node !Finishes the process of creating nodes in the region. \see OpenCMISS::Iron::cmfe_Nodes_CreateFinish + SUBROUTINE Nodes_CreateFinish(nodes,err,error,*) !Argument variables - TYPE(NODES_TYPE), POINTER :: NODES !Global number tree",ERR,ERROR,*999) - CALL TREE_OUTPUT(DIAGNOSTIC_OUTPUT_TYPE,NODES%NODES_TREE,ERR,ERROR,*999) + nodes%nodesFinished=.TRUE. + + IF(diagnostics1) THEN + CALL WriteStringValue(DIAGNOSTIC_OUTPUT_TYPE,"Number of nodes = ",nodes%numberOfNodes,err,error,*999) + DO nodeIdx=1,nodes%numberOfNodes + CALL WriteStringValue(DIAGNOSTIC_OUTPUT_TYPE," Node = ",nodeIdx,err,error,*999) + CALL WriteStringValue(DIAGNOSTIC_OUTPUT_TYPE," Global number = ",nodes%nodes(nodeIdx)%globalNumber,err,error,*999) + CALL WriteStringValue(DIAGNOSTIC_OUTPUT_TYPE," User number = ",nodes%nodes(nodeIdx)%userNumber,err,error,*999) + CALL WriteStringValue(DIAGNOSTIC_OUTPUT_TYPE," Label = ",nodes%nodes(nodeIdx)%label,err,error,*999) + ENDDO !nodeIdx + CALL WriteString(DIAGNOSTIC_OUTPUT_TYPE,"User->Global number tree:",err,error,*999) + CALL Tree_Output(DIAGNOSTIC_OUTPUT_TYPE,nodes%nodesTree,err,error,*999) ENDIF - EXITS("NODES_CREATE_FINISH") + EXITS("Nodes_CreateFinish") RETURN -999 ERRORSEXITS("NODES_CREATE_FINISH",ERR,ERROR) +999 ERRORSEXITS("Nodes_CreateFinish",err,error) RETURN 1 - END SUBROUTINE NODES_CREATE_FINISH + END SUBROUTINE Nodes_CreateFinish ! !================================================================================================================================ ! !>Starts the process of creating generic nodes. - SUBROUTINE NODES_CREATE_START_GENERIC(NODES,NUMBER_OF_NODES,ERR,ERROR,*) + SUBROUTINE Nodes_CreateStartGeneric(nodes,numberOfNodes,err,error,*) !Argument variables - TYPE(NODES_TYPE), POINTER :: NODES !0) THEN - ALLOCATE(NODES%NODES(NUMBER_OF_NODES),STAT=ERR) - IF(ERR/=0) CALL FlagError("Could not allocate nodes nodes.",ERR,ERROR,*999) - NODES%NUMBER_OF_NODES=NUMBER_OF_NODES - CALL TREE_CREATE_START(NODES%NODES_TREE,ERR,ERROR,*999) - CALL TREE_INSERT_TYPE_SET(NODES%NODES_TREE,TREE_NO_DUPLICATES_ALLOWED,ERR,ERROR,*999) - CALL TREE_CREATE_FINISH(NODES%NODES_TREE,ERR,ERROR,*999) - !Set default node numbers - DO np=1,NODES%NUMBER_OF_NODES - NODES%NODES(np)%GLOBAL_NUMBER=np - NODES%NODES(np)%USER_NUMBER=np - NODES%NODES(np)%LABEL="" - CALL TREE_ITEM_INSERT(NODES%NODES_TREE,np,np,INSERT_STATUS,ERR,ERROR,*999) - ENDDO !np - ELSE - LOCAL_ERROR="The specified number of nodes of "//TRIM(NUMBER_TO_VSTRING(NUMBER_OF_NODES,"*",ERR,ERROR))// & - & " is invalid. The number of nodes must be > 0." - CALL FlagError(LOCAL_ERROR,ERR,ERROR,*999) - ENDIF - ELSE - CALL FlagError("Nodes is not associated.",ERR,ERROR,*999) + INTEGER(INTG) :: insertStatus,nodeIdx + TYPE(VARYING_STRING) :: localError + + ENTERS("Nodes_CreateStartGeneric",err,error,*999) + + IF(.NOT.ASSOCIATED(nodes)) CALL FlagError("Nodes is not associated.",err,error,*999) + + IF(numberOfNodes<=0) THEN + localError="The specified number of nodes of "//TRIM(NumberToVString(numberOfNodes,"*",err,error))// & + & " is invalid. The number of nodes must be > 0." + CALL FlagError(localError,err,error,*999) ENDIF - EXITS("NODES_CREATE_START_GENERIC") + ALLOCATE(nodes%nodes(numberOfNodes),STAT=err) + IF(err/=0) CALL FlagError("Could not allocate nodes nodes.",err,error,*999) + nodes%numberOfNodes=numberOfNodes + CALL Tree_CreateStart(nodes%nodesTree,err,error,*999) + CALL Tree_InsertTypeSet(nodes%nodesTree,TREE_NO_DUPLICATES_ALLOWED,err,error,*999) + CALL Tree_CreateFinish(nodes%nodesTree,err,error,*999) + !Set default node numbers + DO nodeIdx=1,nodes%numberOfNodes + CALL Node_Initialise(nodes%nodes(nodeIdx),err,error,*999) + nodes%nodes(nodeIdx)%globalNumber=nodeIdx + nodes%nodes(nodeIdx)%userNumber=nodeIdx + CALL Tree_ItemInsert(nodes%nodesTree,nodeIdx,nodeIdx,insertStatus,err,error,*999) + ENDDO !nodeIdx + + EXITS("Nodes_CreateStartGeneric") RETURN -999 ERRORSEXITS("NODES_CREATE_START_GENERIC",ERR,ERROR) +999 ERRORSEXITS("Nodes_CreateStartGeneric",err,error) RETURN 1 - END SUBROUTINE NODES_CREATE_START_GENERIC + END SUBROUTINE Nodes_CreateStartGeneric ! !================================================================================================================================ ! - !>Starts the process of creating nodes in an interface. - SUBROUTINE NODES_CREATE_START_INTERFACE(INTERFACE,NUMBER_OF_NODES,NODES,ERR,ERROR,*) + !>Starts the process of creating nodes in an interface. \see OpenCMISS::Iron::cmfe_Nodes_CreateStart + SUBROUTINE Nodes_CreateStartInterface(interface,numberOfNodes,nodes,err,error,*) !Argument variables - TYPE(INTERFACE_TYPE), POINTER :: INTERFACE !INTERFACE%NODES - ENDIF - ENDIF - ELSE - CALL FlagError("Interface is not associated.",ERR,ERROR,*998) - ENDIF - - EXITS("NODES_CREATE_START_INTERFACE") + IF(.NOT.ASSOCIATED(interface)) CALL FlagError("Interface is not associated.",err,error,*998) + IF(ASSOCIATED(interface%nodes)) CALL FlagError("Interface already has nodes associated.",err,error,*998) + IF(ASSOCIATED(nodes)) CALL FlagError("Nodes is already associated.",err,error,*999) + + !Initialise the nodes for the interface + CALL Nodes_Initialise(interface,err,error,*999) + !Create the nodes + CALL Nodes_CreateStartGeneric(interface%nodes,numberOfNodes,err,error,*999) + !Return the pointer + nodes=>interface%nodes + + EXITS("Nodes_CreateStartInterface") RETURN -999 CALL NODES_FINALISE(INTERFACE%NODES,DUMMY_ERR,DUMMY_ERROR,*998) -998 ERRORSEXITS("NODES_CREATE_START_INTERFACE",ERR,ERROR) +999 CALL Nodes_Finalise(interface%nodes,dummyErr,dummyError,*998) +998 ERRORSEXITS("Nodes_CreateStartInterface",err,error) RETURN 1 - END SUBROUTINE NODES_CREATE_START_INTERFACE + END SUBROUTINE Nodes_CreateStartInterface ! !================================================================================================================================ ! - !>Starts the process of creating nodes in the region. \see OPENCMISS::CMISSNodesCreateStart - SUBROUTINE NODES_CREATE_START_REGION(REGION,NUMBER_OF_NODES,NODES,ERR,ERROR,*) + !>Starts the process of creating nodes in the region. \see OpenCMISS::Iron::cmfe_Nodes_CreateStart + SUBROUTINE Nodes_CreateStartRegion(region,numberOfNodes,nodes,err,error,*) !Argument variables - TYPE(REGION_TYPE), POINTER :: REGION !REGION%NODES - ENDIF - ENDIF - ELSE - CALL FlagError("Region is not associated.",ERR,ERROR,*998) - ENDIF + IF(.NOT.ASSOCIATED(region)) CALL FlagError("Region is not associated.",err,error,*998) + IF(ASSOCIATED(region%nodes)) CALL FlagError("Region already has nodes associated.",err,error,*998) + IF(ASSOCIATED(nodes)) CALL FlagError("Nodes is already associated.",err,error,*998) - EXITS("NODES_CREATE_START_REGION") + !Initialise the nodes for the region + CALL Nodes_Initialise(region,err,error,*999) + !Create the generic nodes + CALL Nodes_CreateStartGeneric(region%nodes,numberOfNodes,err,error,*999) + !Return the pointer + nodes=>region%nodes + + EXITS("Nodes_CreateStartRegion") RETURN -999 CALL NODES_FINALISE(REGION%NODES,DUMMY_ERR,DUMMY_ERROR,*998) -998 ERRORSEXITS("NODES_CREATE_START_REGION",ERR,ERROR) +999 CALL Nodes_Finalise(region%nodes,dummyErr,dummyError,*998) +998 ERRORSEXITS("Nodes_CreateStartRegion",err,error) RETURN 1 - END SUBROUTINE NODES_CREATE_START_REGION + END SUBROUTINE Nodes_CreateStartRegion ! !================================================================================================================================ ! - !>Destroys nodes. \see OPENCMISS::CMISSNodesDestroy - SUBROUTINE NODES_DESTROY(NODES,ERR,ERROR,*) + !>Destroys nodes. \see OpenCMISS::Iron::cmfe_Nodes_Destroy + SUBROUTINE Nodes_Destroy(nodes,err,error,*) !Argument variables - TYPE(NODES_TYPE), POINTER :: NODES !Finalises the nodes and deallocates any memory. - SUBROUTINE NODES_FINALISE(NODES,ERR,ERROR,*) + SUBROUTINE Nodes_Finalise(nodes,err,error,*) !Argument variables - TYPE(NODES_TYPE), POINTER :: NODES !Initialises the nodes. - SUBROUTINE NODES_INITIALISE_GENERIC(NODES,ERR,ERROR,*) + SUBROUTINE Nodes_InitialiseGeneric(nodes,err,error,*) !Argument variables - TYPE(NODES_TYPE), POINTER :: NODES !Initialises the nodes in a given interface. - SUBROUTINE NODES_INITIALISE_INTERFACE(INTERFACE,ERR,ERROR,*) + SUBROUTINE Nodes_InitialiseInterface(INTERFACE,err,error,*) !Argument variables - TYPE(INTERFACE_TYPE), POINTER :: INTERFACE !INTERFACE - ENDIF - ELSE - CALL FlagError("Interface is not associated.",ERR,ERROR,*999) - ENDIF + IF(.NOT.ASSOCIATED(interface)) CALL FlagError("Interface is not associated.",err,error,*998) + IF(ASSOCIATED(interface%nodes)) CALL FlagError("Interface already has associated nodes.",err,error,*998) - EXITS("NODES_INITIALISE_INTERFACE") + ALLOCATE(interface%nodes,STAT=err) + IF(err/=0) CALL FlagError("Could not allocate interface nodes.",err,error,*999) + CALL Nodes_InitialiseGeneric(interface%nodes,err,error,*999) + interface%nodes%interface=>interface + + EXITS("Nodes_InitialiseInterface") RETURN -999 ERRORSEXITS("NODES_INITIALISE_INTERFACE",ERR,ERROR) +999 CALL Nodes_Finalise(interface%nodes,dummyErr,dummyError,*998) +998 ERRORSEXITS("Nodes_InitialiseInterface",err,error) RETURN 1 - END SUBROUTINE NODES_INITIALISE_INTERFACE + END SUBROUTINE Nodes_InitialiseInterface ! !================================================================================================================================ ! !>Initialises the nodes in a given region. - SUBROUTINE NODES_INITIALISE_REGION(REGION,ERR,ERROR,*) + SUBROUTINE Nodes_InitialiseRegion(region,err,error,*) !Argument variables - TYPE(REGION_TYPE), POINTER :: REGION !REGION - ENDIF - ELSE - CALL FlagError("Region is not associated.",ERR,ERROR,*999) - ENDIF + IF(.NOT.ASSOCIATED(region)) CALL FlagError("Region is not associated.",err,error,*998) + IF(ASSOCIATED(region%nodes)) CALL FlagError("Region has associated nodes.",err,error,*998) - EXITS("NODES_INITIALISE_REGION") + ALLOCATE(region%nodes,STAT=err) + IF(err/=0) CALL FlagError("Could not allocate region nodes.",err,error,*999) + CALL Nodes_InitialiseGeneric(region%nodes,err,error,*999) + region%nodes%region=>region + + EXITS("Nodes_InitialiseRegion") RETURN -999 ERRORSEXITS("NODES_INITIALISE_REGION",ERR,ERROR) +999 CALL Nodes_Finalise(region%nodes,dummyErr,dummyError,*998) +998 ERRORSEXITS("Nodes_InitialiseRegion",err,error) RETURN 1 - END SUBROUTINE NODES_INITIALISE_REGION + + END SUBROUTINE Nodes_InitialiseRegion ! !================================================================================================================================ ! - !>Gets the character label for a node identified by a given global number. \see OPENCMISS::CMISSNodesLabelGet - SUBROUTINE NODES_LABEL_GET_C(NODES,GLOBAL_NUMBER,LABEL,ERR,ERROR,*) + !>Gets the character label for a node identified by a given global number. \see OpenCMISS::Iron::cmfe_Nodes_LabelGet + SUBROUTINE Nodes_LabelGetC(nodes,globalNumber,label,err,error,*) !Argument variables - TYPE(NODES_TYPE), POINTER :: NODES !=1.AND.GLOBAL_NUMBER<=NODES%NUMBER_OF_NODES) THEN - C_LENGTH=LEN(LABEL) - VS_LENGTH=LEN_TRIM(NODES%NODES(GLOBAL_NUMBER)%LABEL) - IF(C_LENGTH>VS_LENGTH) THEN - LABEL=CHAR(LEN_TRIM(NODES%NODES(GLOBAL_NUMBER)%LABEL)) - ELSE - LABEL=CHAR(NODES%NODES(GLOBAL_NUMBER)%LABEL,C_LENGTH) - ENDIF - ELSE - LOCAL_ERROR="The specified global node number of "//TRIM(NUMBER_TO_VSTRING(GLOBAL_NUMBER,"*",ERR,ERROR))// & - & " is invalid. The global node number should be between 1 and "// & - & TRIM(NUMBER_TO_VSTRING(NODES%NUMBER_OF_NODES,"*",ERR,ERROR))//"." - CALL FlagError(LOCAL_ERROR,ERR,ERROR,*999) - ENDIF - ELSE - CALL FlagError("Nodes have not been finished.",ERR,ERROR,*999) - ENDIF + INTEGER :: cLength,vsLength + TYPE(VARYING_STRING) :: localError + + ENTERS("Nodes_LabelGetC",err,error,*999) + + IF(.NOT.ASSOCIATED(nodes)) CALL FlagError("Nodes is not associated.",err,error,*999) + IF(.NOT.nodes%nodesFinished) CALL FlagError("Nodes have not been finished.",err,error,*999) + IF(globalNumber<1.OR.globalNumber>nodes%numberOfNodes) THEN + localError="The specified global node number of "//TRIM(NumberToVString(globalNumber,"*",err,error))// & + & " is invalid. The global node number should be between 1 and "// & + & TRIM(NumberToVString(nodes%numberOfNodes,"*",err,error))//"." + CALL FlagError(localError,err,error,*999) + ENDIF + + cLength=LEN(label) + vsLength=LEN_TRIM(nodes%nodes(globalNumber)%label) + IF(cLength>vsLength) THEN + label=CHAR(LEN_TRIM(nodes%nodes(globalNumber)%label)) ELSE - CALL FlagError("Nodes is not associated.",ERR,ERROR,*999) + label=CHAR(nodes%nodes(globalNumber)%label,cLength) ENDIF - EXITS("NODES_LABEL_GET_C") + EXITS("Nodes_LabelGetC") RETURN -999 ERRORSEXITS("NODES_LABEL_GET_C",ERR,ERROR) +999 ERRORSEXITS("Nodes_LabelGetC",err,error) RETURN 1 - END SUBROUTINE NODES_LABEL_GET_C + END SUBROUTINE Nodes_LabelGetC ! !================================================================================================================================ ! - !>Gets the varying string label for a node identified by a given global number. \see OPENCMISS::CMISSNodesLabelGet - SUBROUTINE NODES_LABEL_GET_VS(NODES,GLOBAL_NUMBER,LABEL,ERR,ERROR,*) + !>Gets the varying string label for a node identified by a given global number. \see OpenCMISS::Iron::cmfe_Nodes_LabelGet + SUBROUTINE Nodes_LabelGetVS(nodes,globalNumber,label,err,error,*) !Argument variables - TYPE(NODES_TYPE), POINTER :: NODES !=1.AND.GLOBAL_NUMBER<=NODES%NUMBER_OF_NODES) THEN - LABEL=NODES%NODES(GLOBAL_NUMBER)%LABEL - ELSE - LOCAL_ERROR="The specified global node number of "//TRIM(NUMBER_TO_VSTRING(GLOBAL_NUMBER,"*",ERR,ERROR))// & - & " is invalid. The global node number should be between 1 and "// & - & TRIM(NUMBER_TO_VSTRING(NODES%NUMBER_OF_NODES,"*",ERR,ERROR))//"." - CALL FlagError(LOCAL_ERROR,ERR,ERROR,*999) - ENDIF - ELSE - CALL FlagError("Nodes have not been finished.",ERR,ERROR,*999) - ENDIF - ELSE - CALL FlagError("Nodes is not associated.",ERR,ERROR,*999) + TYPE(VARYING_STRING) :: localError + + ENTERS("Nodes_LabelGetVS",err,error,*999) + + IF(.NOT.ASSOCIATED(nodes)) CALL FlagError("Nodes is not associated.",err,error,*999) + IF(.NOT.nodes%nodesFinished) CALL FlagError("Nodes have not been finished.",err,error,*999) + IF(globalNumber<1.OR.globalNumber>nodes%numberOfNodes) THEN + localError="The specified global node number of "//TRIM(NumberToVString(globalNumber,"*",err,error))// & + & " is invalid. The global node number should be between 1 and "// & + & TRIM(NumberToVString(nodes%numberOfNodes,"*",err,error))//"." + CALL FlagError(localError,err,error,*999) ENDIF - EXITS("NODES_LABEL_GET_VS") + label=nodes%nodes(globalNumber)%label + + EXITS("Nodes_LabelGetVS") RETURN -999 ERRORSEXITS("NODES_LABEL_GET_VS",ERR,ERROR) +999 ERRORSEXITS("Nodes_LabelGetVS",err,error) RETURN 1 - END SUBROUTINE NODES_LABEL_GET_VS + END SUBROUTINE Nodes_LabelGetVS ! !================================================================================================================================ ! - !>Changes/sets the character label for a node identified by a given global number. \see OPENCMISS::CMISSNodesLabelSet - SUBROUTINE NODES_LABEL_SET_C(NODES,GLOBAL_NUMBER,LABEL,ERR,ERROR,*) + !>Changes/sets the character label for a node identified by a given global number. \see OpenCMISS::Iron::cmfe_Nodes_LabelSet + SUBROUTINE Nodes_LabelSetC(nodes,globalNumber,label,err,error,*) !Argument variables - TYPE(NODES_TYPE), POINTER :: NODES !=1.AND.GLOBAL_NUMBER<=NODES%NUMBER_OF_NODES) THEN - NODES%NODES(GLOBAL_NUMBER)%LABEL=LABEL - ELSE - LOCAL_ERROR="The specified global node number of "//TRIM(NUMBER_TO_VSTRING(GLOBAL_NUMBER,"*",ERR,ERROR))// & - & " is invalid. The global node number should be between 1 and "// & - & TRIM(NUMBER_TO_VSTRING(NODES%NUMBER_OF_NODES,"*",ERR,ERROR))//"." - CALL FlagError(LOCAL_ERROR,ERR,ERROR,*999) - ENDIF - ENDIF - ELSE - CALL FlagError("Nodes is not associated.",ERR,ERROR,*999) + IF(.NOT.ASSOCIATED(nodes)) CALL FlagError("Nodes is not associated.",err,error,*999) + IF(globalNumber<1.OR.globalNumber>nodes%numberOfNodes) THEN + localError="The specified global node number of "//TRIM(NumberToVString(globalNumber,"*",err,error))// & + & " is invalid. The global node number should be between 1 and "// & + & TRIM(NumberToVString(nodes%numberOfNodes,"*",err,error))//"." + CALL FlagError(localError,err,error,*999) ENDIF - EXITS("NODES_LABEL_SET_C") + nodes%nodes(globalNumber)%label=label + + EXITS("Nodes_LabelSetC") RETURN -999 ERRORSEXITS("NODES_LABEL_SET_C",ERR,ERROR) +999 ERRORSEXITS("Nodes_LabelSetC",err,error) RETURN 1 - END SUBROUTINE NODES_LABEL_SET_C + END SUBROUTINE Nodes_LabelSetC ! !================================================================================================================================ ! - !>Changes/sets the varying string label for a node identified by a given global number. \see OPENCMISS::CMISSNodesLabelSet - SUBROUTINE NODES_LABEL_SET_VS(NODES,GLOBAL_NUMBER,LABEL,ERR,ERROR,*) + !>Changes/sets the varying string label for a node identified by a given global number. \see OpenCMISS::Iron::cmfe_Nodes_LabelSet + SUBROUTINE Nodes_LabelSetVS(nodes,globalNumber,label,err,error,*) !Argument variables - TYPE(NODES_TYPE), POINTER :: NODES !=1.AND.GLOBAL_NUMBER<=NODES%NUMBER_OF_NODES) THEN - NODES%NODES(GLOBAL_NUMBER)%LABEL=LABEL - ELSE - LOCAL_ERROR="The specified global node number of "//TRIM(NUMBER_TO_VSTRING(GLOBAL_NUMBER,"*",ERR,ERROR))// & - & " is invalid. The global node number should be between 1 and "// & - & TRIM(NUMBER_TO_VSTRING(NODES%NUMBER_OF_NODES,"*",ERR,ERROR))//"." - CALL FlagError(LOCAL_ERROR,ERR,ERROR,*999) - ENDIF - ENDIF - ELSE - CALL FlagError("Nodes is not associated.",ERR,ERROR,*999) + IF(.NOT.ASSOCIATED(nodes)) CALL FlagError("Nodes is not associated.",err,error,*999) + IF(globalNumber<1.OR.globalNumber>nodes%numberOfNodes) THEN + localError="The specified global node number of "//TRIM(NumberToVString(globalNumber,"*",err,error))// & + & " is invalid. The global node number should be between 1 and "// & + & TRIM(NumberToVString(nodes%numberOfNodes,"*",err,error))//"." + CALL FlagError(localError,err,error,*999) ENDIF - EXITS("NODES_LABEL_SET_VS") + nodes%nodes(globalNumber)%label=label + + EXITS("Nodes_LabelSetVS") RETURN -999 ERRORSEXITS("NODES_LABEL_SET_VS",ERR,ERROR) +999 ERRORSEXITS("Nodes_LabelSetVS",err,error) RETURN 1 - END SUBROUTINE NODES_LABEL_SET_VS + END SUBROUTINE Nodes_LabelSetVS ! !================================================================================================================================ ! - !>Returns the number of nodes. \see OPENCMISS::CMISSNodesNumberOfNodesGet - SUBROUTINE NODES_NUMBER_OF_NODES_GET(NODES,NUMBER_OF_NODES,ERR,ERROR,*) + !>Returns the number of nodes. \see OpenCMISS::Iron::cmfe_Nodes_NumberOfNodesGet + SUBROUTINE Nodes_NumberOfNodesGet(nodes,numberOfNodes,err,error,*) !Argument variables - TYPE(NODES_TYPE), POINTER :: NODES !Gets the user number for a node identified by a given global number. \see OPENCMISS::CMISSNodesUserNumberGet - SUBROUTINE NODES_USER_NUMBER_GET(NODES,GLOBAL_NUMBER,USER_NUMBER,ERR,ERROR,*) + !>Gets the user number for a node identified by a given global number. \see OpenCMISS::Iron::cmfe_Nodes_UserNumberGet + SUBROUTINE Nodes_UserNumberGet(nodes,globalNumber,userNumber,err,error,*) !Argument variables - TYPE(NODES_TYPE), POINTER :: NODES !=1.AND.GLOBAL_NUMBER<=NODES%NUMBER_OF_NODES) THEN - USER_NUMBER=NODES%NODES(GLOBAL_NUMBER)%USER_NUMBER - ELSE - LOCAL_ERROR="The specified global node number of "//TRIM(NUMBER_TO_VSTRING(GLOBAL_NUMBER,"*",ERR,ERROR))// & - & " is invalid. The global node number should be between 1 and "// & - & TRIM(NUMBER_TO_VSTRING(NODES%NUMBER_OF_NODES,"*",ERR,ERROR))//"." - CALL FlagError(LOCAL_ERROR,ERR,ERROR,*999) - ENDIF - ELSE - CALL FlagError("Nodes have not been finished.",ERR,ERROR,*999) - ENDIF - ELSE - CALL FlagError("Nodes is not associated.",ERR,ERROR,*999) + TYPE(VARYING_STRING) :: localError + + ENTERS("Nodes_UserNumberGet",err,error,*999) + + IF(.NOT.ASSOCIATED(nodes)) CALL FlagError("Nodes is not associated.",err,error,*999) + IF(.NOT.nodes%nodesFinished) CALL FlagError("Nodes have not been finished.",err,error,*999) + IF(globalNumber<1.OR.globalNumber>nodes%numberOfNodes) THEN + localError="The specified global node number of "//TRIM(NumberToVString(globalNumber,"*",err,error))// & + & " is invalid. The global node number should be between 1 and "// & + & TRIM(NumberToVString(nodes%numberOfNodes,"*",err,error))//"." + CALL FlagError(localError,err,error,*999) ENDIF - EXITS("NODES_USER_NUMBER_GET") + userNumber=nodes%nodes(globalNumber)%userNumber + + EXITS("Nodes_UserNumberGet") RETURN -999 ERRORSEXITS("NODES_USER_NUMBER_GET",ERR,ERROR) +999 ERRORSEXITS("Nodes_UserNumberGet",err,error) RETURN 1 - END SUBROUTINE NODES_USER_NUMBER_GET + END SUBROUTINE Nodes_UserNumberGet ! !================================================================================================================================ ! - !>Changes/sets the user number for a node identified by a given global number. \see OPENCMISS::CMISSNodesUserNumberSet - SUBROUTINE NODES_USER_NUMBER_SET(NODES,GLOBAL_NUMBER,USER_NUMBER,ERR,ERROR,*) + !>Changes/sets the user number for a node identified by a given global number. \see OpenCMISS::Iron::cmfe_Nodes_UserNumberSet + SUBROUTINE Nodes_UserNumberSet(nodes,globalNumber,userNumber,err,error,*) !Argument variables - TYPE(NODES_TYPE), POINTER :: NODES !=1.AND.GLOBAL_NUMBER<=NODES%NUMBER_OF_NODES) THEN - !Check the node user number is not already used - CALL NODE_CHECK_EXISTS(NODES,USER_NUMBER,NODE_EXISTS,OLD_GLOBAL_NUMBER,ERR,ERROR,*999) - IF(NODE_EXISTS) THEN - IF(OLD_GLOBAL_NUMBER/=GLOBAL_NUMBER) THEN - LOCAL_ERROR="The specified node user number of "//TRIM(NUMBER_TO_VSTRING(USER_NUMBER,"*",ERR,ERROR))// & - & " is already used by global node number "//TRIM(NUMBER_TO_VSTRING(OLD_GLOBAL_NUMBER,"*",ERR,ERROR))// & - & ". User node numbers must be unique." - CALL FlagError(LOCAL_ERROR,ERR,ERROR,*999) - ENDIF - ELSE - CALL TREE_ITEM_DELETE(NODES%NODES_TREE,NODES%NODES(GLOBAL_NUMBER)%USER_NUMBER,ERR,ERROR,*999) - CALL TREE_ITEM_INSERT(NODES%NODES_TREE,USER_NUMBER,GLOBAL_NUMBER,INSERT_STATUS,ERR,ERROR,*999) - IF(INSERT_STATUS/=TREE_NODE_INSERT_SUCESSFUL) CALL FlagError("Unsucessful nodes tree insert.",ERR,ERROR,*999) - NODES%NODES(GLOBAL_NUMBER)%USER_NUMBER=USER_NUMBER - ENDIF - ELSE - LOCAL_ERROR="The specified global node number of "//TRIM(NUMBER_TO_VSTRING(GLOBAL_NUMBER,"*",ERR,ERROR))// & - & " is invalid. The global node number should be between 1 and "// & - & TRIM(NUMBER_TO_VSTRING(NODES%NUMBER_OF_NODES,"*",ERR,ERROR))//"." - CALL FlagError(LOCAL_ERROR,ERR,ERROR,*999) - ENDIF - ENDIF + IF(ASSOCIATED(nodes)) CALL FlagError("Nodes is not associated.",err,error,*999) + IF(nodes%nodesFinished) CALL FlagError("Nodes have been finished.",err,error,*999) + IF(globalNumber<1.OR.globalNumber>nodes%numberOfNodes) THEN + localError="The specified global node number of "//TRIM(NumberToVString(globalNumber,"*",err,error))// & + & " is invalid. The global node number should be between 1 and "// & + & TRIM(NumberToVString(nodes%numberOfNodes,"*",err,error))//"." + CALL FlagError(localError,err,error,*999) + ENDIF + + !Check the node user number is not already used + CALL Node_CheckExists(nodes,userNumber,nodeExists,oldGlobalNumber,err,error,*999) + IF(nodeExists) THEN + IF(oldGlobalNumber/=globalNumber) THEN + localError="The specified node user number of "//TRIM(NumberToVString(userNumber,"*",err,error))// & + & " is already used by global node number "//TRIM(NumberToVString(oldGlobalNumber,"*",err,error))// & + & ". User node numbers must be unique." + CALL FlagError(localError,err,error,*999) + ENDIF ELSE - CALL FlagError("Nodes is not associated.",ERR,ERROR,*999) + CALL Tree_ItemDelete(nodes%nodesTree,nodes%nodes(globalNumber)%userNumber,err,error,*999) + CALL Tree_ItemInsert(nodes%nodesTree,userNumber,globalNumber,insertStatus,err,error,*999) + IF(insertStatus/=TREE_NODE_INSERT_SUCESSFUL) CALL FlagError("Unsucessful nodes tree insert.",err,error,*999) + nodes%nodes(globalNumber)%userNumber=userNumber ENDIF - EXITS("NODES_USER_NUMBER_SET") + EXITS("Nodes_UserNumberSet") RETURN -999 ERRORSEXITS("NODES_USER_NUMBER_SET",ERR,ERROR) +999 ERRORSEXITS("Nodes_UserNumberSet",err,error) RETURN 1 - END SUBROUTINE NODES_USER_NUMBER_SET + END SUBROUTINE Nodes_UserNumberSet ! !================================================================================================================================ ! - !>Changes/sets the user numbers for all nodes. \see OPENCMISS::CMISSNodes_UserNumbersAllSet - SUBROUTINE NodesUserNumbersAllSet(nodes,userNumbers,err,error,*) + !>Changes/sets the user numbers for all nodes. \see OpenCMISS::Iron::cmfe_Nodes_UserNumbersAllSet + SUBROUTINE Nodes_UserNumbersAllSet(nodes,userNumbers,err,error,*) !Argument variables - TYPE(NODES_TYPE), POINTER :: nodes !newNodesTree - NULLIFY(newNodesTree) - DO nodeIdx=1,nodes%NUMBER_OF_NODES - nodes%NODES(nodeIdx)%GLOBAL_NUMBER=nodeIdx - nodes%NODES(nodeIdx)%USER_NUMBER=userNumbers(nodeIdx) - ENDDO !nodesIdx - ELSE - localError="The number of specified node user numbers ("// & - TRIM(NumberToVstring(SIZE(userNumbers,1),"*",err,error))// & - ") does not match number of nodes ("// & - TRIM(NumberToVstring(nodes%NUMBER_OF_NODES,"*",err,error))//")." - CALL FlagError(localError,err,error,*999) - ENDIF - ENDIF - ELSE - CALL FlagError("Nodes is not associated.",err,error,*999) + IF(.NOT.ASSOCIATED(nodes)) CALL FlagError("Nodes is not associated.",err,error,*999) + IF(nodes%nodesFinished) CALL FlagError("Nodes have been finished.",err,error,*999) + IF(SIZE(userNumbers,1)/=nodes%numberOfNodes) THEN + localError="The number of specified node user numbers of "// & + TRIM(NumberToVstring(SIZE(userNumbers,1),"*",err,error))// & + " does not match number of nodes of "// & + TRIM(NumberToVstring(nodes%numberOfNodes,"*",err,error))//"." + CALL FlagError(localError,err,error,*999) ENDIF - EXITS("NodesUserNumbersAllSet") + !Check the users numbers to ensure that there are no duplicates + CALL Tree_CreateStart(newNodesTree,err,error,*999) + CALL Tree_InsertTypeSet(newNodesTree,TREE_NO_DUPLICATES_ALLOWED,err,error,*999) + CALL Tree_CreateFinish(newNodesTree,err,error,*999) + DO nodeIdx=1,nodes%numberOfNodes + CALL Tree_ItemInsert(newNodesTree,userNumbers(nodeIdx),nodeIdx,insertStatus,err,error,*999) + IF(insertStatus/=TREE_NODE_INSERT_SUCESSFUL) THEN + localError="The specified user number of "//TRIM(NumberToVstring(userNumbers(nodeIdx),"*",err,error))// & + & " for global node number "//TRIM(NumberToVstring(nodeIdx,"*",err,error))// & + & " is a duplicate. The user node numbers must be unique." + CALL FlagError(localError,err,error,*999) + ENDIF + ENDDO !nodeIdx + CALL Tree_Destroy(nodes%nodesTree,err,error,*999) + nodes%nodesTree=>newNodesTree + NULLIFY(newNodesTree) + DO nodeIdx=1,nodes%numberOfNodes + nodes%nodes(nodeIdx)%userNumber=userNumbers(nodeIdx) + ENDDO !nodesIdx + + EXITS("Nodes_UserNumbersAllSet") RETURN -999 IF(ASSOCIATED(newNodesTree)) CALL TREE_DESTROY(newNodesTree,err,error,*998) -998 ERRORSEXITS("NodesUserNumbersAllSet",err,error) +999 IF(ASSOCIATED(newNodesTree)) CALL Tree_Destroy(newNodesTree,err,error,*998) +998 ERRORSEXITS("Nodes_UserNumbersAllSet",err,error) RETURN 1 - END SUBROUTINE NodesUserNumbersAllSet + END SUBROUTINE Nodes_UserNumbersAllSet ! !================================================================================================================================ ! -END MODULE NODE_ROUTINES +END MODULE NodeRoutines diff --git a/src/opencmiss_iron.f90 b/src/opencmiss_iron.f90 index b5fb6cf4..b86c80c9 100644 --- a/src/opencmiss_iron.f90 +++ b/src/opencmiss_iron.f90 @@ -106,7 +106,7 @@ MODULE OpenCMISS_Iron USE Kinds USE MESH_ROUTINES USE MeshAccessRoutines - USE NODE_ROUTINES + USE NodeRoutines USE PROBLEM_CONSTANTS USE PROBLEM_ROUTINES USE ProblemAccessRoutines @@ -288,7 +288,7 @@ MODULE OpenCMISS_Iron !>Contains information on the nodes defined on a region. TYPE cmfe_NodesType PRIVATE - TYPE(NODES_TYPE), POINTER :: nodes + TYPE(NodesType), POINTER :: nodes END TYPE cmfe_NodesType !>Contains information for a problem. @@ -5685,7 +5685,7 @@ MODULE OpenCMISS_Iron !!================================================================================================================================== !! -!! NODE_ROUTINES +!! NodeRoutines !! !!================================================================================================================================== @@ -46140,7 +46140,7 @@ END SUBROUTINE cmfe_DistributedVector_DataRestoreLObj !!================================================================================================================================== !! -!! NODE_ROUTINES +!! NodeRoutines !! !!================================================================================================================================== @@ -46152,7 +46152,7 @@ SUBROUTINE cmfe_Nodes_CreateFinishNumber(regionUserNumber,err) INTEGER(INTG), INTENT(IN) :: regionUserNumber !Contains information about a node. - TYPE NODE_TYPE - INTEGER(INTG) :: GLOBAL_NUMBER !Contains information on the nodes defined on a region. \see OPENCMISS::Iron::cmfe_NodesType - TYPE NODES_TYPE - TYPE(REGION_TYPE), POINTER :: REGION !Contains information about the regions From aaabd63be158cdc6e263ae17abe79a637f5087eb Mon Sep 17 00:00:00 2001 From: Chris Bradley Date: Tue, 24 Apr 2018 20:09:52 +1200 Subject: [PATCH 09/13] Most changes made. Start of debugging. --- bindings/c/tests/complex_mesh.c | 18 +- bindings/c/tests/laplace.c | 23 +- bindings/generate_bindings/python.py | 7 +- cmake/Sources.cmake | 1 + src/analytic_analysis_routines.f90 | 1 + src/basis_routines.f90 | 4 +- src/boundary_condition_access_routines.f90 | 34 + src/boundary_condition_routines.f90 | 7 +- src/cmiss.f90 | 2 + src/cmiss_cellml.f90 | 3 +- src/constants.f90 | 9 +- src/coordinate_access_routines.f90 | 34 +- src/coordinate_routines.f90 | 20 +- src/distributed_matrix_vector.f90 | 2 +- src/equations_set_routines.f90 | 1 + src/field_IO_routines.f90 | 8 +- src/field_routines.f90 | 6 +- src/fieldml_input_routines.f90 | 16 +- src/generated_mesh_routines.f90 | 1 + src/macros.h | 15 + src/mesh_access_routines.f90 | 32 + src/mesh_routines.f90 | 1 + src/opencmiss_iron.f90 | 26099 ++++++++++------ src/problem_access_routines.f90 | 111 +- src/problem_routines.f90 | 8 +- src/reaction_diffusion_IO_routines.f90 | 6 +- src/reaction_diffusion_equation_routines.f90 | 2 +- src/region_access_routines.f90 | 161 +- src/region_routines.f90 | 1 + src/solver_access_routines.f90 | 38 + src/solver_mapping_routines.f90 | 1 + src/types.f90 | 10 +- src/util_array.f90 | 4 +- tests/CellML/CellMLModelIntegration.f90 | 21 +- tests/CellML/Monodomain.f90 | 21 +- tests/ClassicalField/Analytic1DDiffusion.f90 | 223 +- tests/ClassicalField/AnalyticHelmholtz.f90 | 40 +- tests/ClassicalField/AnalyticLaplace.f90 | 64 +- .../AnalyticNonlinearPoisson.f90 | 43 +- tests/ClassicalField/Laplace.f90 | 48 +- .../StaticAdvectionDiffusion_FieldML.f90 | 20 +- tests/FieldML_IO/cube.f90 | 23 +- tests/FieldML_IO/fieldml_arguments.f90 | 21 +- tests/FieldML_IO/fieldml_io.f90 | 13 +- tests/FiniteElasticity/Cantilever.f90 | 46 +- tests/FiniteElasticity/SimpleShear.f90 | 23 +- tests/FluidMechanics/Darcy.f90 | 26 +- tests/LinearElasticity/CantileverBeam.f90 | 34 +- tests/LinearElasticity/Extension.f90 | 33 +- 49 files changed, 16963 insertions(+), 10422 deletions(-) diff --git a/bindings/c/tests/complex_mesh.c b/bindings/c/tests/complex_mesh.c index 4a5c98a3..d7067279 100755 --- a/bindings/c/tests/complex_mesh.c +++ b/bindings/c/tests/complex_mesh.c @@ -68,20 +68,22 @@ int main() { - /* int WorldCoordinateSystemUserNumber; + /* int ContextUserNumber; int WorldRegionUserNumber; */ - cmfe_CoordinateSystemType WorldCoordinateSystem=(cmfe_CoordinateSystemType)NULL; + cmfe_ContextType Context=(cmfe_ContextType)NULL; cmfe_RegionType WorldRegion=(cmfe_RegionType)NULL,Region=(cmfe_RegionType)NULL; char Label[STRING_SIZE]; int Err; - Err = cmfe_CoordinateSystem_Initialise(&WorldCoordinateSystem); - CHECK_ERROR("Initialising world coordinate system"); - Err = cmfe_Region_Initialise(&WorldRegion); - CHECK_ERROR("Initialising world region"); - if(cmfe_Initialise(WorldCoordinateSystem,WorldRegion) == CMFE_NO_ERROR) + Err = cmfe_Context_Initialise(&Context); + CHECK_ERROR("Initialising context"); + if(cmfe_Initialise(Context) == CMFE_NO_ERROR) { + Err = cmfe_Region_Initialise(&WorldRegion); + CHECK_ERROR("Initialising world region"); + Err = cmfe_Context_WorldRegionGet(Context,WorldRegion); + CHECK_ERROR("Get world region"); Err = cmfe_Region_LabelGet(WorldRegion,STRING_SIZE,Label); printf("The world region label is '%s'.\n",Label); @@ -95,7 +97,7 @@ int main() Err = cmfe_Region_Finalise(&Region); - Err = cmfe_Finalise(); + Err = cmfe_Finalise(Context); } return Err; diff --git a/bindings/c/tests/laplace.c b/bindings/c/tests/laplace.c index 30d4afc6..198df8be 100755 --- a/bindings/c/tests/laplace.c +++ b/bindings/c/tests/laplace.c @@ -91,12 +91,12 @@ int main() cmfe_BasisType Basis = (cmfe_BasisType)NULL; cmfe_BoundaryConditionsType BoundaryConditions=(cmfe_BoundaryConditionsType)NULL; cmfe_ComputationEnvironmentType ComputationEnvironment = (cmfe_ComputationEnvironmentType)NULL; - cmfe_CoordinateSystemType CoordinateSystem=(cmfe_CoordinateSystemType)NULL,WorldCoordinateSystem=(cmfe_CoordinateSystemType)NULL; + cmfe_ContextType Context = (cmfe_ContextType)NULL; + cmfe_CoordinateSystemType CoordinateSystem=(cmfe_CoordinateSystemType)NULL; cmfe_DecompositionType Decomposition=(cmfe_DecompositionType)NULL; cmfe_EquationsType Equations=(cmfe_EquationsType)NULL; cmfe_EquationsSetType EquationsSet=(cmfe_EquationsSetType)NULL; cmfe_FieldType GeometricField=(cmfe_FieldType)NULL,DependentField=(cmfe_FieldType)NULL,EquationsSetField=(cmfe_FieldType)NULL; - cmfe_FieldsType Fields=(cmfe_FieldsType)NULL; cmfe_GeneratedMeshType GeneratedMesh=(cmfe_GeneratedMeshType)NULL; cmfe_MeshType Mesh=(cmfe_MeshType)NULL; cmfe_ProblemType Problem=(cmfe_ProblemType)NULL; @@ -120,21 +120,24 @@ int main() ControlLoopIdentifier[0]=CMFE_CONTROL_LOOP_NODE; - Err = cmfe_CoordinateSystem_Initialise(&WorldCoordinateSystem); - CHECK_ERROR("Initialising world coordinate system"); + Err = cmfe_Context_Initialise(&Context); + CHECK_ERROR("Initialising context"); + Err = cmfe_Initialise(Context); + CHECK_ERROR("Initialising OpenCMISS-Iron"); Err = cmfe_Region_Initialise(&WorldRegion); CHECK_ERROR("Initialising world region"); - Err = cmfe_Initialise(WorldCoordinateSystem,WorldRegion); - CHECK_ERROR("Initialising OpenCMISS-Iron"); + Err = cmfe_Context_WorldRegionGet(Context,WorldRegion); + CHECK_ERROR("Get world region"); Err = cmfe_ErrorHandlingModeSet(CMFE_ERRORS_TRAP_ERROR); Err = cmfe_ComputationEnvironment_Initialise(&ComputationEnvironment); + Err = cmfe_Context_ComputationEnvironmentGet(Context,ComputationEnvironment); Err = cmfe_ComputationEnvironment_NumberOfWorldNodesGet(ComputationEnvironment,&NumberOfComputationNodes); Err = cmfe_ComputationEnvironment_WorldNodeNumberGet(ComputationEnvironment,&ComputationNodeNumber); /* Start the creation of a new RC coordinate system */ Err = cmfe_CoordinateSystem_Initialise(&CoordinateSystem); - Err = cmfe_CoordinateSystem_CreateStart(COORDINATE_SYSTEM_USER_NUMBER,CoordinateSystem); + Err = cmfe_CoordinateSystem_CreateStart(COORDINATE_SYSTEM_USER_NUMBER,Context,CoordinateSystem); if(NUMBER_GLOBAL_Z_ELEMENTS==0) { /* Set the coordinate system to be 2D */ @@ -158,7 +161,7 @@ int main() /* Start the creation of a basis (default is trilinear lagrange) */ Err = cmfe_Basis_Initialise(&Basis); - Err = cmfe_Basis_CreateStart(BASIS_USER_NUMBER,Basis); + Err = cmfe_Basis_CreateStart(BASIS_USER_NUMBER,Context,Basis); if(NUMBER_GLOBAL_Z_ELEMENTS==0) { /* Set the basis to be a bilinear Lagrange basis */ @@ -261,7 +264,7 @@ int main() ProblemSpecification[0] = CMFE_PROBLEM_CLASSICAL_FIELD_CLASS; ProblemSpecification[1] = CMFE_PROBLEM_LAPLACE_EQUATION_TYPE; ProblemSpecification[2] = CMFE_PROBLEM_STANDARD_LAPLACE_SUBTYPE; - Err = cmfe_Problem_CreateStart(PROBLEM_USER_NUMBER,3,ProblemSpecification,Problem); + Err = cmfe_Problem_CreateStart(PROBLEM_USER_NUMBER,Context,3,ProblemSpecification,Problem); /* Finish the creation of a problem. */ Err = cmfe_Problem_CreateFinish(Problem); @@ -331,7 +334,7 @@ int main() /* Solve the problem */ Err = cmfe_Problem_Solve(Problem); - Err = cmfe_Finalise(); + Err = cmfe_Finalise(Context); return Err; } diff --git a/bindings/generate_bindings/python.py b/bindings/generate_bindings/python.py index 488d0ec4..a6d1e45a 100755 --- a/bindings/generate_bindings/python.py +++ b/bindings/generate_bindings/python.py @@ -27,10 +27,9 @@ #ErrorHandlingModeSet(ErrorHandlingModes.RETURN_ERROR_CODE) #""" -INITIALISE = """WorldCoordinateSystem = CoordinateSystem() -WorldRegion = Region() -Initialise(WorldCoordinateSystem, WorldRegion) -# Don't output errors, we'll include trace in exception +INITIALISE = """Context = Context() +Initialise(Context) +# Output errors ErrorHandlingModeSet(ErrorHandlingModes.OUTPUT_ERROR) """ diff --git a/cmake/Sources.cmake b/cmake/Sources.cmake index 82d9c837..e42aa45a 100644 --- a/cmake/Sources.cmake +++ b/cmake/Sources.cmake @@ -25,6 +25,7 @@ set(IRON_Fortran_SRC bioelectric_routines.f90 blas.f90 boundary_condition_routines.f90 + boundary_condition_access_routines.f90 Burgers_equation_routines.f90 cellml_access_routines.f90 characteristic_equation_routines.f90 diff --git a/src/analytic_analysis_routines.f90 b/src/analytic_analysis_routines.f90 index 971e34f1..acf0d1bc 100755 --- a/src/analytic_analysis_routines.f90 +++ b/src/analytic_analysis_routines.f90 @@ -56,6 +56,7 @@ MODULE ANALYTIC_ANALYSIS_ROUTINES USE ISO_VARYING_STRING USE Kinds USE MatrixVector + USE MeshAccessRoutines #ifndef NOMPIMOD USE MPI #endif diff --git a/src/basis_routines.f90 b/src/basis_routines.f90 index 8aa54419..b7d3d9cc 100755 --- a/src/basis_routines.f90 +++ b/src/basis_routines.f90 @@ -709,11 +709,11 @@ END SUBROUTINE Basis_CreateFinish !> - TYPE: 1 (BASIS_LAGRANGE_HERMITE_TP_TYPE) !> - NUMBER_OF_GAUSS_XI: (2,2,2) !> - GAUSS_ORDER: 0 - SUBROUTINE Basis_CreateStart(basisFunctions,userNumber,basis,err,error,*) + SUBROUTINE Basis_CreateStart(userNumber,basisFunctions,basis,err,error,*) !Argument variables - TYPE(BasisFunctionsType), POINTER :: basisFunctions !Gets the solver equations for boundary conditions. + SUBROUTINE BoundaryConditions_SolverEquationsGet(boundaryConditions,solverEquations,err,error,*) + + !Argument variables + TYPE(BOUNDARY_CONDITIONS_TYPE), POINTER :: boundaryConditions !boundaryConditions%SOLVER_EQUATIONS + IF(.NOT.ASSOCIATED(solverEquations)) & + & CALL FlagError("Solver equations is not associated for the boundary conditions.",err,error,*999) + + EXITS("BoundaryConditions_SolverEquationsGet") + RETURN +999 NULLIFY(solverEquations) +998 ERRORSEXITS("BoundaryConditions_SolverEquationsGet",err,error) + RETURN 1 + + END SUBROUTINE BoundaryConditions_SolverEquationsGet + + ! + !================================================================================================================================ + ! + END MODULE BoundaryConditionAccessRoutines diff --git a/src/boundary_condition_routines.f90 b/src/boundary_condition_routines.f90 index 82043d4e..276daed1 100755 --- a/src/boundary_condition_routines.f90 +++ b/src/boundary_condition_routines.f90 @@ -47,6 +47,7 @@ MODULE BOUNDARY_CONDITIONS_ROUTINES USE BaseRoutines USE BasisRoutines USE BasisAccessRoutines + USE BoundaryConditionAccessRoutines USE CmissMPI USE ComputationRoutines USE ComputationAccessRoutines @@ -63,10 +64,12 @@ MODULE BOUNDARY_CONDITIONS_ROUTINES USE INPUT_OUTPUT USE ISO_VARYING_STRING USE Kinds + USE MeshAccessRoutines #ifndef NOMPIMOD USE MPI #endif USE NODE_ROUTINES + USE SolverAccessRoutines USE Strings USE Timer USE Types @@ -320,8 +323,8 @@ SUBROUTINE BOUNDARY_CONDITIONS_CREATE_FINISH(BOUNDARY_CONDITIONS,ERR,ERROR,*) IF(ALLOCATED(BOUNDARY_CONDITIONS%BOUNDARY_CONDITIONS_VARIABLES)) THEN CALL Solver_WorkGroupGet(solver,workGroup,err,error,*999) CALL WorkGroup_GroupCommunicatorGet(workGroup,groupCommunicator,err,error,*999) - CALL WorkGroup_NumberOfWorldNodesGet(workGroup,numberOfGroupComputationNodes,err,error,*999) - CALL WorkGroup_WorldNodeNumberGet(workGroup,myGroupComputationNodeNumber,err,error,*999) + CALL WorkGroup_NumberOfGroupNodesGet(workGroup,numberOfGroupComputationNodes,err,error,*999) + CALL WorkGroup_GroupNodeNumberGet(workGroup,myGroupComputationNodeNumber,err,error,*999) IF(numberOfGroupComputationNodes>0) THEN !Transfer all the boundary conditions to all the computation nodes. !\todo Look at this. diff --git a/src/cmiss.f90 b/src/cmiss.f90 index 9169eeea..eb8c0818 100755 --- a/src/cmiss.f90 +++ b/src/cmiss.f90 @@ -120,6 +120,8 @@ END SUBROUTINE cmfe_SetFatalHandler PUBLIC CMFE_RETURN_ERROR_CODE,CMFE_OUTPUT_ERROR,CMFE_TRAP_ERROR + PUBLIC contexts + PUBLIC cmfe_ErrorHandlingModeGet_,cmfe_ErrorHandlingModeSet_ PUBLIC cmfe_HandleError diff --git a/src/cmiss_cellml.f90 b/src/cmiss_cellml.f90 index 7b8206fb..24798789 100755 --- a/src/cmiss_cellml.f90 +++ b/src/cmiss_cellml.f90 @@ -68,7 +68,8 @@ MODULE CMISS_CELLML USE FieldAccessRoutines USE ISO_VARYING_STRING USE INPUT_OUTPUT - USE KINDS + USE Kinds + USE MeshAccessRoutines #ifndef NOMPIMOD USE MPI #endif diff --git a/src/constants.f90 b/src/constants.f90 index e845e321..7c01b037 100755 --- a/src/constants.f90 +++ b/src/constants.f90 @@ -195,12 +195,9 @@ MODULE Constants INTEGER(INTG), PARAMETER :: PART_DERIV_S1_S2_S4=17 !@} diff --git a/src/coordinate_access_routines.f90 b/src/coordinate_access_routines.f90 index 2f565a7a..3e17f5d2 100644 --- a/src/coordinate_access_routines.f90 +++ b/src/coordinate_access_routines.f90 @@ -84,7 +84,8 @@ MODULE CoordinateSystemAccessRoutines PUBLIC COORDINATE_SYSTEM_USER_NUMBER_FIND - + PUBLIC CoordinateSystems_WorldCoordinateSystemGet + CONTAINS ! @@ -232,5 +233,36 @@ END SUBROUTINE CoordinateSystem_UserNumberFind ! !================================================================================================================================ ! + + !>Returns a pointer to the world coordinate system for a coordinate systems. + SUBROUTINE CoordinateSystems_WorldCoordinateSystemGet(coordinateSystems,worldCoordinateSystem,err,error,*) + + !Argument variables + TYPE(CoordinateSystemsType), POINTER :: coordinateSystems !1.",err,error,*999) + CALL FlagWarning("Put A8=0 since ABS(A8)>1.",err,error,*999) ENDIF IF((ABS(Z(3))=1.0_DP) THEN A9=PI/2.0_DP @@ -380,7 +380,7 @@ FUNCTION COORDINATE_CONVERT_FROM_RC_SP(COORDINATE_SYSTEM,Z,err,error) A8=ASIN(A7) ELSE A8=0.0_SP - CALL FLAG_WARNING("Put A8=0 since ABS(A8)>1.",err,error,*999) + CALL FlagWarning("Put A8=0 since ABS(A8)>1.",err,error,*999) ENDIF IF((ABS(Z(3))=1.0_SP) THEN A9=REAL(PI,SP)/2.0_SP @@ -764,7 +764,7 @@ SUBROUTINE COORDINATE_METRICS_CALCULATE(COORDINATE_SYSTEM,JACOBIAN_TYPE,METRICS, ENDDO !mi CASE(COORDINATE_PROLATE_SPHEROIDAL_TYPE) IF(ABS(INTERPOLATED_POINT%VALUES(2,1))- Focus: 1.0 !>- Origin: (0.0,0.0,0.0) !>- Oritention: ((1.0,0.0,0.0),(0.0,1.0,0.0),(0.0,0.0,1.0)) - SUBROUTINE COORDINATE_SYSTEM_CREATE_START(coordinateSystems,USER_NUMBER,COORDINATE_SYSTEM,err,error,*) + SUBROUTINE COORDINATE_SYSTEM_CREATE_START(USER_NUMBER,coordinateSystems,COORDINATE_SYSTEM,err,error,*) !Argument variables - TYPE(CoordinateSystemsType), POINTER :: coordinateSystems !Creates an OpenCMISS basis object using relevant parameters from FieldML. Does not call CreateFinish. - SUBROUTINE FIELDML_INPUT_BASIS_CREATE_START( FIELDML_INFO, EVALUATOR_NAME, basisFunctions, USER_NUMBER, BASIS, ERR, ERROR, * ) + SUBROUTINE FIELDML_INPUT_BASIS_CREATE_START( FIELDML_INFO, EVALUATOR_NAME, USER_NUMBER, basisFunctions, BASIS, ERR, ERROR, * ) !Arguments TYPE(FIELDML_IO_TYPE), POINTER :: FIELDML_INFO !Returns a pointer to the work group for a decomposition. + SUBROUTINE Decomposition_WorkGroupGet(decomposition,workGroup,err,error,*) + + !Argument variables + TYPE(DECOMPOSITION_TYPE), POINTER :: decomposition !decomposition%workGroup + IF(.NOT.ASSOCIATED(workGroup)) CALL FlagError("The decomposition work group is not associated.",err,error,*999) + + EXITS("Decomposition_WorkGroupGet") + RETURN +999 NULLIFY(workGroup) +998 ERRORSEXITS("Decomposition_WorkGroupGet",err,error) + RETURN 1 + + END SUBROUTINE Decomposition_WorkGroupGet + ! !================================================================================================================================ ! diff --git a/src/mesh_routines.f90 b/src/mesh_routines.f90 index 614bc092..1dc0f649 100644 --- a/src/mesh_routines.f90 +++ b/src/mesh_routines.f90 @@ -52,6 +52,7 @@ MODULE MESH_ROUTINES USE ComputationRoutines USE ComputationAccessRoutines USE Constants + USE ContextAccessRoutines USE COORDINATE_ROUTINES USE DataProjectionAccessRoutines USE DOMAIN_MAPPINGS diff --git a/src/opencmiss_iron.f90 b/src/opencmiss_iron.f90 index acfe067c..f28dc1d5 100644 --- a/src/opencmiss_iron.f90 +++ b/src/opencmiss_iron.f90 @@ -55,7791 +55,7926 @@ MODULE OpenCMISS_Iron - USE ANALYTIC_ANALYSIS_ROUTINES - USE BaseRoutines - USE BasisRoutines - USE BasisAccessRoutines - USE BIOELECTRIC_FINITE_ELASTICITY_ROUTINES - USE BOUNDARY_CONDITIONS_ROUTINES - USE Cmiss - USE CmissPetsc - USE CMISS_CELLML - USE ComputationRoutines - USE ComputationAccessRoutines - USE Constants - USE CONTROL_LOOP_ROUTINES - USE ControlLoopAccessRoutines - USE COORDINATE_ROUTINES - USE CoordinateSystemAccessRoutines - USE DataPointRoutines - USE DataPointAccessRoutines - USE DataProjectionRoutines - USE DataProjectionAccessRoutines - USE DistributedMatrixVector - USE EquationsRoutines - USE EquationsSetConstants - USE EQUATIONS_SET_ROUTINES - USE EquationsSetAccessRoutines - USE FIELD_ROUTINES - USE FieldAccessRoutines + USE ANALYTIC_ANALYSIS_ROUTINES + USE BaseRoutines + USE BasisRoutines + USE BasisAccessRoutines + USE BIOELECTRIC_FINITE_ELASTICITY_ROUTINES + USE BOUNDARY_CONDITIONS_ROUTINES + USE Cmiss + USE CmissPetsc + USE CMISS_CELLML + USE ComputationRoutines + USE ComputationAccessRoutines + USE Constants + USE ContextRoutines + USE ContextAccessRoutines + USE CONTROL_LOOP_ROUTINES + USE ControlLoopAccessRoutines + USE COORDINATE_ROUTINES + USE CoordinateSystemAccessRoutines + USE DataPointRoutines + USE DataPointAccessRoutines + USE DataProjectionRoutines + USE DataProjectionAccessRoutines + USE DistributedMatrixVector + USE EquationsRoutines + USE EquationsSetConstants + USE EQUATIONS_SET_ROUTINES + USE EquationsSetAccessRoutines + USE FIELD_ROUTINES + USE FieldAccessRoutines #ifdef WITH_FIELDML - USE FIELDML_TYPES - USE FIELDML_INPUT_ROUTINES - USE FIELDML_OUTPUT_ROUTINES - USE FIELDML_UTIL_ROUTINES + USE FIELDML_TYPES + USE FIELDML_INPUT_ROUTINES + USE FIELDML_OUTPUT_ROUTINES + USE FIELDML_UTIL_ROUTINES #endif - USE FIELD_IO_ROUTINES - USE FINITE_ELASTICITY_ROUTINES - USE GENERATED_MESH_ROUTINES - USE HAMILTON_JACOBI_EQUATIONS_ROUTINES - USE HISTORY_ROUTINES - USE INPUT_OUTPUT - USE INTERFACE_ROUTINES - USE InterfaceAccessRoutines - USE INTERFACE_CONDITIONS_CONSTANTS - USE INTERFACE_CONDITIONS_ROUTINES - USE InterfaceConditionAccessRoutines - USE INTERFACE_EQUATIONS_ROUTINES - USE INTERFACE_MATRICES_CONSTANTS - USE INTERFACE_MATRICES_ROUTINES - USE ISO_C_BINDING - USE ISO_VARYING_STRING - USE Kinds - USE MESH_ROUTINES - USE MeshAccessRoutines - USE NODE_ROUTINES - USE PROBLEM_CONSTANTS - USE PROBLEM_ROUTINES - USE ProblemAccessRoutines - USE REGION_ROUTINES - USE RegionAccessRoutines - USE SOLVER_ROUTINES - USE SolverAccessRoutines - USE Strings - USE Types + USE FIELD_IO_ROUTINES + USE FINITE_ELASTICITY_ROUTINES + USE GENERATED_MESH_ROUTINES + USE HAMILTON_JACOBI_EQUATIONS_ROUTINES + USE HISTORY_ROUTINES + USE INPUT_OUTPUT + USE INTERFACE_ROUTINES + USE InterfaceAccessRoutines + USE INTERFACE_CONDITIONS_CONSTANTS + USE INTERFACE_CONDITIONS_ROUTINES + USE InterfaceConditionAccessRoutines + USE INTERFACE_EQUATIONS_ROUTINES + USE INTERFACE_MATRICES_CONSTANTS + USE INTERFACE_MATRICES_ROUTINES + USE ISO_C_BINDING + USE ISO_VARYING_STRING + USE Kinds + USE MESH_ROUTINES + USE MeshAccessRoutines + USE NODE_ROUTINES + USE PROBLEM_CONSTANTS + USE PROBLEM_ROUTINES + USE ProblemAccessRoutines + USE REGION_ROUTINES + USE RegionAccessRoutines + USE SOLVER_ROUTINES + USE SolverAccessRoutines + USE Strings + USE Types #include "macros.h" #include "dllexport.h" - IMPLICIT NONE - - PRIVATE - - !Module parameters - - !Module types - - !>Contains information about a basis function. - TYPE cmfe_BasisType - PRIVATE - TYPE(BASIS_TYPE), POINTER :: basis - END TYPE cmfe_BasisType - - !>Contains information on the boundary conditions for the equations set. - TYPE cmfe_BoundaryConditionsType - PRIVATE - TYPE(BOUNDARY_CONDITIONS_TYPE), POINTER :: boundaryConditions - END TYPE cmfe_BoundaryConditionsType - - !>Contains information on a CellML environment. - TYPE cmfe_CellMLType - PRIVATE - TYPE(CELLML_TYPE), POINTER :: cellml - END TYPE cmfe_CellMLType - - !>Contains information about the CellML equations for a solver. - TYPE cmfe_CellMLEquationsType - PRIVATE - TYPE(CELLML_EQUATIONS_TYPE), POINTER :: cellmlEquations - END TYPE cmfe_CellMLEquationsType - - !>Contains information on a computation environment - TYPE cmfe_ComputationEnvironmentType - PRIVATE - TYPE(ComputationEnvironmentType), POINTER :: computationEnvironment_ - END TYPE cmfe_ComputationEnvironmentType - - !>Contains information on a context. - TYPE cmfe_ContextType - PRIVATE - TYPE(ContextType), POINTER :: context - END TYPE cmfe_ContextType - - !>Contains information on a control loop. - TYPE cmfe_ControlLoopType - PRIVATE - TYPE(CONTROL_LOOP_TYPE), POINTER :: controlLoop - END TYPE cmfe_ControlLoopType - - !>Contains information on a coordinate system. - TYPE cmfe_CoordinateSystemType - PRIVATE - TYPE(COORDINATE_SYSTEM_TYPE), POINTER :: coordinateSystem - END TYPE cmfe_CoordinateSystemType - - !>Contains information on the data points defined on a region. - TYPE cmfe_DataPointsType - PRIVATE - TYPE(DataPointsType), POINTER :: dataPoints - END TYPE cmfe_DataPointsType - - !>Contains information about a data projection. - TYPE cmfe_DataProjectionType - PRIVATE - TYPE(DataProjectionType), POINTER :: dataProjection - END TYPE cmfe_DataProjectionType - - !>Contains information on the mesh decomposition. - TYPE cmfe_DecompositionType - PRIVATE - TYPE(DECOMPOSITION_TYPE), POINTER :: decomposition - END TYPE cmfe_DecompositionType - - !>Contains information about the equations in an equations set. - TYPE cmfe_EquationsType - PRIVATE - TYPE(EquationsType), POINTER :: equations - END TYPE cmfe_EquationsType - - !>Contains information on an equations set defined on a region. - TYPE cmfe_EquationsSetType - PRIVATE - TYPE(EQUATIONS_SET_TYPE), POINTER :: equationsSet - END TYPE cmfe_EquationsSetType - - !>Contains information for a field defined on a region. - TYPE cmfe_FieldType - PRIVATE - TYPE(FIELD_TYPE), POINTER :: field - END TYPE cmfe_FieldType - - !>Contains information for a fields defined on a region. - TYPE cmfe_FieldsType - !PRIVATE - TYPE(FIELDS_TYPE), POINTER :: fields - END TYPE cmfe_FieldsType - - !>Contains information on a generated mesh. - TYPE cmfe_GeneratedMeshType - PRIVATE - TYPE(GENERATED_MESH_TYPE), POINTER :: generatedMesh - END TYPE cmfe_GeneratedMeshType - - !>Contains information about a history file for a control loop. - TYPE cmfe_HistoryType - PRIVATE - TYPE(HISTORY_TYPE), POINTER :: history - END TYPE cmfe_HistoryType - - !>Contains information about an interface. - TYPE cmfe_InterfaceType - PRIVATE - TYPE(INTERFACE_TYPE), POINTER :: interface - END TYPE cmfe_InterfaceType - - !>Contains information about an interface condition. - TYPE cmfe_InterfaceConditionType - PRIVATE - TYPE(INTERFACE_CONDITION_TYPE), POINTER :: interfaceCondition - END TYPE cmfe_InterfaceConditionType - - !>Contains information about an interface condition. - TYPE cmfe_InterfaceEquationsType - PRIVATE - TYPE(INTERFACE_EQUATIONS_TYPE), POINTER :: interfaceEquations - END TYPE cmfe_InterfaceEquationsType - - !>Contains information on an interfaces meshes connectivity. - TYPE cmfe_InterfaceMeshConnectivityType - PRIVATE - TYPE(INTERFACE_MESH_CONNECTIVITY_TYPE), POINTER :: meshConnectivity - END TYPE cmfe_InterfaceMeshConnectivityType - - !>Contains information on an interfaces points connectivity. - TYPE cmfe_InterfacePointsConnectivityType - PRIVATE - TYPE(InterfacePointsConnectivityType), POINTER :: pointsConnectivity - END TYPE cmfe_InterfacePointsConnectivityType - - !>A matrix that may be distributed across multiple computation nodes - !>and may use sparse or full storage. - TYPE cmfe_DistributedMatrixType - PRIVATE - TYPE(DistributedMatrixType), POINTER :: distributedMatrix - END TYPE cmfe_DistributedMatrixType - - !>A vector that may be distributed across multiple computation nodes - TYPE cmfe_DistributedVectorType - PRIVATE - TYPE(DistributedVectorType), POINTER :: distributedVector - END TYPE cmfe_DistributedVectorType - - !>Contains information on a mesh defined on a region. - TYPE cmfe_MeshType - PRIVATE - TYPE(MESH_TYPE), POINTER :: mesh - END TYPE cmfe_MeshType - - !>Contains information on a mesh elements defined in a mesh - TYPE cmfe_MeshElementsType - PRIVATE - TYPE(MeshElementsType), POINTER :: meshElements - END TYPE cmfe_MeshElementsType - - !>Contains information on an embedded mesh - TYPE cmfe_MeshEmbeddingType - PRIVATE - TYPE(MESH_EMBEDDING_TYPE), POINTER :: meshEmbedding - END TYPE cmfe_MeshEmbeddingType - - !>Contains information on a mesh nodes defined in a mesh - TYPE cmfe_MeshNodesType - PRIVATE - TYPE(MeshNodesType), POINTER :: meshNodes - END TYPE cmfe_MeshNodesType - - !>Contains information on the nodes defined on a region. - TYPE cmfe_NodesType - PRIVATE - TYPE(NODES_TYPE), POINTER :: nodes - END TYPE cmfe_NodesType - - !>Contains information for a problem. - TYPE cmfe_ProblemType - PRIVATE - TYPE(PROBLEM_TYPE), POINTER :: problem - END TYPE cmfe_ProblemType - - !>Contains information for a particular quadrature scheme for a basis. - TYPE cmfe_QuadratureType - PRIVATE - TYPE(QUADRATURE_TYPE), POINTER :: quadrature - END TYPE cmfe_QuadratureType - - !>Contains information for a region. - TYPE cmfe_RegionType - PRIVATE - TYPE(REGION_TYPE), POINTER :: region - END TYPE cmfe_RegionType - - !>Contains information about a solver. - TYPE cmfe_SolverType - PRIVATE - TYPE(SOLVER_TYPE), POINTER :: solver - END TYPE cmfe_SolverType - - !>Contains information about the solver equations for a solver. - TYPE cmfe_SolverEquationsType - PRIVATE - TYPE(SOLVER_EQUATIONS_TYPE), POINTER :: solverEquations - END TYPE cmfe_SolverEquationsType - - !>Contains information on a work group - TYPE cmfe_WorkGroupType - PRIVATE - TYPE(WorkGroupType), POINTER :: workGroup - END TYPE cmfe_WorkGroupType - - !Module variables - - TYPE(VARYING_STRING) :: error - - INTERFACE cmfe_Initialise - MODULE PROCEDURE cmfe_InitialiseNumber - MODULE PROCEDURE cmfe_InitialiseObj - END INTERFACE cmfe_Initialise - - INTERFACE cmfe_Fields_Create - MODULE PROCEDURE cmfe_Fields_CreateInterface - MODULE PROCEDURE cmfe_Fields_CreateRegion - END INTERFACE cmfe_Fields_Create - - PUBLIC cmfe_Finalise,cmfe_Initialise - - PUBLIC cmfe_WorkingRealPrecisionGet - - PUBLIC cmfe_PetscOptionsSetValue - - PUBLIC cmfe_BasisType,cmfe_BasisTypesCopy,cmfe_Basis_Finalise,cmfe_Basis_Initialise - - PUBLIC cmfe_BoundaryConditionsType,cmfe_BoundaryConditions_Finalise,cmfe_BoundaryConditions_Initialise - - PUBLIC cmfe_CellMLType,cmfe_CellML_Finalise,cmfe_CellML_Initialise - - PUBLIC cmfe_CellMLEquationsType,cmfe_CellMLEquations_Finalise,cmfe_CellMLEquations_Initialise - - PUBLIC cmfe_ComputationEnvironmentType,cmfe_ComputationEnvironment_Initialise,cmfe_ComputationEnvironment_Finalise - - PUBLIC cmfe_ControlLoopType,cmfe_ControlLoop_Finalise,cmfe_ControlLoop_Initialise,cmfe_ControlLoop_LoadOutputSet - - PUBLIC cmfe_CoordinateSystemType,cmfe_CoordinateSystem_Finalise,cmfe_CoordinateSystem_Initialise - - PUBLIC cmfe_DataPointsType,cmfe_DataPoints_Finalise,cmfe_DataPoints_Initialise - - PUBLIC cmfe_DataProjectionType,cmfe_DataProjection_Finalise,cmfe_DataProjection_Initialise - - PUBLIC cmfe_DecompositionType,cmfe_Decomposition_Finalise,cmfe_Decomposition_Initialise - - PUBLIC cmfe_Decomposition_CalculateFacesSet,cmfe_Decomposition_CalculateLinesSet - - PUBLIC cmfe_DistributedMatrixType,cmfe_DistributedVectorType - - PUBLIC cmfe_DistributedMatrix_Initialise,cmfe_DistributedVector_Initialise - - PUBLIC cmfe_EquationsType,cmfe_Equations_Finalise,cmfe_Equations_Initialise - - PUBLIC cmfe_EquationsSetType,cmfe_EquationsSet_Finalise,cmfe_EquationsSet_Initialise - - PUBLIC cmfe_FieldType,cmfe_Field_Finalise,cmfe_Field_Initialise - - PUBLIC cmfe_FieldsType,cmfe_Fields_Create,cmfe_Fields_Finalise,cmfe_Fields_Initialise - - PUBLIC cmfe_GeneratedMeshType,cmfe_GeneratedMesh_Finalise,cmfe_GeneratedMesh_Initialise - - PUBLIC cmfe_HistoryType,cmfe_History_Finalise,cmfe_History_Initialise - - PUBLIC cmfe_InterfaceType,cmfe_Interface_Finalise,cmfe_Interface_Initialise - - PUBLIC cmfe_InterfaceConditionType,cmfe_InterfaceCondition_Finalise,cmfe_InterfaceCondition_Initialise - - PUBLIC cmfe_InterfaceEquationsType,cmfe_InterfaceEquations_Finalise,cmfe_InterfaceEquations_Initialise - - PUBLIC cmfe_InterfaceMeshConnectivityType,cmfe_InterfaceMeshConnectivity_Finalise, & - & cmfe_InterfaceMeshConnectivity_Initialise - - PUBLIC cmfe_InterfacePointsConnectivityType,cmfe_InterfacePointsConnectivity_Initialise, & - & cmfe_InterfacePointsConnectivity_Finalise - - PUBLIC cmfe_MeshType,cmfe_Mesh_Finalise,cmfe_Mesh_Initialise - - PUBLIC cmfe_MeshElementsType,cmfe_MeshElements_Finalise,cmfe_MeshElements_Initialise - - PUBLIC cmfe_MeshNodesType,cmfe_MeshNodes_Finalise,cmfe_MeshNodes_Initialise - - PUBLIC cmfe_NodesType,cmfe_Nodes_Finalise,cmfe_Nodes_Initialise - - PUBLIC cmfe_ProblemType,cmfe_Problem_Finalise,cmfe_Problem_Initialise - - PUBLIC cmfe_QuadratureType,cmfe_Quadrature_Finalise,cmfe_Quadrature_Initialise - - PUBLIC cmfe_RegionType,cmfe_Region_Finalise,cmfe_Region_Initialise - - PUBLIC cmfe_SolverType,cmfe_Solver_Finalise,cmfe_Solver_Initialise - - PUBLIC cmfe_SolverEquationsType,cmfe_SolverEquations_Finalise,cmfe_SolverEquations_Initialise - - PUBLIC cmfe_WorkGroupType,cmfe_WorkGroup_Initialise,cmfe_WorkGroup_Finalise - -!!================================================================================================================================== -!! -!! ANALYTIC_ANALYSIS_ROUTINES -!! -!!================================================================================================================================== - - !Module parameters - - !Module types - - !Module variables - - !Interfaces - - !>Output the analytic error analysis for a field compared to the analytic values parameter set. - INTERFACE cmfe_AnalyticAnalysis_Output - MODULE PROCEDURE cmfe_AnalyticAnalysis_OutputNumber - MODULE PROCEDURE cmfe_AnalyticAnalysis_OutputObj - END INTERFACE - - !>Get the absolute error of the node. - INTERFACE cmfe_AnalyticAnalysis_AbsoluteErrorGetNode - MODULE PROCEDURE cmfe_AnalyticAnalysis_AbsoluteErrorGetNodeNumber - MODULE PROCEDURE cmfe_AnalyticAnalysis_AbsoluteErrorGetNodeObj - END INTERFACE cmfe_AnalyticAnalysis_AbsoluteErrorGetNode - - !>Get the percentage error of the node. - INTERFACE cmfe_AnalyticAnalysis_PercentageErrorGetNode - MODULE PROCEDURE cmfe_AnalyticAnalysis_PercentageErrorGetNodeNumber - MODULE PROCEDURE cmfe_AnalyticAnalysis_PercentageErrorGetNodeObj - END INTERFACE cmfe_AnalyticAnalysis_PercentageErrorGetNode - - !>Get the relative error of the node. - INTERFACE cmfe_AnalyticAnalysis_RelativeErrorGetNode - MODULE PROCEDURE cmfe_AnalyticAnalysis_RelativeErrorGetNodeNumber - MODULE PROCEDURE cmfe_AnalyticAnalysis_RelativeErrorGetNodeObj - END INTERFACE cmfe_AnalyticAnalysis_RelativeErrorGetNode - - !>Get the absolute error of the element. - INTERFACE cmfe_AnalyticAnalysis_AbsoluteErrorGetElement - MODULE PROCEDURE cmfe_AnalyticAnalysis_AbsoluteErrorGetElementNumber - MODULE PROCEDURE cmfe_AnalyticAnalysis_AbsoluteErrorGetElementObj - END INTERFACE cmfe_AnalyticAnalysis_AbsoluteErrorGetElement - - !>Get the percentage error of the element. - INTERFACE cmfe_AnalyticAnalysis_PercentageErrorGetElement - MODULE PROCEDURE cmfe_AnalyticAnalysis_PercentageErrorGetElementNumber - MODULE PROCEDURE cmfe_AnalyticAnalysis_PercentageErrorGetElementObj - END INTERFACE cmfe_AnalyticAnalysis_PercentageErrorGetElement - - !>Get the relative error of the element. - INTERFACE cmfe_AnalyticAnalysis_RelativeErrorGetElement - MODULE PROCEDURE cmfe_AnalyticAnalysis_RelativeErrorGetElementNumber - MODULE PROCEDURE cmfe_AnalyticAnalysis_RelativeErrorGetElementObj - END INTERFACE cmfe_AnalyticAnalysis_RelativeErrorGetElement - - !>Get the absolute error of the constant. - INTERFACE cmfe_AnalyticAnalysis_AbsoluteErrorGetConstant - MODULE PROCEDURE cmfe_AnalyticAnalysis_AbsoluteErrorGetConstantNumber - MODULE PROCEDURE cmfe_AnalyticAnalysis_AbsoluteErrorGetConstantObj - END INTERFACE cmfe_AnalyticAnalysis_AbsoluteErrorGetConstant - - !>Get the percentage error of the constant. - INTERFACE cmfe_AnalyticAnalysis_PercentageErrorGetConstant - MODULE PROCEDURE cmfe_AnalyticAnalysis_PercentageErrorGetConstantNumber - MODULE PROCEDURE cmfe_AnalyticAnalysis_PercentageErrorGetConstantObj - END INTERFACE cmfe_AnalyticAnalysis_PercentageErrorGetConstant - - !>Get the relative error of the constant. - INTERFACE cmfe_AnalyticAnalysis_RelativeErrorGetConstant - MODULE PROCEDURE cmfe_AnalyticAnalysis_RelativeErrorGetConstantNumber - MODULE PROCEDURE cmfe_AnalyticAnalysis_RelativeErrorGetConstantObj - END INTERFACE cmfe_AnalyticAnalysis_RelativeErrorGetConstant - - !>Get the RMS error of nodes. - INTERFACE cmfe_AnalyticAnalysis_RMSErrorGetNode - MODULE PROCEDURE cmfe_AnalyticAnalysis_RMSErrorGetNodeNumber - MODULE PROCEDURE cmfe_AnalyticAnalysis_RMSErrorGetNodeObj - END INTERFACE cmfe_AnalyticAnalysis_RMSErrorGetNode - - !>Get the RMS error of elements. - INTERFACE cmfe_AnalyticAnalysis_RMSErrorGetElement - MODULE PROCEDURE cmfe_AnalyticAnalysis_RMSErrorGetElementNumber - MODULE PROCEDURE cmfe_AnalyticAnalysis_RMSErrorGetElementObj - END INTERFACE cmfe_AnalyticAnalysis_RMSErrorGetElement - - !>Get integral of numerical values. - INTERFACE cmfe_AnalyticAnalysis_IntegralNumericalValueGet - MODULE PROCEDURE cmfe_AnalyticAnalysis_IntegralNumericalValueGetNumber - MODULE PROCEDURE cmfe_AnalyticAnalysis_IntegralNumericalValueGetObj - END INTERFACE cmfe_AnalyticAnalysis_IntegralNumericalValueGet - - !>Get integral of analytical values. - INTERFACE cmfe_AnalyticAnalysis_IntegralAnalyticValueGet - MODULE PROCEDURE cmfe_AnalyticAnalysis_IntegralAnalyticValueGetNumber - MODULE PROCEDURE cmfe_AnalyticAnalysis_IntegralAnalyticValueGetObj - END INTERFACE cmfe_AnalyticAnalysis_IntegralAnalyticValueGet - - !>Get integral of percentage errors. - INTERFACE cmfe_AnalyticAnalysis_IntegralPercentageErrorGet - MODULE PROCEDURE cmfe_AnalyticAnalysis_IntegralPercentageErrorGetNumber - MODULE PROCEDURE cmfe_AnalyticAnalysis_IntegralPercentageErrorGetObj - END INTERFACE cmfe_AnalyticAnalysis_IntegralPercentageErrorGet - - !>Get integral of absolute errors. - INTERFACE cmfe_AnalyticAnalysis_IntegralAbsoluteErrorGet - MODULE PROCEDURE cmfe_AnalyticAnalysis_IntegralAbsoluteErrorGetNumber - MODULE PROCEDURE cmfe_AnalyticAnalysis_IntegralAbsoluteErrorGetObj - END INTERFACE cmfe_AnalyticAnalysis_IntegralAbsoluteErrorGet - - !>Get integral of relative errors. - INTERFACE cmfe_AnalyticAnalysis_IntegralRelativeErrorGet - MODULE PROCEDURE cmfe_AnalyticAnalysis_IntegralRelativeErrorGetNumber - MODULE PROCEDURE cmfe_AnalyticAnalysis_IntegralRelativeErrorGetObj - END INTERFACE cmfe_AnalyticAnalysis_IntegralRelativeErrorGet - - !>Get integral of NID numerical errors. - INTERFACE cmfe_AnalyticAnalysis_IntegralNIDNumericalValueGet - MODULE PROCEDURE cmfe_AnalyticAnalysis_IntegralNIDNumericalValueGetNumber - MODULE PROCEDURE cmfe_AnalyticAnalysis_IntegralNIDNumericalValueGetObj - END INTERFACE cmfe_AnalyticAnalysis_IntegralNIDNumericalValueGet - - !>Get integral of NID errors. - INTERFACE cmfe_AnalyticAnalysis_IntegralNIDErrorGet - MODULE PROCEDURE cmfe_AnalyticAnalysis_IntegralNIDErrorGetNumber - MODULE PROCEDURE cmfe_AnalyticAnalysis_IntegralNIDErrorGetObj - END INTERFACE cmfe_AnalyticAnalysis_IntegralNIDErrorGet - - PUBLIC cmfe_AnalyticAnalysis_Output - - PUBLIC cmfe_AnalyticAnalysis_AbsoluteErrorGetNode,cmfe_AnalyticAnalysis_PercentageErrorGetNode, & - & cmfe_AnalyticAnalysis_RelativeErrorGetNode - - PUBLIC cmfe_AnalyticAnalysis_AbsoluteErrorGetElement,cmfe_AnalyticAnalysis_PercentageErrorGetElement, & - & cmfe_AnalyticAnalysis_RelativeErrorGetElement - - PUBLIC cmfe_AnalyticAnalysis_AbsoluteErrorGetConstant,cmfe_AnalyticAnalysis_PercentageErrorGetConstant, & - & cmfe_AnalyticAnalysis_RelativeErrorGetConstant - - PUBLIC cmfe_AnalyticAnalysis_RMSErrorGetNode,cmfe_AnalyticAnalysis_RMSErrorGetElement - - PUBLIC cmfe_AnalyticAnalysis_IntegralNumericalValueGet,cmfe_AnalyticAnalysis_IntegralAnalyticValueGet, & - & cmfe_AnalyticAnalysis_IntegralPercentageErrorGet,cmfe_AnalyticAnalysis_IntegralAbsoluteErrorGet, & - & cmfe_AnalyticAnalysis_IntegralRelativeErrorGet,cmfe_AnalyticAnalysis_IntegralNIDNumericalValueGet, & - & cmfe_AnalyticAnalysis_IntegralNIDErrorGet - -!!================================================================================================================================== -!! -!! BaseRoutines -!! -!!================================================================================================================================== - - !Module parameters - - !> \addtogroup OpenCMISS_DiagnosticAndTimingConstants OpenCMISS::Iron::DiagnosticAndTiming::Constants - !> \brief Diagnostic and Timing constants. - !>@{ - !> \addtogroup OpenCMISS_DiagnosticTypes OpenCMISS::Iron::DiagnosticAndTiming::DiagnosticTypes - !> \brief Diganostic constants. - !> \see OpenCMISS::Iron::DiagnosticTypes,OpenCMISS - !>@{ - INTEGER(INTG), PARAMETER :: CMFE_ALL_DIAG_TYPE = ALL_DIAG_TYPE !@} - !> \addtogroup OpenCMISS_TimingTypes OpenCMISS::Iron::DiagnosticAndTiming::TimingTypes - !> \brief Timing constants. - !> \see OpenCMISS::Iron::TimingTypes,OpenCMISS - !>@{ - INTEGER(INTG), PARAMETER :: CMFE_ALL_TIMING_TYPE = ALL_TIMING_TYPE !@} - !>@} - - !Module types - - !Module variables - - !Interfaces - - PUBLIC CMFE_ALL_DIAG_TYPE,CMFE_IN_DIAG_TYPE,CMFE_FROM_DIAG_TYPE - - PUBLIC CMFE_ALL_TIMING_TYPE,CMFE_IN_TIMING_TYPE,CMFE_FROM_TIMING_TYPE - - PUBLIC cmfe_DiagnosticsSetOff,cmfe_DiagnosticsSetOn - - PUBLIC cmfe_OutputSetOff,cmfe_OutputSetOn - - PUBLIC cmfe_TimingSetOff,cmfe_TimingSetOn,cmfe_TimingSummaryOutput - -!!================================================================================================================================== -!! -!! BASIS_ROUTINES -!! -!!================================================================================================================================== - - !Module parameters - - !> \addtogroup OpenCMISS_BasisConstants OpenCMISS::Iron::Basis::Constants - !> \brief Basis function constants. - !>@{ - !> \addtogroup OpenCMISS_BasisTypes OpenCMISS::Iron::Basis::BasisTypes - !> \brief Basis definition type parameters. - !> \see OpenCMISS::Iron::BasisConstants,OpenCMISS - !>@{ - INTEGER(INTG), PARAMETER :: CMFE_BASIS_LAGRANGE_HERMITE_TP_TYPE = BASIS_LAGRANGE_HERMITE_TP_TYPE !@} - !> \addtogroup OpenCMISS_BasisInterpolationSpecifications OpenCMISS::Iron::Basis::InterpolationSpecifications - !> \brief Interpolation specification parameters - !> \see OpenCMISS::Iron::BasisConstants,OpenCMISS - !>@{ - INTEGER(INTG), PARAMETER :: CMFE_BASIS_LINEAR_LAGRANGE_INTERPOLATION = BASIS_LINEAR_LAGRANGE_INTERPOLATION !@} - !> \addtogroup OpenCMISS_BasisQuadratureSchemes OpenCMISS::Iron::Basis::QuadratureSchemes - !> \brief Quadrature scheme parameters - !> \see OpenCMISS::Iron::BasisConstants,OpenCMISS - !>@{ - INTEGER(INTG), PARAMETER :: CMFE_BASIS_DEFAULT_QUADRATURE_SCHEME = BASIS_DEFAULT_QUADRATURE_SCHEME !@} - !> \addtogroup OpenCMISS_BasisQuadratureTypes OpenCMISS::Iron::Basis::QuadratureTypes - !> \brief Basis quadrature type parameters. - !> \see OpenCMISS::Iron::BasisConstants,OpenCMISS - !>@{ - INTEGER(INTG), PARAMETER :: CMFE_BASIS_GAUSS_LEGENDRE_QUADRATURE = BASIS_GAUSS_LEGENDRE_QUADRATURE !@} - !> \addtogroup OpenCMISS_BasisXiCollapse OpenCMISS::Iron::Basis::XiCollapse - !> \brief Basis Xi collapse parameters. - !> \see OpenCMISS::Iron::Basis,OpenCMISS - !>@{ - INTEGER(INTG), PARAMETER :: CMFE_BASIS_XI_COLLAPSED = BASIS_XI_COLLAPSED !@} - !>@} - - !Module types - - !Module variables - - !Interfaces - - !>Returns the collapsed Xi flags for a basis. - INTERFACE cmfe_Basis_CollapsedXiGet - MODULE PROCEDURE cmfe_Basis_CollapsedXiGetNumber - MODULE PROCEDURE cmfe_Basis_CollapsedXiGetObj - END INTERFACE cmfe_Basis_CollapsedXiGet - - !>Sets/changes the collapsed Xi flags for a basis. - INTERFACE cmfe_Basis_CollapsedXiSet - MODULE PROCEDURE cmfe_Basis_CollapsedXiSetNumber - MODULE PROCEDURE cmfe_Basis_CollapsedXiSetObj - END INTERFACE cmfe_Basis_CollapsedXiSet - - !>Finishes the creation of a new basis. \see OpenCMISS::Iron::cmfe_Basis_CreateStart - INTERFACE cmfe_Basis_CreateFinish - MODULE PROCEDURE cmfe_Basis_CreateFinishNumber - MODULE PROCEDURE cmfe_Basis_CreateFinishObj - END INTERFACE cmfe_Basis_CreateFinish - - !>Starts the creation of a new basis. \see OpenCMISS::Iron::cmfe_Basis_CreateFinish - INTERFACE cmfe_Basis_CreateStart - MODULE PROCEDURE cmfe_Basis_CreateStartNumber - MODULE PROCEDURE cmfe_Basis_CreateStartObj - END INTERFACE cmfe_Basis_CreateStart - - !>Destroys a basis. - INTERFACE cmfe_Basis_Destroy - MODULE PROCEDURE cmfe_Basis_DestroyNumber - MODULE PROCEDURE cmfe_Basis_DestroyObj - END INTERFACE cmfe_Basis_Destroy - - !>Get the interpolation type in each Xi directions for a basis. - INTERFACE cmfe_Basis_InterpolationXiGet - MODULE PROCEDURE cmfe_Basis_InterpolationXiGetNumber - MODULE PROCEDURE cmfe_Basis_InterpolationXiGetObj - END INTERFACE cmfe_Basis_InterpolationXiGet - - !>Sets/changes the interpolation type in each Xi directions for a basis. - INTERFACE cmfe_Basis_InterpolationXiSet - MODULE PROCEDURE cmfe_Basis_InterpolationXiSetNumber - MODULE PROCEDURE cmfe_Basis_InterpolationXiSetObj - END INTERFACE cmfe_Basis_InterpolationXiSet - - !>Returns the number of local nodes in a basis. - INTERFACE cmfe_Basis_NumberOfLocalNodesGet - MODULE PROCEDURE cmfe_Basis_NumberOfLocalNodesGetNumber - MODULE PROCEDURE cmfe_Basis_NumberOfLocalNodesGetObj - END INTERFACE cmfe_Basis_NumberOfLocalNodesGet - - !>Returns the number of Xi directions in a basis. - INTERFACE cmfe_Basis_NumberOfXiGet - MODULE PROCEDURE cmfe_Basis_NumberOfXiGetNumber - MODULE PROCEDURE cmfe_Basis_NumberOfXiGetObj - END INTERFACE cmfe_Basis_NumberOfXiGet - - !>Sets/changes the number of Xi directions in a basis. - INTERFACE cmfe_Basis_NumberOfXiSet - MODULE PROCEDURE cmfe_Basis_NumberOfXiSetNumber - MODULE PROCEDURE cmfe_Basis_NumberOfXiSetObj - END INTERFACE cmfe_Basis_NumberOfXiSet - - !>Returns the number of Gauss points in each Xi direction on a basis quadrature. - INTERFACE cmfe_Basis_QuadratureNumberOfGaussXiGet - MODULE PROCEDURE cmfe_Basis_QuadratureNumberOfGaussXiGetNumber - MODULE PROCEDURE cmfe_Basis_QuadratureNumberOfGaussXiGetObj - END INTERFACE cmfe_Basis_QuadratureNumberOfGaussXiGet - - !>Sets/changes the number of Gauss points in each Xi direction on a basis quadrature. - INTERFACE cmfe_Basis_QuadratureNumberOfGaussXiSet - MODULE PROCEDURE cmfe_Basis_QuadratureNumberOfGaussXiSetNumber - MODULE PROCEDURE cmfe_Basis_QuadratureNumberOfGaussXiSetObj - END INTERFACE cmfe_Basis_QuadratureNumberOfGaussXiSet - - !>Returns the xi positions of Gauss points on a basis quadrature. - INTERFACE cmfe_Basis_QuadratureGaussXiGet - MODULE PROCEDURE cmfe_Basis_QuadratureSingleGaussXiGetNumber - MODULE PROCEDURE cmfe_Basis_QuadratureSingleGaussXiGetObj - MODULE PROCEDURE cmfe_Basis_QuadratureMultipleGaussXiGetNumber - MODULE PROCEDURE cmfe_Basis_QuadratureMultipleGaussXiGetObj - END INTERFACE cmfe_Basis_QuadratureGaussXiGet - - !>Returns the order of quadrature for a basis quadrature. - INTERFACE cmfe_Basis_QuadratureOrderGet - MODULE PROCEDURE cmfe_Basis_QuadratureOrderGetNumber - MODULE PROCEDURE cmfe_Basis_QuadratureOrderGetObj - END INTERFACE cmfe_Basis_QuadratureOrderGet - - !>Sets/changes the order of quadrature for a basis quadrature. - INTERFACE cmfe_Basis_QuadratureOrderSet - MODULE PROCEDURE cmfe_Basis_QuadratureOrderSetNumber - MODULE PROCEDURE cmfe_Basis_QuadratureOrderSetObj - END INTERFACE cmfe_Basis_QuadratureOrderSet - - !>Returns the quadrature type for a basis quadrature. - INTERFACE cmfe_Basis_QuadratureTypeGet - MODULE PROCEDURE cmfe_Basis_QuadratureTypeGetNumber - MODULE PROCEDURE cmfe_Basis_QuadratureTypeGetObj - END INTERFACE cmfe_Basis_QuadratureTypeGet - - !>Sets/changes the quadrature type for a basis quadrature. - INTERFACE cmfe_Basis_QuadratureTypeSet - MODULE PROCEDURE cmfe_Basis_QuadratureTypeSetNumber - MODULE PROCEDURE cmfe_Basis_QuadratureTypeSetObj - END INTERFACE cmfe_Basis_QuadratureTypeSet - - !>Sets/changes the local face gauss evaluatoin flag for a basis quadrature. - INTERFACE cmfe_Basis_QuadratureLocalFaceGaussEvaluateSet - MODULE PROCEDURE cmfe_Basis_QuadratureLocalFaceGaussEvaluateSetNumber - MODULE PROCEDURE cmfe_Basis_QuadratureLocalFaceGaussEvaluateSetObj - END INTERFACE cmfe_Basis_QuadratureLocalFaceGaussEvaluateSet - - !>Returns the type of a basis. - INTERFACE cmfe_Basis_TypeGet - MODULE PROCEDURE cmfe_Basis_TypeGetNumber - MODULE PROCEDURE cmfe_Basis_TypeGetObj - END INTERFACE cmfe_Basis_TypeGet - - !>Sets/changes the type of a basis. - INTERFACE cmfe_Basis_TypeSet - MODULE PROCEDURE cmfe_Basis_TypeSetNumber - MODULE PROCEDURE cmfe_Basis_TypeSetObj - END INTERFACE cmfe_Basis_TypeSet - - PUBLIC CMFE_BASIS_LAGRANGE_HERMITE_TP_TYPE,CMFE_BASIS_SIMPLEX_TYPE,CMFE_BASIS_SERENDIPITY_TYPE,CMFE_BASIS_AUXILLIARY_TYPE, & - & CMFE_BASIS_B_SPLINE_TP_TYPE,CMFE_BASIS_FOURIER_LAGRANGE_HERMITE_TP_TYPE,CMFE_BASIS_EXTENDED_LAGRANGE_TP_TYPE - - PUBLIC CMFE_BASIS_LINEAR_LAGRANGE_INTERPOLATION,CMFE_BASIS_QUADRATIC_LAGRANGE_INTERPOLATION, & - & CMFE_BASIS_CUBIC_LAGRANGE_INTERPOLATION, & - & CMFE_BASIS_CUBIC_HERMITE_INTERPOLATION,CMFE_BASIS_QUADRATIC1_HERMITE_INTERPOLATION, & - & CMFE_BASIS_QUADRATIC2_HERMITE_INTERPOLATION, & - & CMFE_BASIS_LINEAR_SIMPLEX_INTERPOLATION,CMFE_BASIS_QUADRATIC_SIMPLEX_INTERPOLATION,CMFE_BASIS_CUBIC_SIMPLEX_INTERPOLATION - - PUBLIC CMFE_BASIS_DEFAULT_QUADRATURE_SCHEME,CMFE_BASIS_LOW_QUADRATURE_SCHEME,CMFE_BASIS_MID_QUADRATURE_SCHEME, & - & CMFE_BASIS_HIGH_QUADRATURE_SCHEME - - PUBLIC CMFE_BASIS_GAUSS_LEGENDRE_QUADRATURE,CMFE_BASIS_GAUSS_LAGUERRE_QUADRATURE,CMFE_BASIS_GUASS_HERMITE_QUADRATURE, & - & CMFE_BASIS_ADAPTIVE_GAUSS_LEGENDRE_QUADRATURE,CMFE_BASIS_GAUSS_SIMPLEX_QUADRATURE - - PUBLIC CMFE_BASIS_XI_COLLAPSED,CMFE_BASIS_COLLAPSED_AT_XI0,CMFE_BASIS_COLLAPSED_AT_XI1,CMFE_BASIS_NOT_COLLAPSED - - PUBLIC cmfe_Basis_CollapsedXiGet,cmfe_Basis_CollapsedXiSet - - PUBLIC cmfe_Basis_CreateFinish,cmfe_Basis_CreateStart,cmfe_Basis_Destroy - - PUBLIC cmfe_Basis_InterpolationXiGet,cmfe_Basis_InterpolationXiSet - - PUBLIC cmfe_Basis_NumberOfLocalNodesGet - - PUBLIC cmfe_Basis_NumberOfXiGet,cmfe_Basis_NumberOfXiSet - - PUBLIC cmfe_Basis_QuadratureNumberOfGaussXiGet,cmfe_Basis_QuadratureNumberOfGaussXiSet - - PUBLIC cmfe_Basis_QuadratureGaussXiGet - - PUBLIC cmfe_Basis_QuadratureOrderGet,cmfe_Basis_QuadratureOrderSet - - PUBLIC cmfe_Basis_QuadratureTypeGet,cmfe_Basis_QuadratureTypeSet,cmfe_Basis_QuadratureLocalFaceGaussEvaluateSet - - PUBLIC cmfe_Basis_TypeGet,cmfe_Basis_TypeSet - -!!================================================================================================================================== -!! -!! BOUNDARY_CONDITIONS_ROUTINES -!! -!!================================================================================================================================== - - !Module parameters - - - !> \addtogroup OpenCMISS_BoundaryConditionsConstants OpenCMISS::Iron::BoundaryConditions::Constants - !> \brief Boundary conditions constants. - !>@{ - !> \addtogroup OpenCMISS_BoundaryConditionsTypes OpenCMISS::Iron::BoundaryConditions::Types - !> \brief Specific boundary condition types, which might only be applicable to certain equation sets. - !> \see OpenCMISS::Iron::BoundaryConditions,OpenCMISS - !>@{ - INTEGER(INTG), PARAMETER :: CMFE_BOUNDARY_CONDITION_FREE = BOUNDARY_CONDITION_FREE !@} - !> \addtogroup OpenCMISS_BoundaryConditionSparsityTypes OpenCMISS::Iron::BoundaryConditions::SparsityTypes - !> \brief Storage type for matrices used by boundary conditions. - !> \see OpenCMISS::Iron::BoundaryConditions,OpenCMISS - !>@{ - INTEGER(INTG), PARAMETER :: CMFE_BOUNDARY_CONDITION_SPARSE_MATRICES = BOUNDARY_CONDITION_SPARSE_MATRICES - INTEGER(INTG), PARAMETER :: CMFE_BOUNDARY_CONDITION_FULL_MATRICES = BOUNDARY_CONDITION_FULL_MATRICES - !>@} - !>@} - - !Module types - - !Module variables - - !Interfaces - - !>Destroys boundary conditions. - INTERFACE cmfe_BoundaryConditions_Destroy - MODULE PROCEDURE cmfe_BoundaryConditions_DestroyNumber0 - MODULE PROCEDURE cmfe_BoundaryConditions_DestroyNumber1 - MODULE PROCEDURE cmfe_BoundaryConditions_DestroyObj - END INTERFACE cmfe_BoundaryConditions_Destroy - - !>Adds to the value of the specified constant and sets this as a boundary condition on the specified constant. - INTERFACE cmfe_BoundaryConditions_AddConstant - MODULE PROCEDURE cmfe_BoundaryConditions_AddConstantNumber - MODULE PROCEDURE cmfe_BoundaryConditions_AddConstantObj - END INTERFACE cmfe_BoundaryConditions_AddConstant - - !>Sets the value of the specified constant as a boundary condition on the specified constant. - INTERFACE cmfe_BoundaryConditions_SetConstant - MODULE PROCEDURE cmfe_BoundaryConditions_SetConstantNumber - MODULE PROCEDURE cmfe_BoundaryConditions_SetConstantObj - END INTERFACE cmfe_BoundaryConditions_SetConstant - - !>Adds to the value of the element constant and sets this as a boundary condition on the specified element. - INTERFACE cmfe_BoundaryConditions_AddElement - MODULE PROCEDURE cmfe_BoundaryConditions_AddElementNumber - MODULE PROCEDURE cmfe_BoundaryConditions_AddElementObj - END INTERFACE cmfe_BoundaryConditions_AddElement - - !>Sets the value of the specified element as a boundary condition on the specified element. - INTERFACE cmfe_BoundaryConditions_SetElement - MODULE PROCEDURE cmfe_BoundaryConditions_SetElementNumber - MODULE PROCEDURE cmfe_BoundaryConditions_SetElementObj - END INTERFACE cmfe_BoundaryConditions_SetElement - - !>Adds to the value of the node constant and sets this as a boundary condition on the specified node. - INTERFACE cmfe_BoundaryConditions_AddNode - MODULE PROCEDURE cmfe_BoundaryConditions_AddNodeNumber - MODULE PROCEDURE cmfe_BoundaryConditions_AddNodeObj - END INTERFACE cmfe_BoundaryConditions_AddNode - - !>Sets the value of the specified node as a boundary condition on the specified node. - INTERFACE cmfe_BoundaryConditions_SetNode - MODULE PROCEDURE cmfe_BoundaryConditions_SetNodeNumber0 - MODULE PROCEDURE cmfe_BoundaryConditions_SetNodeNumber1 - MODULE PROCEDURE cmfe_BoundaryConditions_SetNodeObj - END INTERFACE cmfe_BoundaryConditions_SetNode - - !>Sets the matrix sparsity type for Neumann integration matrices, used when integrating Neumann point values. - INTERFACE cmfe_BoundaryConditions_NeumannSparsityTypeSet - MODULE PROCEDURE cmfe_BoundaryConditions_NeumannSparsityTypeSetNumber0 - MODULE PROCEDURE cmfe_BoundaryConditions_NeumannSparsityTypeSetNumber1 - MODULE PROCEDURE cmfe_BoundaryConditions_NeumannSparsityTypeSetObj - END INTERFACE cmfe_BoundaryConditions_NeumannSparsityTypeSet - - !>Constrain multiple nodal equations dependent field DOFs to be a single solver DOF in the solver equations - INTERFACE cmfe_BoundaryConditions_ConstrainNodeDofsEqual - MODULE PROCEDURE cmfe_BoundaryConditions_ConstrainNodeDofsEqualNumber - MODULE PROCEDURE cmfe_BoundaryConditions_ConstrainNodeDofsEqualObj - END INTERFACE cmfe_BoundaryConditions_ConstrainNodeDofsEqual - - PUBLIC CMFE_BOUNDARY_CONDITION_FREE,CMFE_BOUNDARY_CONDITION_FIXED, & - & CMFE_BOUNDARY_CONDITION_FIXED_WALL,CMFE_BOUNDARY_CONDITION_FIXED_INLET,CMFE_BOUNDARY_CONDITION_MOVED_WALL, & - & CMFE_BOUNDARY_CONDITION_FREE_WALL,CMFE_BOUNDARY_CONDITION_FIXED_OUTLET,CMFE_BOUNDARY_CONDITION_MOVED_WALL_INCREMENTED, & - & CMFE_BOUNDARY_CONDITION_CORRECTION_MASS_INCREASE,CMFE_BOUNDARY_CONDITION_IMPERMEABLE_WALL, & - & CMFE_BOUNDARY_CONDITION_NEUMANN_INTEGRATED_ONLY,CMFE_BOUNDARY_CONDITION_FIXED_FITTED, & - & CMFE_BOUNDARY_CONDITION_FIXED_NONREFLECTING,CMFE_BOUNDARY_CONDITION_FIXED_CELLML,CMFE_BOUNDARY_CONDITION_FIXED_STREE - - PUBLIC CMFE_BOUNDARY_CONDITION_NEUMANN_POINT,CMFE_BOUNDARY_CONDITION_NEUMANN_INTEGRATED,CMFE_BOUNDARY_CONDITION_DIRICHLET - PUBLIC CMFE_BOUNDARY_CONDITION_CAUCHY,CMFE_BOUNDARY_CONDITION_ROBIN,CMFE_BOUNDARY_CONDITION_FIXED_INCREMENTED - PUBLIC CMFE_BOUNDARY_CONDITION_PRESSURE,CMFE_BOUNDARY_CONDITION_FIXED_PRESSURE,CMFE_BOUNDARY_CONDITION_PRESSURE_INCREMENTED - PUBLIC CMFE_BOUNDARY_CONDITION_NEUMANN_POINT_INCREMENTED - - PUBLIC CMFE_BOUNDARY_CONDITION_SPARSE_MATRICES,CMFE_BOUNDARY_CONDITION_FULL_MATRICES - - PUBLIC cmfe_BoundaryConditions_Destroy - - PUBLIC cmfe_BoundaryConditions_AddConstant,cmfe_BoundaryConditions_SetConstant - - PUBLIC cmfe_BoundaryConditions_AddElement,cmfe_BoundaryConditions_SetElement - - PUBLIC cmfe_BoundaryConditions_AddNode,cmfe_BoundaryConditions_SetNode + IMPLICIT NONE + + PRIVATE + + !Module parameters + + !Module types + + !>Contains information about a basis function. + TYPE cmfe_BasisType + PRIVATE + TYPE(BASIS_TYPE), POINTER :: basis + END TYPE cmfe_BasisType + + !>Contains information on the boundary conditions for the equations set. + TYPE cmfe_BoundaryConditionsType + PRIVATE + TYPE(BOUNDARY_CONDITIONS_TYPE), POINTER :: boundaryConditions + END TYPE cmfe_BoundaryConditionsType + + !>Contains information on a CellML environment. + TYPE cmfe_CellMLType + PRIVATE + TYPE(CELLML_TYPE), POINTER :: cellml + END TYPE cmfe_CellMLType + + !>Contains information about the CellML equations for a solver. + TYPE cmfe_CellMLEquationsType + PRIVATE + TYPE(CELLML_EQUATIONS_TYPE), POINTER :: cellmlEquations + END TYPE cmfe_CellMLEquationsType + + !>Contains information on a computation environment + TYPE cmfe_ComputationEnvironmentType + PRIVATE + TYPE(ComputationEnvironmentType), POINTER :: computationEnvironment + END TYPE cmfe_ComputationEnvironmentType + + !>Contains information on a context. + TYPE cmfe_ContextType + PRIVATE + TYPE(ContextType), POINTER :: context + END TYPE cmfe_ContextType + + !>Contains information on a control loop. + TYPE cmfe_ControlLoopType + PRIVATE + TYPE(CONTROL_LOOP_TYPE), POINTER :: controlLoop + END TYPE cmfe_ControlLoopType + + !>Contains information on a coordinate system. + TYPE cmfe_CoordinateSystemType + PRIVATE + TYPE(COORDINATE_SYSTEM_TYPE), POINTER :: coordinateSystem + END TYPE cmfe_CoordinateSystemType + + !>Contains information on the data points defined on a region. + TYPE cmfe_DataPointsType + PRIVATE + TYPE(DataPointsType), POINTER :: dataPoints + END TYPE cmfe_DataPointsType + + !>Contains information about a data projection. + TYPE cmfe_DataProjectionType + PRIVATE + TYPE(DataProjectionType), POINTER :: dataProjection + END TYPE cmfe_DataProjectionType + + !>Contains information on the mesh decomposition. + TYPE cmfe_DecompositionType + PRIVATE + TYPE(DECOMPOSITION_TYPE), POINTER :: decomposition + END TYPE cmfe_DecompositionType + + !>Contains information about the equations in an equations set. + TYPE cmfe_EquationsType + PRIVATE + TYPE(EquationsType), POINTER :: equations + END TYPE cmfe_EquationsType + + !>Contains information on an equations set defined on a region. + TYPE cmfe_EquationsSetType + PRIVATE + TYPE(EQUATIONS_SET_TYPE), POINTER :: equationsSet + END TYPE cmfe_EquationsSetType + + !>Contains information for a field defined on a region. + TYPE cmfe_FieldType + PRIVATE + TYPE(FIELD_TYPE), POINTER :: field + END TYPE cmfe_FieldType + + !>Contains information for a fields defined on a region. + TYPE cmfe_FieldsType + !PRIVATE + TYPE(FIELDS_TYPE), POINTER :: fields + END TYPE cmfe_FieldsType + + !>Contains information on a generated mesh. + TYPE cmfe_GeneratedMeshType + PRIVATE + TYPE(GENERATED_MESH_TYPE), POINTER :: generatedMesh + END TYPE cmfe_GeneratedMeshType + + !>Contains information about a history file for a control loop. + TYPE cmfe_HistoryType + PRIVATE + TYPE(HISTORY_TYPE), POINTER :: history + END TYPE cmfe_HistoryType + + !>Contains information about an interface. + TYPE cmfe_InterfaceType + PRIVATE + TYPE(INTERFACE_TYPE), POINTER :: interface + END TYPE cmfe_InterfaceType + + !>Contains information about an interface condition. + TYPE cmfe_InterfaceConditionType + PRIVATE + TYPE(INTERFACE_CONDITION_TYPE), POINTER :: interfaceCondition + END TYPE cmfe_InterfaceConditionType + + !>Contains information about an interface condition. + TYPE cmfe_InterfaceEquationsType + PRIVATE + TYPE(INTERFACE_EQUATIONS_TYPE), POINTER :: interfaceEquations + END TYPE cmfe_InterfaceEquationsType + + !>Contains information on an interfaces meshes connectivity. + TYPE cmfe_InterfaceMeshConnectivityType + PRIVATE + TYPE(INTERFACE_MESH_CONNECTIVITY_TYPE), POINTER :: meshConnectivity + END TYPE cmfe_InterfaceMeshConnectivityType + + !>Contains information on an interfaces points connectivity. + TYPE cmfe_InterfacePointsConnectivityType + PRIVATE + TYPE(InterfacePointsConnectivityType), POINTER :: pointsConnectivity + END TYPE cmfe_InterfacePointsConnectivityType + + !>A matrix that may be distributed across multiple computation nodes + !>and may use sparse or full storage. + TYPE cmfe_DistributedMatrixType + PRIVATE + TYPE(DistributedMatrixType), POINTER :: distributedMatrix + END TYPE cmfe_DistributedMatrixType + + !>A vector that may be distributed across multiple computation nodes + TYPE cmfe_DistributedVectorType + PRIVATE + TYPE(DistributedVectorType), POINTER :: distributedVector + END TYPE cmfe_DistributedVectorType + + !>Contains information on a mesh defined on a region. + TYPE cmfe_MeshType + PRIVATE + TYPE(MESH_TYPE), POINTER :: mesh + END TYPE cmfe_MeshType + + !>Contains information on a mesh elements defined in a mesh + TYPE cmfe_MeshElementsType + PRIVATE + TYPE(MeshElementsType), POINTER :: meshElements + END TYPE cmfe_MeshElementsType + + !>Contains information on an embedded mesh + TYPE cmfe_MeshEmbeddingType + PRIVATE + TYPE(MESH_EMBEDDING_TYPE), POINTER :: meshEmbedding + END TYPE cmfe_MeshEmbeddingType + + !>Contains information on a mesh nodes defined in a mesh + TYPE cmfe_MeshNodesType + PRIVATE + TYPE(MeshNodesType), POINTER :: meshNodes + END TYPE cmfe_MeshNodesType + + !>Contains information on the nodes defined on a region. + TYPE cmfe_NodesType + PRIVATE + TYPE(NODES_TYPE), POINTER :: nodes + END TYPE cmfe_NodesType + + !>Contains information for a problem. + TYPE cmfe_ProblemType + PRIVATE + TYPE(PROBLEM_TYPE), POINTER :: problem + END TYPE cmfe_ProblemType + + !>Contains information for a particular quadrature scheme for a basis. + TYPE cmfe_QuadratureType + PRIVATE + TYPE(QUADRATURE_TYPE), POINTER :: quadrature + END TYPE cmfe_QuadratureType + +!>Contains information for a region. + TYPE cmfe_RegionType + PRIVATE + TYPE(REGION_TYPE), POINTER :: region + END TYPE cmfe_RegionType + + !>Contains information about a solver. + TYPE cmfe_SolverType + PRIVATE + TYPE(SOLVER_TYPE), POINTER :: solver + END TYPE cmfe_SolverType + + !>Contains information about the solver equations for a solver. + TYPE cmfe_SolverEquationsType + PRIVATE + TYPE(SOLVER_EQUATIONS_TYPE), POINTER :: solverEquations + END TYPE cmfe_SolverEquationsType + + !>Contains information on a work group + TYPE cmfe_WorkGroupType + PRIVATE + TYPE(WorkGroupType), POINTER :: workGroup + END TYPE cmfe_WorkGroupType + + !Module variables + + TYPE(VARYING_STRING) :: error + + INTERFACE cmfe_Initialise + MODULE PROCEDURE cmfe_InitialiseNumber + MODULE PROCEDURE cmfe_InitialiseObj + END INTERFACE cmfe_Initialise + + INTERFACE cmfe_Finalise + MODULE PROCEDURE cmfe_FinaliseNumber + MODULE PROCEDURE cmfe_FinaliseObj + END INTERFACE cmfe_Finalise + + INTERFACE cmfe_Fields_Create + MODULE PROCEDURE cmfe_Fields_CreateInterface + MODULE PROCEDURE cmfe_Fields_CreateRegion + END INTERFACE cmfe_Fields_Create - PUBLIC cmfe_BoundaryConditions_NeumannSparsityTypeSet + PUBLIC cmfe_Finalise,cmfe_Initialise - PUBLIC cmfe_BoundaryConditions_ConstrainNodeDofsEqual + PUBLIC cmfe_WorkingRealPrecisionGet -!!================================================================================================================================== -!! -!! CMISS -!! -!!================================================================================================================================== + PUBLIC cmfe_PetscOptionsSetValue - !Module parameters - !> \addtogroup OpenCMISS_CMISSConstants OpenCMISS::Iron::cmfe_::Constants - !> \brief CMISS constants. - !>@{ - !> \addtogroup OpenCMISS_CMISSErrorHandlingModes OpenCMISS::Iron::cmfe_::ErrorHandlingModes - !> \brief CMISS error handling mode parameters - !> \see OpenCMISS::Iron::cmfe_,OpenCMISS - !>@{ - INTEGER(INTG), PARAMETER :: CMFE_ERRORS_RETURN_ERROR_CODE = CMFE_RETURN_ERROR_CODE !@} - !>@} + PUBLIC cmfe_BasisType,cmfe_BasisTypesCopy,cmfe_Basis_Finalise,cmfe_Basis_Initialise - !Module types + PUBLIC cmfe_BoundaryConditionsType,cmfe_BoundaryConditions_Finalise,cmfe_BoundaryConditions_Initialise - !Module variables + PUBLIC cmfe_CellMLType,cmfe_CellML_Finalise,cmfe_CellML_Initialise - !Interfaces + PUBLIC cmfe_CellMLEquationsType,cmfe_CellMLEquations_Finalise,cmfe_CellMLEquations_Initialise - !>Extracts the OpenCMISS error message. - INTERFACE cmfe_ExtractErrorMessage - MODULE PROCEDURE cmfe_ExtractErrorMessageC - MODULE PROCEDURE cmfe_ExtractErrorMessageVS - END INTERFACE cmfe_ExtractErrorMessage + PUBLIC cmfe_ComputationEnvironmentType,cmfe_ComputationEnvironment_Initialise,cmfe_ComputationEnvironment_Finalise - !>Extracts the OpenCMISS error stack. - INTERFACE cmfe_ExtractErrorStack - MODULE PROCEDURE cmfe_ExtractErrorStackC - MODULE PROCEDURE cmfe_ExtractErrorStackVS - END INTERFACE cmfe_ExtractErrorStack + PUBLIC cmfe_ContextType,cmfe_Context_Finalise,cmfe_Context_Initialise - !>Gets the random seeds for OpenCMISS. - INTERFACE cmfe_RandomSeedsGet - MODULE PROCEDURE cmfe_RandomSeedsGet0 - MODULE PROCEDURE cmfe_RandomSeedsGet1 - END INTERFACE cmfe_RandomSeedsGet + PUBLIC cmfe_ControlLoopType,cmfe_ControlLoop_Finalise,cmfe_ControlLoop_Initialise,cmfe_ControlLoop_LoadOutputSet - !>Sets the random seeds for OpenCMISS. - INTERFACE cmfe_RandomSeedsSet - MODULE PROCEDURE cmfe_RandomSeedsSet0 - MODULE PROCEDURE cmfe_RandomSeedsSet1 - END INTERFACE cmfe_RandomSeedsSet + PUBLIC cmfe_CoordinateSystemType,cmfe_CoordinateSystem_Finalise,cmfe_CoordinateSystem_Initialise - PUBLIC CMFE_ERRORS_RETURN_ERROR_CODE,CMFE_ERRORS_OUTPUT_ERROR,CMFE_ERRORS_TRAP_ERROR + PUBLIC cmfe_DataPointsType,cmfe_DataPoints_Finalise,cmfe_DataPoints_Initialise - PUBLIC cmfe_ErrorHandlingModeGet,cmfe_ErrorHandlingModeSet + PUBLIC cmfe_DataProjectionType,cmfe_DataProjection_Finalise,cmfe_DataProjection_Initialise - PUBLIC cmfe_ExtractErrorMessage,cmfe_ExtractErrorStack + PUBLIC cmfe_DecompositionType,cmfe_Decomposition_Finalise,cmfe_Decomposition_Initialise - PUBLIC cmfe_RandomSeedsGet,cmfe_RandomSeedsSizeGet,cmfe_RandomSeedsSet + PUBLIC cmfe_Decomposition_CalculateFacesSet,cmfe_Decomposition_CalculateLinesSet -!!================================================================================================================================== -!! -!! CMISS_CELLML -!! -!!================================================================================================================================== + PUBLIC cmfe_DistributedMatrixType,cmfe_DistributedVectorType - !Module parameters + PUBLIC cmfe_DistributedMatrix_Initialise,cmfe_DistributedVector_Initialise - !> \addtogroup OpenCMISS_CellMLConstants OpenCMISS::Iron::CellML::Constants - !> \brief CellML constants. - !>@{ - !> \addtogroup OpenCMISS_CellMLFieldTypes OpenCMISS::Iron::CellML::FieldTypes - !> \brief CellML field type parameters. - !> \see OpenCMISS::Iron::CellML,OpenCMISS - !>@{ - INTEGER(INTG), PARAMETER :: CMFE_CELLML_MODELS_FIELD = CELLML_MODELS_FIELD !@} - !>@} - - !Module types - - !Module variables - - !Interfaces - - !>Set a CellML model variable as being known (the value will be set from an OpenCMISS field) - INTERFACE cmfe_CellML_VariableSetAsKnown - MODULE PROCEDURE cmfe_CellML_VariableSetAsKnownNumberC - MODULE PROCEDURE cmfe_CellML_VariableSetAsKnownObjC - MODULE PROCEDURE cmfe_CellML_VariableSetAsKnownNumberVS - MODULE PROCEDURE cmfe_CellML_VariableSetAsKnownObjVS - END INTERFACE cmfe_CellML_VariableSetAsKnown - - !>Set a CellML model variable as being wanted (the value will be extracted from the model to an OpenCMISS field) - INTERFACE cmfe_CellML_VariableSetAsWanted - MODULE PROCEDURE cmfe_CellML_VariableSetAsWantedNumberC - MODULE PROCEDURE cmfe_CellML_VariableSetAsWantedObjC - MODULE PROCEDURE cmfe_CellML_VariableSetAsWantedNumberVS - MODULE PROCEDURE cmfe_CellML_VariableSetAsWantedObjVS - END INTERFACE cmfe_CellML_VariableSetAsWanted - - !>Map a CellML model variable to a field variable component in this CellML environment. - INTERFACE cmfe_CellML_CreateCellMLToFieldMap - MODULE PROCEDURE cmfe_CellML_CreateCellMLToFieldMapNumberC - MODULE PROCEDURE cmfe_CellML_CreateCellMLToFieldMapObjC - MODULE PROCEDURE cmfe_CellML_CreateCellMLToFieldMapNumberVS - MODULE PROCEDURE cmfe_CellML_CreateCellMLToFieldMapObjVS - END INTERFACE cmfe_CellML_CreateCellMLToFieldMap - - !>Map a field variable component to a CellML model variable in this CellML environment. - INTERFACE cmfe_CellML_CreateFieldToCellMLMap - MODULE PROCEDURE cmfe_CellML_CreateFieldToCellMLMapNumberC - MODULE PROCEDURE cmfe_CellML_CreateFieldToCellMLMapObjC - MODULE PROCEDURE cmfe_CellML_CreateFieldToCellMLMapNumberVS - MODULE PROCEDURE cmfe_CellML_CreateFieldToCellMLMapObjVS - END INTERFACE cmfe_CellML_CreateFieldToCellMLMap - - !>Finishes the creation of a CellML environment. \see OpenCMISS::Iron::cmfe_CellML_CreateStart - INTERFACE cmfe_CellML_CreateFinish - MODULE PROCEDURE cmfe_CellML_CreateFinishNumber - MODULE PROCEDURE cmfe_CellML_CreateFinishObj - END INTERFACE cmfe_CellML_CreateFinish - - !>Starts the creation of a CellML environment. \see OpenCMISS::Iron::cmfe_CellML_CreateFinish - INTERFACE cmfe_CellML_CreateStart - MODULE PROCEDURE cmfe_CellML_CreateStartNumber - MODULE PROCEDURE cmfe_CellML_CreateStartObj - END INTERFACE cmfe_CellML_CreateStart - - !>Destroys a CellML environment. - INTERFACE cmfe_CellML_Destroy - MODULE PROCEDURE cmfe_CellML_DestroyNumber - MODULE PROCEDURE cmfe_CellML_DestroyObj - END INTERFACE cmfe_CellML_Destroy - - !>Finishes the creation of field maps for a CellML environment. \see OpenCMISS::Iron::cmfe_CellML_FieldMapsCreateStart - INTERFACE cmfe_CellML_FieldMapsCreateFinish - MODULE PROCEDURE cmfe_CellML_FieldMapsCreateFinishNumber - MODULE PROCEDURE cmfe_CellML_FieldMapsCreateFinishObj - END INTERFACE cmfe_CellML_FieldMapsCreateFinish - - !>Starts the creation of field maps for a CellML environment. \see OpenCMISS::Iron::cmfe_CellML_FieldMapsCreateFinish - INTERFACE cmfe_CellML_FieldMapsCreateStart - MODULE PROCEDURE cmfe_CellML_FieldMapsCreateStartNumber - MODULE PROCEDURE cmfe_CellML_FieldMapsCreateStartObj - END INTERFACE cmfe_CellML_FieldMapsCreateStart - - !>Imports the specified CellML model into a CellML models environment. - INTERFACE cmfe_CellML_ModelImport - MODULE PROCEDURE cmfe_CellML_ModelImportNumberC - MODULE PROCEDURE cmfe_CellML_ModelImportObjC - MODULE PROCEDURE cmfe_CellML_ModelImportNumberVS - MODULE PROCEDURE cmfe_CellML_ModelImportObjVS - END INTERFACE cmfe_CellML_ModelImport - - !>Finishes the creation of CellML models field. \see OpenCMISS::Iron::cmfe_CellML_ModelsFieldCreateStart - INTERFACE cmfe_CellML_ModelsFieldCreateFinish - MODULE PROCEDURE cmfe_CellML_ModelsFieldCreateFinishNumber - MODULE PROCEDURE cmfe_CellML_ModelsFieldCreateFinishObj - END INTERFACE cmfe_CellML_ModelsFieldCreateFinish - - !>Starts the creation of CellML models field. \see OpenCMISS::Iron::cmfe_CellML_ModelsFieldCreateFinish - INTERFACE cmfe_CellML_ModelsFieldCreateStart - MODULE PROCEDURE cmfe_CellML_ModelsFieldCreateStartNumber - MODULE PROCEDURE cmfe_CellML_ModelsFieldCreateStartObj - END INTERFACE cmfe_CellML_ModelsFieldCreateStart - - !>Returns the CellML models field for a CellML environment. - INTERFACE cmfe_CellML_ModelsFieldGet - MODULE PROCEDURE cmfe_CellML_ModelsFieldGetNumber - MODULE PROCEDURE cmfe_CellML_ModelsFieldGetObj - END INTERFACE cmfe_CellML_ModelsFieldGet - - !>Finishes the creation of CellML state field. \see OpenCMISS::Iron::cmfe_CellML_StateFieldCreateStart - INTERFACE cmfe_CellML_StateFieldCreateFinish - MODULE PROCEDURE cmfe_CellML_StateFieldCreateFinishNumber - MODULE PROCEDURE cmfe_CellML_StateFieldCreateFinishObj - END INTERFACE cmfe_CellML_StateFieldCreateFinish - - !>Starts the creation of CellML state field. \see OpenCMISS::Iron::cmfe_CellML_StateFieldCreateFinish - INTERFACE cmfe_CellML_StateFieldCreateStart - MODULE PROCEDURE cmfe_CellML_StateFieldCreateStartNumber - MODULE PROCEDURE cmfe_CellML_StateFieldCreateStartObj - END INTERFACE cmfe_CellML_StateFieldCreateStart - - !>Returns the CellML state field for a CellML environment. - INTERFACE cmfe_CellML_StateFieldGet - MODULE PROCEDURE cmfe_CellML_StateFieldGetNumber - MODULE PROCEDURE cmfe_CellML_StateFieldGetObj - END INTERFACE cmfe_CellML_StateFieldGet - - !>Returns the component for a given CellML field that corresponds to the specified CellML variable ID. - INTERFACE cmfe_CellML_FieldComponentGet - MODULE PROCEDURE cmfe_CellML_FieldComponentGetNumberC - MODULE PROCEDURE cmfe_CellML_FieldComponentGetObjC - MODULE PROCEDURE cmfe_CellML_FieldComponentGetNumberVS - MODULE PROCEDURE cmfe_CellML_FieldComponentGetObjVS - END INTERFACE cmfe_CellML_FieldComponentGet - - !>Finishes the creation of CellML intermediate field. \see OpenCMISS::Iron::cmfe_CellML_IntermediateFieldCreateStart - INTERFACE cmfe_CellML_IntermediateFieldCreateFinish - MODULE PROCEDURE cmfe_CellML_IntermediateFieldCreateFinishNumber - MODULE PROCEDURE cmfe_CellML_IntermediateFieldCreateFinishObj - END INTERFACE cmfe_CellML_IntermediateFieldCreateFinish - - !>Starts the creation of CellML intermediate field. \see OpenCMISS::Iron::cmfe_CellML_IntermediateFieldCreateFinish - INTERFACE cmfe_CellML_IntermediateFieldCreateStart - MODULE PROCEDURE cmfe_CellML_IntermediateFieldCreateStartNumber - MODULE PROCEDURE cmfe_CellML_IntermediateFieldCreateStartObj - END INTERFACE cmfe_CellML_IntermediateFieldCreateStart - - !>Returns the CellML intermediate field for a CellML environment. - INTERFACE cmfe_CellML_IntermediateFieldGet - MODULE PROCEDURE cmfe_CellML_IntermediateFieldGetNumber - MODULE PROCEDURE cmfe_CellML_IntermediateFieldGetObj - END INTERFACE cmfe_CellML_IntermediateFieldGet - - !>Finishes the creation of CellML parameters field. \see OpenCMISS::Iron::cmfe_CellML_ParametersFieldCreateStart - INTERFACE cmfe_CellML_ParametersFieldCreateFinish - MODULE PROCEDURE cmfe_CellML_ParametersFieldCreateFinishNumber - MODULE PROCEDURE cmfe_CellML_ParametersFieldCreateFinishObj - END INTERFACE cmfe_CellML_ParametersFieldCreateFinish - - !>Starts the creation of CellML parameters field. \see OpenCMISS::Iron::cmfe_CellML_ParametersFieldCreateFinish - INTERFACE cmfe_CellML_ParametersFieldCreateStart - MODULE PROCEDURE cmfe_CellML_ParametersFieldCreateStartNumber - MODULE PROCEDURE cmfe_CellML_ParametersFieldCreateStartObj - END INTERFACE cmfe_CellML_ParametersFieldCreateStart - - !>Returns the CellML parameters field for a CellML environment. - INTERFACE cmfe_CellML_ParametersFieldGet - MODULE PROCEDURE cmfe_CellML_ParametersFieldGetNumber - MODULE PROCEDURE cmfe_CellML_ParametersFieldGetObj - END INTERFACE cmfe_CellML_ParametersFieldGet - - !>Validate and instantiate the specified CellML environment. - INTERFACE cmfe_CellML_Generate - MODULE PROCEDURE cmfe_CellML_GenerateNumber - MODULE PROCEDURE cmfe_CellML_GenerateObj - END INTERFACE cmfe_CellML_Generate - - PUBLIC CMFE_CELLML_MODELS_FIELD,CMFE_CELLML_STATE_FIELD,CMFE_CELLML_INTERMEDIATE_FIELD,CMFE_CELLML_PARAMETERS_FIELD - - PUBLIC cmfe_CellML_VariableSetAsKnown,cmfe_CellML_VariableSetAsWanted - - PUBLIC cmfe_CellML_CreateCellMLToFieldMap,cmfe_CellML_CreateFieldToCellMLMap + PUBLIC cmfe_EquationsType,cmfe_Equations_Finalise,cmfe_Equations_Initialise - PUBLIC cmfe_CellML_CreateFinish,cmfe_CellML_CreateStart - - PUBLIC cmfe_CellML_Destroy + PUBLIC cmfe_EquationsSetType,cmfe_EquationsSet_Finalise,cmfe_EquationsSet_Initialise - PUBLIC cmfe_CellML_FieldMapsCreateStart,cmfe_CellML_FieldMapsCreateFinish + PUBLIC cmfe_FieldType,cmfe_Field_Finalise,cmfe_Field_Initialise - PUBLIC cmfe_CellML_ModelImport + PUBLIC cmfe_FieldsType,cmfe_Fields_Create,cmfe_Fields_Finalise,cmfe_Fields_Initialise - PUBLIC cmfe_CellML_ModelsFieldCreateFinish,cmfe_CellML_ModelsFieldCreateStart,cmfe_CellML_ModelsFieldGet + PUBLIC cmfe_GeneratedMeshType,cmfe_GeneratedMesh_Finalise,cmfe_GeneratedMesh_Initialise - PUBLIC cmfe_CellML_StateFieldCreateFinish,cmfe_CellML_StateFieldCreateStart,cmfe_CellML_StateFieldGet + PUBLIC cmfe_HistoryType,cmfe_History_Finalise,cmfe_History_Initialise - PUBLIC cmfe_CellML_FieldComponentGet + PUBLIC cmfe_InterfaceType,cmfe_Interface_Finalise,cmfe_Interface_Initialise - PUBLIC cmfe_CellML_IntermediateFieldCreateFinish,cmfe_CellML_IntermediateFieldCreateStart + PUBLIC cmfe_InterfaceConditionType,cmfe_InterfaceCondition_Finalise,cmfe_InterfaceCondition_Initialise - PUBLIC cmfe_CellML_IntermediateFieldGet + PUBLIC cmfe_InterfaceEquationsType,cmfe_InterfaceEquations_Finalise,cmfe_InterfaceEquations_Initialise - PUBLIC cmfe_CellML_ParametersFieldCreateFinish,cmfe_CellML_ParametersFieldCreateStart,cmfe_CellML_ParametersFieldGet + PUBLIC cmfe_InterfaceMeshConnectivityType,cmfe_InterfaceMeshConnectivity_Finalise, & + & cmfe_InterfaceMeshConnectivity_Initialise - PUBLIC cmfe_CellML_Generate + PUBLIC cmfe_InterfacePointsConnectivityType,cmfe_InterfacePointsConnectivity_Initialise, & + & cmfe_InterfacePointsConnectivity_Finalise -!!================================================================================================================================== -!! -!! Computation -!! -!!================================================================================================================================== + PUBLIC cmfe_MeshType,cmfe_Mesh_Finalise,cmfe_Mesh_Initialise - !Module parameters + PUBLIC cmfe_MeshElementsType,cmfe_MeshElements_Finalise,cmfe_MeshElements_Initialise - !Module types + PUBLIC cmfe_MeshNodesType,cmfe_MeshNodes_Finalise,cmfe_MeshNodes_Initialise - !Module variables + PUBLIC cmfe_NodesType,cmfe_Nodes_Finalise,cmfe_Nodes_Initialise - !Interfaces + PUBLIC cmfe_ProblemType,cmfe_Problem_Finalise,cmfe_Problem_Initialise - !>Starts the creation of a work group - INTERFACE cmfe_WorkGroup_CreateStart - MODULE PROCEDURE cmfe_WorkGroup_CreateStartNumber - MODULE PROCEDURE cmfe_WorkGroup_CreateStartObj - END INTERFACE cmfe_WorkGroup_CreateStart - - !>Finishes the creation of a work group - INTERFACE cmfe_WorkGroup_CreateFinish - MODULE PROCEDURE cmfe_WorkGroup_CreateFinishNumber - MODULE PROCEDURE cmfe_WorkGroup_CreateFinishObj - END INTERFACE cmfe_WorkGroup_CreateFinish - - !>Destroys a work group - INTERFACE cmfe_WorkGroup_Destroy - MODULE PROCEDURE cmfe_WorkGroup_DestroyNumber - MODULE PROCEDURE cmfe_WorkGroup_DestroyObj - END INTERFACE cmfe_WorkGroup_Destroy - - !>Gets the group communicator for a work group - INTERFACE cmfe_WorkGroup_GroupCommunicatorGet - MODULE PROCEDURE cmfe_WorkGroup_GroupCommunicatorGetNumber - MODULE PROCEDURE cmfe_WorkGroup_GroupCommunicatorGetObj - END INTERFACE cmfe_WorkGroup_GroupCommunicatorGet - - !>Returns the label of a work group. - INTERFACE cmfe_WorkGroup_LabelGet - MODULE PROCEDURE cmfe_WorkGroup_LabelGetCNumber - MODULE PROCEDURE cmfe_WorkGroup_LabelGetCObj - MODULE PROCEDURE cmfe_WorkGroup_LabelGetVSNumber - MODULE PROCEDURE cmfe_WorkGroup_LabelGetVSObj - END INTERFACE cmfe_WorkGroup_LabelGet - - !>Sets/changes the label of a work group. - INTERFACE cmfe_WorkGroup_LabelSet - MODULE PROCEDURE cmfe_WorkGroup_LabelSetCNumber - MODULE PROCEDURE cmfe_WorkGroup_LabelSetCObj - MODULE PROCEDURE cmfe_WorkGroup_LabelSetVSNumber - MODULE PROCEDURE cmfe_WorkGroup_LabelSetVSObj - END INTERFACE cmfe_WorkGroup_LabelSet - - !>Gets the group node number in a work group - INTERFACE cmfe_WorkGroup_GroupNodeNumberGet - MODULE PROCEDURE cmfe_WorkGroup_GroupNodeNumberGetNumber - MODULE PROCEDURE cmfe_WorkGroup_GroupNodeNumberGetObj - END INTERFACE cmfe_WorkGroup_GroupNodeNumberGet - - !>Gets the number of group nodes in a work group - INTERFACE cmfe_WorkGroup_NumberOfGroupNodesGet - MODULE PROCEDURE cmfe_WorkGroup_NumberOfGroupNodesGetNumber - MODULE PROCEDURE cmfe_WorkGroup_NumberOfGroupNodesGetObj - END INTERFACE cmfe_WorkGroup_NumberOfGroupNodesGet - - !>Sets/changes the number of group nodes in a work group - INTERFACE cmfe_WorkGroup_NumberOfGroupNodesSet - MODULE PROCEDURE cmfe_WorkGroup_NumberOfGroupNodesSetNumber - MODULE PROCEDURE cmfe_WorkGroup_NumberOfGroupNodesSetObj - END INTERFACE cmfe_WorkGroup_NumberOfGroupNodesSet - - PUBLIC cmfe_ComputationEnvironment_NumberOfWorldNodesGet + PUBLIC cmfe_QuadratureType,cmfe_Quadrature_Finalise,cmfe_Quadrature_Initialise - PUBLIC cmfe_ComputationEnvironment_WorldCommunicatorGet - - PUBLIC cmfe_ComputationEnvironment_WorldNodeNumberGet + PUBLIC cmfe_RegionType,cmfe_Region_Finalise,cmfe_Region_Initialise - PUBLIC cmfe_ComputationEnvironment_WorldWorkGroupGet + PUBLIC cmfe_SolverType,cmfe_Solver_Finalise,cmfe_Solver_Initialise - PUBLIC cmfe_WorkGroup_CreateStart + PUBLIC cmfe_SolverEquationsType,cmfe_SolverEquations_Finalise,cmfe_SolverEquations_Initialise - PUBLIC cmfe_WorkGroup_CreateFinish + PUBLIC cmfe_WorkGroupType,cmfe_WorkGroup_Initialise,cmfe_WorkGroup_Finalise - PUBLIC cmfe_WorkGroup_Destroy +!================================================================================================================================== +! +! ANALYTIC_ANALYSIS_ROUTINES +! +!================================================================================================================================== + + !Module parameters + + !Module types + + !Module variables + + !Interfaces + + !>Output the analytic error analysis for a field compared to the analytic values parameter set. + INTERFACE cmfe_AnalyticAnalysis_Output + MODULE PROCEDURE cmfe_AnalyticAnalysis_OutputNumber + MODULE PROCEDURE cmfe_AnalyticAnalysis_OutputObj + END INTERFACE + + !>Get the absolute error of the node. + INTERFACE cmfe_AnalyticAnalysis_AbsoluteErrorGetNode + MODULE PROCEDURE cmfe_AnalyticAnalysis_AbsoluteErrorGetNodeNumber + MODULE PROCEDURE cmfe_AnalyticAnalysis_AbsoluteErrorGetNodeObj + END INTERFACE cmfe_AnalyticAnalysis_AbsoluteErrorGetNode + + !>Get the percentage error of the node. + INTERFACE cmfe_AnalyticAnalysis_PercentageErrorGetNode + MODULE PROCEDURE cmfe_AnalyticAnalysis_PercentageErrorGetNodeNumber + MODULE PROCEDURE cmfe_AnalyticAnalysis_PercentageErrorGetNodeObj + END INTERFACE cmfe_AnalyticAnalysis_PercentageErrorGetNode + + !>Get the relative error of the node. + INTERFACE cmfe_AnalyticAnalysis_RelativeErrorGetNode + MODULE PROCEDURE cmfe_AnalyticAnalysis_RelativeErrorGetNodeNumber + MODULE PROCEDURE cmfe_AnalyticAnalysis_RelativeErrorGetNodeObj + END INTERFACE cmfe_AnalyticAnalysis_RelativeErrorGetNode + + !>Get the absolute error of the element. + INTERFACE cmfe_AnalyticAnalysis_AbsoluteErrorGetElement + MODULE PROCEDURE cmfe_AnalyticAnalysis_AbsoluteErrorGetElementNumber + MODULE PROCEDURE cmfe_AnalyticAnalysis_AbsoluteErrorGetElementObj + END INTERFACE cmfe_AnalyticAnalysis_AbsoluteErrorGetElement + + !>Get the percentage error of the element. + INTERFACE cmfe_AnalyticAnalysis_PercentageErrorGetElement + MODULE PROCEDURE cmfe_AnalyticAnalysis_PercentageErrorGetElementNumber + MODULE PROCEDURE cmfe_AnalyticAnalysis_PercentageErrorGetElementObj + END INTERFACE cmfe_AnalyticAnalysis_PercentageErrorGetElement + + !>Get the relative error of the element. + INTERFACE cmfe_AnalyticAnalysis_RelativeErrorGetElement + MODULE PROCEDURE cmfe_AnalyticAnalysis_RelativeErrorGetElementNumber + MODULE PROCEDURE cmfe_AnalyticAnalysis_RelativeErrorGetElementObj + END INTERFACE cmfe_AnalyticAnalysis_RelativeErrorGetElement + + !>Get the absolute error of the constant. + INTERFACE cmfe_AnalyticAnalysis_AbsoluteErrorGetConstant + MODULE PROCEDURE cmfe_AnalyticAnalysis_AbsoluteErrorGetConstantNumber + MODULE PROCEDURE cmfe_AnalyticAnalysis_AbsoluteErrorGetConstantObj + END INTERFACE cmfe_AnalyticAnalysis_AbsoluteErrorGetConstant + + !>Get the percentage error of the constant. + INTERFACE cmfe_AnalyticAnalysis_PercentageErrorGetConstant + MODULE PROCEDURE cmfe_AnalyticAnalysis_PercentageErrorGetConstantNumber + MODULE PROCEDURE cmfe_AnalyticAnalysis_PercentageErrorGetConstantObj + END INTERFACE cmfe_AnalyticAnalysis_PercentageErrorGetConstant + + !>Get the relative error of the constant. + INTERFACE cmfe_AnalyticAnalysis_RelativeErrorGetConstant + MODULE PROCEDURE cmfe_AnalyticAnalysis_RelativeErrorGetConstantNumber + MODULE PROCEDURE cmfe_AnalyticAnalysis_RelativeErrorGetConstantObj + END INTERFACE cmfe_AnalyticAnalysis_RelativeErrorGetConstant + + !>Get the RMS error of nodes. + INTERFACE cmfe_AnalyticAnalysis_RMSErrorGetNode + MODULE PROCEDURE cmfe_AnalyticAnalysis_RMSErrorGetNodeNumber + MODULE PROCEDURE cmfe_AnalyticAnalysis_RMSErrorGetNodeObj + END INTERFACE cmfe_AnalyticAnalysis_RMSErrorGetNode + + !>Get the RMS error of elements. + INTERFACE cmfe_AnalyticAnalysis_RMSErrorGetElement + MODULE PROCEDURE cmfe_AnalyticAnalysis_RMSErrorGetElementNumber + MODULE PROCEDURE cmfe_AnalyticAnalysis_RMSErrorGetElementObj + END INTERFACE cmfe_AnalyticAnalysis_RMSErrorGetElement + + !>Get integral of numerical values. + INTERFACE cmfe_AnalyticAnalysis_IntegralNumericalValueGet + MODULE PROCEDURE cmfe_AnalyticAnalysis_IntegralNumericalValueGetNumber + MODULE PROCEDURE cmfe_AnalyticAnalysis_IntegralNumericalValueGetObj + END INTERFACE cmfe_AnalyticAnalysis_IntegralNumericalValueGet + + !>Get integral of analytical values. + INTERFACE cmfe_AnalyticAnalysis_IntegralAnalyticValueGet + MODULE PROCEDURE cmfe_AnalyticAnalysis_IntegralAnalyticValueGetNumber + MODULE PROCEDURE cmfe_AnalyticAnalysis_IntegralAnalyticValueGetObj + END INTERFACE cmfe_AnalyticAnalysis_IntegralAnalyticValueGet + + !>Get integral of percentage errors. + INTERFACE cmfe_AnalyticAnalysis_IntegralPercentageErrorGet + MODULE PROCEDURE cmfe_AnalyticAnalysis_IntegralPercentageErrorGetNumber + MODULE PROCEDURE cmfe_AnalyticAnalysis_IntegralPercentageErrorGetObj + END INTERFACE cmfe_AnalyticAnalysis_IntegralPercentageErrorGet + + !>Get integral of absolute errors. + INTERFACE cmfe_AnalyticAnalysis_IntegralAbsoluteErrorGet + MODULE PROCEDURE cmfe_AnalyticAnalysis_IntegralAbsoluteErrorGetNumber + MODULE PROCEDURE cmfe_AnalyticAnalysis_IntegralAbsoluteErrorGetObj + END INTERFACE cmfe_AnalyticAnalysis_IntegralAbsoluteErrorGet + + !>Get integral of relative errors. + INTERFACE cmfe_AnalyticAnalysis_IntegralRelativeErrorGet + MODULE PROCEDURE cmfe_AnalyticAnalysis_IntegralRelativeErrorGetNumber + MODULE PROCEDURE cmfe_AnalyticAnalysis_IntegralRelativeErrorGetObj + END INTERFACE cmfe_AnalyticAnalysis_IntegralRelativeErrorGet + + !>Get integral of NID numerical errors. + INTERFACE cmfe_AnalyticAnalysis_IntegralNIDNumericalValueGet + MODULE PROCEDURE cmfe_AnalyticAnalysis_IntegralNIDNumericalValueGetNumber + MODULE PROCEDURE cmfe_AnalyticAnalysis_IntegralNIDNumericalValueGetObj + END INTERFACE cmfe_AnalyticAnalysis_IntegralNIDNumericalValueGet + + !>Get integral of NID errors. + INTERFACE cmfe_AnalyticAnalysis_IntegralNIDErrorGet + MODULE PROCEDURE cmfe_AnalyticAnalysis_IntegralNIDErrorGetNumber + MODULE PROCEDURE cmfe_AnalyticAnalysis_IntegralNIDErrorGetObj + END INTERFACE cmfe_AnalyticAnalysis_IntegralNIDErrorGet + + PUBLIC cmfe_AnalyticAnalysis_Output + + PUBLIC cmfe_AnalyticAnalysis_AbsoluteErrorGetNode,cmfe_AnalyticAnalysis_PercentageErrorGetNode, & + & cmfe_AnalyticAnalysis_RelativeErrorGetNode + + PUBLIC cmfe_AnalyticAnalysis_AbsoluteErrorGetElement,cmfe_AnalyticAnalysis_PercentageErrorGetElement, & + & cmfe_AnalyticAnalysis_RelativeErrorGetElement + + PUBLIC cmfe_AnalyticAnalysis_AbsoluteErrorGetConstant,cmfe_AnalyticAnalysis_PercentageErrorGetConstant, & + & cmfe_AnalyticAnalysis_RelativeErrorGetConstant + + PUBLIC cmfe_AnalyticAnalysis_RMSErrorGetNode,cmfe_AnalyticAnalysis_RMSErrorGetElement + + PUBLIC cmfe_AnalyticAnalysis_IntegralNumericalValueGet,cmfe_AnalyticAnalysis_IntegralAnalyticValueGet, & + & cmfe_AnalyticAnalysis_IntegralPercentageErrorGet,cmfe_AnalyticAnalysis_IntegralAbsoluteErrorGet, & + & cmfe_AnalyticAnalysis_IntegralRelativeErrorGet,cmfe_AnalyticAnalysis_IntegralNIDNumericalValueGet, & + & cmfe_AnalyticAnalysis_IntegralNIDErrorGet + +!================================================================================================================================== +! +! BaseRoutines +! +!================================================================================================================================== - PUBLIC cmfe_WorkGroup_GroupCommunicatorGet + !Module parameters - PUBLIC cmfe_WorkGroup_GroupNodeNumberGet + !> \addtogroup OpenCMISS_DiagnosticAndTimingConstants OpenCMISS::Iron::DiagnosticAndTiming::Constants + !> \brief Diagnostic and Timing constants. + !>@{ + !> \addtogroup OpenCMISS_DiagnosticTypes OpenCMISS::Iron::DiagnosticAndTiming::DiagnosticTypes + !> \brief Diganostic constants. + !> \see OpenCMISS::Iron::DiagnosticTypes,OpenCMISS + !>@{ + INTEGER(INTG), PARAMETER :: CMFE_ALL_DIAG_TYPE = ALL_DIAG_TYPE !@} + !> \addtogroup OpenCMISS_TimingTypes OpenCMISS::Iron::DiagnosticAndTiming::TimingTypes + !> \brief Timing constants. + !> \see OpenCMISS::Iron::TimingTypes,OpenCMISS + !>@{ + INTEGER(INTG), PARAMETER :: CMFE_ALL_TIMING_TYPE = ALL_TIMING_TYPE !@} + !>@} - PUBLIC cmfe_WorkGroup_LabelGet,cmfe_WorkGroup_LabelSet + !Module types - PUBLIC cmfe_WorkGroup_NumberOfGroupNodesGet,cmfe_WorkGroup_NumberOfGroupNodesSet - -!!================================================================================================================================== -!! -!! Constants -!! -!!================================================================================================================================== + !Module variables - !Module parameters + !Interfaces - !> \addtogroup OpenCMISS_Constants OpenCMISS::Iron::Constants - !> \brief OpeCMISS constants. - !>@{ - !> \addtogroup OpenCMISS_DataTypeConstants OpenCMISS::Iron::Constants::DataTypeConstants - !> \brief Data type constants for base data types - !> \see OpenCMISS_Constants,OpenCMISS - !>@{ - INTEGER(INTG), PARAMETER :: CMFE_INTEGER_TYPE = INTEGER_TYPE !@} - !> \addtogroup OpenCMISS_GlobalDerivativeConstants OpenCMISS::Iron::Constants::GlobalDerivativeConstants - !> \brief Global derivative constant identifiers - !> \see OpenCMISS_CONSTANTS,OpenCMISS - !>@{ - INTEGER(INTG), PARAMETER :: CMFE_NO_GLOBAL_DERIV = NO_GLOBAL_DERIV !@} - !> \addtogroup OpenCMISS_ElementNormalXiDirections OpenCMISS::Iron::Constants::ElementNormalXiDirections - !> \brief Xi directions normal to element faces and lines. - !> \see OpenCMISS_CONSTANTS,OpenCMISS - !>@{ - INTEGER(INTG), PARAMETER :: CMFE_ELEMENT_NORMAL_MINUS_XI1 = ELEMENT_NORMAL_MINUS_XI1 !@} - !>@} + PUBLIC CMFE_ALL_DIAG_TYPE,CMFE_IN_DIAG_TYPE,CMFE_FROM_DIAG_TYPE - !Module types + PUBLIC CMFE_ALL_TIMING_TYPE,CMFE_IN_TIMING_TYPE,CMFE_FROM_TIMING_TYPE - !Module variables + PUBLIC cmfe_DiagnosticsSetOff,cmfe_DiagnosticsSetOn - !Interfaces + PUBLIC cmfe_OutputSetOff,cmfe_OutputSetOn - PUBLIC CMFE_INTEGER_TYPE,CMFE_SHORT_INTEGER_TYPE,CMFE_LONG_INTEGER_TYPE,CMFE_SINGLE_REAL_TYPE,CMFE_DOUBLE_REAL_TYPE, & - & CMFE_QUADRAUPLE_REAL_TYPE,CMFE_CHARACTER_TYPE,CMFE_LOGICAL_TYPE,CMFE_SINGLE_COMPLEX_TYPE,CMFE_DOUBLE_COMPLEX_TYPE, & - & CMFE_QUADRUPLE_COMPLEX_TYPE + PUBLIC cmfe_TimingSetOff,cmfe_TimingSetOn,cmfe_TimingSummaryOutput - PUBLIC CMFE_NO_GLOBAL_DERIV,CMFE_GLOBAL_DERIV_S1,CMFE_GLOBAL_DERIV_S2,CMFE_GLOBAL_DERIV_S1_S2, & - & CMFE_GLOBAL_DERIV_S3,CMFE_GLOBAL_DERIV_S1_S3,CMFE_GLOBAL_DERIV_S2_S3,CMFE_GLOBAL_DERIV_S1_S2_S3 +!================================================================================================================================== +! +! BasisRoutines +! +!================================================================================================================================== + + !Module parameters + + !> \addtogroup OpenCMISS_BasisConstants OpenCMISS::Iron::Basis::Constants + !> \brief Basis function constants. + !>@{ + !> \addtogroup OpenCMISS_BasisTypes OpenCMISS::Iron::Basis::BasisTypes + !> \brief Basis definition type parameters. + !> \see OpenCMISS::Iron::BasisConstants,OpenCMISS + !>@{ + INTEGER(INTG), PARAMETER :: CMFE_BASIS_LAGRANGE_HERMITE_TP_TYPE = BASIS_LAGRANGE_HERMITE_TP_TYPE !@} + !> \addtogroup OpenCMISS_BasisInterpolationSpecifications OpenCMISS::Iron::Basis::InterpolationSpecifications + !> \brief Interpolation specification parameters + !> \see OpenCMISS::Iron::BasisConstants,OpenCMISS + !>@{ + INTEGER(INTG), PARAMETER :: CMFE_BASIS_LINEAR_LAGRANGE_INTERPOLATION = BASIS_LINEAR_LAGRANGE_INTERPOLATION !@} + !> \addtogroup OpenCMISS_BasisQuadratureSchemes OpenCMISS::Iron::Basis::QuadratureSchemes + !> \brief Quadrature scheme parameters + !> \see OpenCMISS::Iron::BasisConstants,OpenCMISS + !>@{ + INTEGER(INTG), PARAMETER :: CMFE_BASIS_DEFAULT_QUADRATURE_SCHEME = BASIS_DEFAULT_QUADRATURE_SCHEME !@} + !> \addtogroup OpenCMISS_BasisQuadratureTypes OpenCMISS::Iron::Basis::QuadratureTypes + !> \brief Basis quadrature type parameters. + !> \see OpenCMISS::Iron::BasisConstants,OpenCMISS + !>@{ + INTEGER(INTG), PARAMETER :: CMFE_BASIS_GAUSS_LEGENDRE_QUADRATURE = BASIS_GAUSS_LEGENDRE_QUADRATURE !@} + !> \addtogroup OpenCMISS_BasisXiCollapse OpenCMISS::Iron::Basis::XiCollapse + !> \brief Basis Xi collapse parameters. + !> \see OpenCMISS::Iron::Basis,OpenCMISS + !>@{ + INTEGER(INTG), PARAMETER :: CMFE_BASIS_XI_COLLAPSED = BASIS_XI_COLLAPSED !@} + !>@} + + !Module types + + !Module variables + + !Interfaces + + !>Returns the collapsed Xi flags for a basis. + INTERFACE cmfe_Basis_CollapsedXiGet + MODULE PROCEDURE cmfe_Basis_CollapsedXiGetNumber + MODULE PROCEDURE cmfe_Basis_CollapsedXiGetObj + END INTERFACE cmfe_Basis_CollapsedXiGet + + !>Sets/changes the collapsed Xi flags for a basis. + INTERFACE cmfe_Basis_CollapsedXiSet + MODULE PROCEDURE cmfe_Basis_CollapsedXiSetNumber + MODULE PROCEDURE cmfe_Basis_CollapsedXiSetObj + END INTERFACE cmfe_Basis_CollapsedXiSet + + !>Finishes the creation of a new basis. \see OpenCMISS::Iron::cmfe_Basis_CreateStart + INTERFACE cmfe_Basis_CreateFinish + MODULE PROCEDURE cmfe_Basis_CreateFinishNumber + MODULE PROCEDURE cmfe_Basis_CreateFinishObj + END INTERFACE cmfe_Basis_CreateFinish + + !>Starts the creation of a new basis. \see OpenCMISS::Iron::cmfe_Basis_CreateFinish + INTERFACE cmfe_Basis_CreateStart + MODULE PROCEDURE cmfe_Basis_CreateStartNumber + MODULE PROCEDURE cmfe_Basis_CreateStartObj + END INTERFACE cmfe_Basis_CreateStart + + !>Destroys a basis. + INTERFACE cmfe_Basis_Destroy + MODULE PROCEDURE cmfe_Basis_DestroyNumber + MODULE PROCEDURE cmfe_Basis_DestroyObj + END INTERFACE cmfe_Basis_Destroy + + !>Get the interpolation type in each Xi directions for a basis. + INTERFACE cmfe_Basis_InterpolationXiGet + MODULE PROCEDURE cmfe_Basis_InterpolationXiGetNumber + MODULE PROCEDURE cmfe_Basis_InterpolationXiGetObj + END INTERFACE cmfe_Basis_InterpolationXiGet + + !>Sets/changes the interpolation type in each Xi directions for a basis. + INTERFACE cmfe_Basis_InterpolationXiSet + MODULE PROCEDURE cmfe_Basis_InterpolationXiSetNumber + MODULE PROCEDURE cmfe_Basis_InterpolationXiSetObj + END INTERFACE cmfe_Basis_InterpolationXiSet + + !>Returns the number of local nodes in a basis. + INTERFACE cmfe_Basis_NumberOfLocalNodesGet + MODULE PROCEDURE cmfe_Basis_NumberOfLocalNodesGetNumber + MODULE PROCEDURE cmfe_Basis_NumberOfLocalNodesGetObj + END INTERFACE cmfe_Basis_NumberOfLocalNodesGet + + !>Returns the number of Xi directions in a basis. + INTERFACE cmfe_Basis_NumberOfXiGet + MODULE PROCEDURE cmfe_Basis_NumberOfXiGetNumber + MODULE PROCEDURE cmfe_Basis_NumberOfXiGetObj + END INTERFACE cmfe_Basis_NumberOfXiGet + + !>Sets/changes the number of Xi directions in a basis. + INTERFACE cmfe_Basis_NumberOfXiSet + MODULE PROCEDURE cmfe_Basis_NumberOfXiSetNumber + MODULE PROCEDURE cmfe_Basis_NumberOfXiSetObj + END INTERFACE cmfe_Basis_NumberOfXiSet + + !>Returns the number of Gauss points in each Xi direction on a basis quadrature. + INTERFACE cmfe_Basis_QuadratureNumberOfGaussXiGet + MODULE PROCEDURE cmfe_Basis_QuadratureNumberOfGaussXiGetNumber + MODULE PROCEDURE cmfe_Basis_QuadratureNumberOfGaussXiGetObj + END INTERFACE cmfe_Basis_QuadratureNumberOfGaussXiGet + + !>Sets/changes the number of Gauss points in each Xi direction on a basis quadrature. + INTERFACE cmfe_Basis_QuadratureNumberOfGaussXiSet + MODULE PROCEDURE cmfe_Basis_QuadratureNumberOfGaussXiSetNumber + MODULE PROCEDURE cmfe_Basis_QuadratureNumberOfGaussXiSetObj + END INTERFACE cmfe_Basis_QuadratureNumberOfGaussXiSet + + !>Returns the xi positions of Gauss points on a basis quadrature. + INTERFACE cmfe_Basis_QuadratureGaussXiGet + MODULE PROCEDURE cmfe_Basis_QuadratureSingleGaussXiGetNumber + MODULE PROCEDURE cmfe_Basis_QuadratureSingleGaussXiGetObj + MODULE PROCEDURE cmfe_Basis_QuadratureMultipleGaussXiGetNumber + MODULE PROCEDURE cmfe_Basis_QuadratureMultipleGaussXiGetObj + END INTERFACE cmfe_Basis_QuadratureGaussXiGet + + !>Returns the order of quadrature for a basis quadrature. + INTERFACE cmfe_Basis_QuadratureOrderGet + MODULE PROCEDURE cmfe_Basis_QuadratureOrderGetNumber + MODULE PROCEDURE cmfe_Basis_QuadratureOrderGetObj + END INTERFACE cmfe_Basis_QuadratureOrderGet + + !>Sets/changes the order of quadrature for a basis quadrature. + INTERFACE cmfe_Basis_QuadratureOrderSet + MODULE PROCEDURE cmfe_Basis_QuadratureOrderSetNumber + MODULE PROCEDURE cmfe_Basis_QuadratureOrderSetObj + END INTERFACE cmfe_Basis_QuadratureOrderSet + + !>Returns the quadrature type for a basis quadrature. + INTERFACE cmfe_Basis_QuadratureTypeGet + MODULE PROCEDURE cmfe_Basis_QuadratureTypeGetNumber + MODULE PROCEDURE cmfe_Basis_QuadratureTypeGetObj + END INTERFACE cmfe_Basis_QuadratureTypeGet + + !>Sets/changes the quadrature type for a basis quadrature. + INTERFACE cmfe_Basis_QuadratureTypeSet + MODULE PROCEDURE cmfe_Basis_QuadratureTypeSetNumber + MODULE PROCEDURE cmfe_Basis_QuadratureTypeSetObj + END INTERFACE cmfe_Basis_QuadratureTypeSet + + !>Sets/changes the local face gauss evaluatoin flag for a basis quadrature. + INTERFACE cmfe_Basis_QuadratureLocalFaceGaussEvaluateSet + MODULE PROCEDURE cmfe_Basis_QuadratureLocalFaceGaussEvaluateSetNumber + MODULE PROCEDURE cmfe_Basis_QuadratureLocalFaceGaussEvaluateSetObj + END INTERFACE cmfe_Basis_QuadratureLocalFaceGaussEvaluateSet + + !>Returns the type of a basis. + INTERFACE cmfe_Basis_TypeGet + MODULE PROCEDURE cmfe_Basis_TypeGetNumber + MODULE PROCEDURE cmfe_Basis_TypeGetObj + END INTERFACE cmfe_Basis_TypeGet + + !>Sets/changes the type of a basis. + INTERFACE cmfe_Basis_TypeSet + MODULE PROCEDURE cmfe_Basis_TypeSetNumber + MODULE PROCEDURE cmfe_Basis_TypeSetObj + END INTERFACE cmfe_Basis_TypeSet + + PUBLIC CMFE_BASIS_LAGRANGE_HERMITE_TP_TYPE,CMFE_BASIS_SIMPLEX_TYPE,CMFE_BASIS_SERENDIPITY_TYPE,CMFE_BASIS_AUXILLIARY_TYPE, & + & CMFE_BASIS_B_SPLINE_TP_TYPE,CMFE_BASIS_FOURIER_LAGRANGE_HERMITE_TP_TYPE,CMFE_BASIS_EXTENDED_LAGRANGE_TP_TYPE + + PUBLIC CMFE_BASIS_LINEAR_LAGRANGE_INTERPOLATION,CMFE_BASIS_QUADRATIC_LAGRANGE_INTERPOLATION, & + & CMFE_BASIS_CUBIC_LAGRANGE_INTERPOLATION, & + & CMFE_BASIS_CUBIC_HERMITE_INTERPOLATION,CMFE_BASIS_QUADRATIC1_HERMITE_INTERPOLATION, & + & CMFE_BASIS_QUADRATIC2_HERMITE_INTERPOLATION, & + & CMFE_BASIS_LINEAR_SIMPLEX_INTERPOLATION,CMFE_BASIS_QUADRATIC_SIMPLEX_INTERPOLATION,CMFE_BASIS_CUBIC_SIMPLEX_INTERPOLATION + + PUBLIC CMFE_BASIS_DEFAULT_QUADRATURE_SCHEME,CMFE_BASIS_LOW_QUADRATURE_SCHEME,CMFE_BASIS_MID_QUADRATURE_SCHEME, & + & CMFE_BASIS_HIGH_QUADRATURE_SCHEME + + PUBLIC CMFE_BASIS_GAUSS_LEGENDRE_QUADRATURE,CMFE_BASIS_GAUSS_LAGUERRE_QUADRATURE,CMFE_BASIS_GUASS_HERMITE_QUADRATURE, & + & CMFE_BASIS_ADAPTIVE_GAUSS_LEGENDRE_QUADRATURE,CMFE_BASIS_GAUSS_SIMPLEX_QUADRATURE + + PUBLIC CMFE_BASIS_XI_COLLAPSED,CMFE_BASIS_COLLAPSED_AT_XI0,CMFE_BASIS_COLLAPSED_AT_XI1,CMFE_BASIS_NOT_COLLAPSED + + PUBLIC cmfe_Basis_CollapsedXiGet,cmfe_Basis_CollapsedXiSet + + PUBLIC cmfe_Basis_CreateFinish,cmfe_Basis_CreateStart,cmfe_Basis_Destroy + + PUBLIC cmfe_Basis_InterpolationXiGet,cmfe_Basis_InterpolationXiSet + + PUBLIC cmfe_Basis_NumberOfLocalNodesGet - PUBLIC CMFE_ELEMENT_NORMAL_MINUS_XI1,CMFE_ELEMENT_NORMAL_MINUS_XI2,CMFE_ELEMENT_NORMAL_MINUS_XI3,CMFE_ELEMENT_NORMAL_MINUS_XI4, & - & CMFE_ELEMENT_NORMAL_PLUS_XI1,CMFE_ELEMENT_NORMAL_PLUS_XI2,CMFE_ELEMENT_NORMAL_PLUS_XI3,CMFE_ELEMENT_NORMAL_PLUS_XI4 + PUBLIC cmfe_Basis_NumberOfXiGet,cmfe_Basis_NumberOfXiSet + + PUBLIC cmfe_Basis_QuadratureNumberOfGaussXiGet,cmfe_Basis_QuadratureNumberOfGaussXiSet -!!================================================================================================================================== -!! -!! CONTROL_LOOP_ROUTINES -!! -!!================================================================================================================================== + PUBLIC cmfe_Basis_QuadratureGaussXiGet - !Module parameters + PUBLIC cmfe_Basis_QuadratureOrderGet,cmfe_Basis_QuadratureOrderSet - !> \addtogroup OpenCMISS_ControlLoopConstants OpenCMISS::Iron::ControlLoop::Constants - !> \brief Control loops constants. - !>@{ - !> \addtogroup OpenCMISS_ControlLoopIdentifiers OpenCMISS::Iron::ControlLoop::Identifiers - !> \brief The control loop identification parameters. - !> \see OpenCMISS::Iron::ControlLoop,OpenCMISS - !>@{ - INTEGER(INTG), PARAMETER :: CMFE_CONTROL_LOOP_NODE = CONTROL_LOOP_NODE !@} - !> \addtogroup OpenCMISS_ControlLoopOutputTypes OpenCMISS::Iron::ControlLoop::OutputTypes - !> \brief The control loop output types. - !> \see OpenCMISS::Iron::ControlLoop,OpenCMISS - !>@{ - INTEGER(INTG), PARAMETER :: CMFE_CONTROL_LOOP_NO_OUTPUT = CONTROL_LOOP_NO_OUTPUT !@} - !>@} + PUBLIC cmfe_Basis_QuadratureTypeGet,cmfe_Basis_QuadratureTypeSet,cmfe_Basis_QuadratureLocalFaceGaussEvaluateSet - !Module types + PUBLIC cmfe_Basis_TypeGet,cmfe_Basis_TypeSet - !Module variables +!================================================================================================================================== +! +! BOUNDARY_CONDITIONS_ROUTINES +! +!================================================================================================================================== + + !Module parameters + + + !> \addtogroup OpenCMISS_BoundaryConditionsConstants OpenCMISS::Iron::BoundaryConditions::Constants + !> \brief Boundary conditions constants. + !>@{ + !> \addtogroup OpenCMISS_BoundaryConditionsTypes OpenCMISS::Iron::BoundaryConditions::Types + !> \brief Specific boundary condition types, which might only be applicable to certain equation sets. + !> \see OpenCMISS::Iron::BoundaryConditions,OpenCMISS + !>@{ + INTEGER(INTG), PARAMETER :: CMFE_BOUNDARY_CONDITION_FREE = BOUNDARY_CONDITION_FREE !@} + !> \addtogroup OpenCMISS_BoundaryConditionSparsityTypes OpenCMISS::Iron::BoundaryConditions::SparsityTypes + !> \brief Storage type for matrices used by boundary conditions. + !> \see OpenCMISS::Iron::BoundaryConditions,OpenCMISS + !>@{ + INTEGER(INTG), PARAMETER :: CMFE_BOUNDARY_CONDITION_SPARSE_MATRICES = BOUNDARY_CONDITION_SPARSE_MATRICES + INTEGER(INTG), PARAMETER :: CMFE_BOUNDARY_CONDITION_FULL_MATRICES = BOUNDARY_CONDITION_FULL_MATRICES + !>@} + !>@} + + !Module types + + !Module variables + + !Interfaces + + !>Destroys boundary conditions. + INTERFACE cmfe_BoundaryConditions_Destroy + MODULE PROCEDURE cmfe_BoundaryConditions_DestroyNumber0 + MODULE PROCEDURE cmfe_BoundaryConditions_DestroyNumber1 + MODULE PROCEDURE cmfe_BoundaryConditions_DestroyObj + END INTERFACE cmfe_BoundaryConditions_Destroy + + !>Adds to the value of the specified constant and sets this as a boundary condition on the specified constant. + INTERFACE cmfe_BoundaryConditions_AddConstant + MODULE PROCEDURE cmfe_BoundaryConditions_AddConstantNumber + MODULE PROCEDURE cmfe_BoundaryConditions_AddConstantObj + END INTERFACE cmfe_BoundaryConditions_AddConstant + + !>Sets the value of the specified constant as a boundary condition on the specified constant. + INTERFACE cmfe_BoundaryConditions_SetConstant + MODULE PROCEDURE cmfe_BoundaryConditions_SetConstantNumber + MODULE PROCEDURE cmfe_BoundaryConditions_SetConstantObj + END INTERFACE cmfe_BoundaryConditions_SetConstant + + !>Adds to the value of the element constant and sets this as a boundary condition on the specified element. + INTERFACE cmfe_BoundaryConditions_AddElement + MODULE PROCEDURE cmfe_BoundaryConditions_AddElementNumber + MODULE PROCEDURE cmfe_BoundaryConditions_AddElementObj + END INTERFACE cmfe_BoundaryConditions_AddElement + + !>Sets the value of the specified element as a boundary condition on the specified element. + INTERFACE cmfe_BoundaryConditions_SetElement + MODULE PROCEDURE cmfe_BoundaryConditions_SetElementNumber + MODULE PROCEDURE cmfe_BoundaryConditions_SetElementObj + END INTERFACE cmfe_BoundaryConditions_SetElement + + !>Adds to the value of the node constant and sets this as a boundary condition on the specified node. + INTERFACE cmfe_BoundaryConditions_AddNode + MODULE PROCEDURE cmfe_BoundaryConditions_AddNodeNumber + MODULE PROCEDURE cmfe_BoundaryConditions_AddNodeObj + END INTERFACE cmfe_BoundaryConditions_AddNode + + !>Sets the value of the specified node as a boundary condition on the specified node. + INTERFACE cmfe_BoundaryConditions_SetNode + MODULE PROCEDURE cmfe_BoundaryConditions_SetNodeNumber0 + MODULE PROCEDURE cmfe_BoundaryConditions_SetNodeNumber1 + MODULE PROCEDURE cmfe_BoundaryConditions_SetNodeObj + END INTERFACE cmfe_BoundaryConditions_SetNode + + !>Sets the matrix sparsity type for Neumann integration matrices, used when integrating Neumann point values. + INTERFACE cmfe_BoundaryConditions_NeumannSparsityTypeSet + MODULE PROCEDURE cmfe_BoundaryConditions_NeumannSparsityTypeSetNumber0 + MODULE PROCEDURE cmfe_BoundaryConditions_NeumannSparsityTypeSetNumber1 + MODULE PROCEDURE cmfe_BoundaryConditions_NeumannSparsityTypeSetObj + END INTERFACE cmfe_BoundaryConditions_NeumannSparsityTypeSet + + !>Constrain multiple nodal equations dependent field DOFs to be a single solver DOF in the solver equations + INTERFACE cmfe_BoundaryConditions_ConstrainNodeDofsEqual + MODULE PROCEDURE cmfe_BoundaryConditions_ConstrainNodeDofsEqualNumber + MODULE PROCEDURE cmfe_BoundaryConditions_ConstrainNodeDofsEqualObj + END INTERFACE cmfe_BoundaryConditions_ConstrainNodeDofsEqual + + PUBLIC CMFE_BOUNDARY_CONDITION_FREE,CMFE_BOUNDARY_CONDITION_FIXED, & + & CMFE_BOUNDARY_CONDITION_FIXED_WALL,CMFE_BOUNDARY_CONDITION_FIXED_INLET,CMFE_BOUNDARY_CONDITION_MOVED_WALL, & + & CMFE_BOUNDARY_CONDITION_FREE_WALL,CMFE_BOUNDARY_CONDITION_FIXED_OUTLET,CMFE_BOUNDARY_CONDITION_MOVED_WALL_INCREMENTED, & + & CMFE_BOUNDARY_CONDITION_CORRECTION_MASS_INCREASE,CMFE_BOUNDARY_CONDITION_IMPERMEABLE_WALL, & + & CMFE_BOUNDARY_CONDITION_NEUMANN_INTEGRATED_ONLY,CMFE_BOUNDARY_CONDITION_FIXED_FITTED, & + & CMFE_BOUNDARY_CONDITION_FIXED_NONREFLECTING,CMFE_BOUNDARY_CONDITION_FIXED_CELLML,CMFE_BOUNDARY_CONDITION_FIXED_STREE + + PUBLIC CMFE_BOUNDARY_CONDITION_NEUMANN_POINT,CMFE_BOUNDARY_CONDITION_NEUMANN_INTEGRATED,CMFE_BOUNDARY_CONDITION_DIRICHLET + PUBLIC CMFE_BOUNDARY_CONDITION_CAUCHY,CMFE_BOUNDARY_CONDITION_ROBIN,CMFE_BOUNDARY_CONDITION_FIXED_INCREMENTED + PUBLIC CMFE_BOUNDARY_CONDITION_PRESSURE,CMFE_BOUNDARY_CONDITION_FIXED_PRESSURE,CMFE_BOUNDARY_CONDITION_PRESSURE_INCREMENTED + PUBLIC CMFE_BOUNDARY_CONDITION_NEUMANN_POINT_INCREMENTED + + PUBLIC CMFE_BOUNDARY_CONDITION_SPARSE_MATRICES,CMFE_BOUNDARY_CONDITION_FULL_MATRICES + + PUBLIC cmfe_BoundaryConditions_Destroy + + PUBLIC cmfe_BoundaryConditions_AddConstant,cmfe_BoundaryConditions_SetConstant + + PUBLIC cmfe_BoundaryConditions_AddElement,cmfe_BoundaryConditions_SetElement + + PUBLIC cmfe_BoundaryConditions_AddNode,cmfe_BoundaryConditions_SetNode + + PUBLIC cmfe_BoundaryConditions_NeumannSparsityTypeSet + + PUBLIC cmfe_BoundaryConditions_ConstrainNodeDofsEqual + +!================================================================================================================================== +! +! CMISS +! +!================================================================================================================================== - !Interfaces + !Module parameters + !> \addtogroup OpenCMISS_CMISSConstants OpenCMISS::Iron::cmfe_::Constants + !> \brief CMISS constants. + !>@{ + !> \addtogroup OpenCMISS_CMISSErrorHandlingModes OpenCMISS::Iron::cmfe_::ErrorHandlingModes + !> \brief CMISS error handling mode parameters + !> \see OpenCMISS::Iron::cmfe_,OpenCMISS + !>@{ + INTEGER(INTG), PARAMETER :: CMFE_ERRORS_RETURN_ERROR_CODE = CMFE_RETURN_ERROR_CODE !@} + !>@} - !>Returns the current time parameters for a time control loop. - INTERFACE cmfe_ControlLoop_CurrentTimesGet - MODULE PROCEDURE cmfe_ControlLoop_CurrentTimesGetNumber0 - MODULE PROCEDURE cmfe_ControlLoop_CurrentTimesGetNumber1 - MODULE PROCEDURE cmfe_ControlLoop_CurrentTimesGetObj - END INTERFACE cmfe_ControlLoop_CurrentTimesGet + !Module types - !>Destroy a control loop. - INTERFACE cmfe_ControlLoop_Destroy - MODULE PROCEDURE cmfe_ControlLoop_DestroyNumber0 - MODULE PROCEDURE cmfe_ControlLoop_DestroyNumber1 - MODULE PROCEDURE cmfe_ControlLoop_DestroyObj - END INTERFACE cmfe_ControlLoop_Destroy + !Module variables - !>Returns the specified control loop as indexed by the control loop identifier from the control loop root. - INTERFACE cmfe_ControlLoop_ControlLoopGet - MODULE PROCEDURE cmfe_ControlLoop_ControlLoopGetNumber00 - MODULE PROCEDURE cmfe_ControlLoop_ControlLoopGetNumber10 - MODULE PROCEDURE cmfe_ControlLoop_ControlLoopGetNumber01 - MODULE PROCEDURE cmfe_ControlLoop_ControlLoopGetNumber11 - MODULE PROCEDURE cmfe_ControlLoop_ControlLoopGetObj0 - MODULE PROCEDURE cmfe_ControlLoop_ControlLoopGetObj1 - END INTERFACE cmfe_ControlLoop_ControlLoopGet - - !>Sets/changes the iteration parameters for a fixed control loop. \todo need a get metod - INTERFACE cmfe_ControlLoop_IterationsSet - MODULE PROCEDURE cmfe_ControlLoop_IterationsSetNumber0 - MODULE PROCEDURE cmfe_ControlLoop_IterationsSetNumber1 - MODULE PROCEDURE cmfe_ControlLoop_IterationsSetObj - END INTERFACE cmfe_ControlLoop_IterationsSet - - !>Returns the label of a control loop. - INTERFACE cmfe_ControlLoop_LabelGet - MODULE PROCEDURE cmfe_ControlLoop_LabelGetCNumber0 - MODULE PROCEDURE cmfe_ControlLoop_LabelGetCNumber1 - MODULE PROCEDURE cmfe_ControlLoop_LabelGetCObj - MODULE PROCEDURE cmfe_ControlLoop_LabelGetVSNumber0 - MODULE PROCEDURE cmfe_ControlLoop_LabelGetVSNumber1 - MODULE PROCEDURE cmfe_ControlLoop_LabelGetVSObj - END INTERFACE cmfe_ControlLoop_LabelGet - - !>Sets/changes the label of a control loop. - INTERFACE cmfe_ControlLoop_LabelSet - MODULE PROCEDURE cmfe_ControlLoop_LabelSetCNumber0 - MODULE PROCEDURE cmfe_ControlLoop_LabelSetCNumber1 - MODULE PROCEDURE cmfe_ControlLoop_LabelSetCObj - MODULE PROCEDURE cmfe_ControlLoop_LabelSetVSNumber0 - MODULE PROCEDURE cmfe_ControlLoop_LabelSetVSNumber1 - MODULE PROCEDURE cmfe_ControlLoop_LabelSetVSObj - END INTERFACE cmfe_ControlLoop_LabelSet - - !>Sets/changes the maximum iterations for a while control loop. \todo need a get method - INTERFACE cmfe_ControlLoop_MaximumIterationsSet - MODULE PROCEDURE cmfe_ControlLoop_MaximumIterationsSetNumber0 - MODULE PROCEDURE cmfe_ControlLoop_MaximumIterationsSetNumber1 - MODULE PROCEDURE cmfe_ControlLoop_MaximumIterationsSetObj - END INTERFACE cmfe_ControlLoop_MaximumIterationsSet - - !>Sets/changes the convergence tolerance for a while control loop. \todo need a get method - INTERFACE cmfe_ControlLoop_AbsoluteToleranceSet - MODULE PROCEDURE cmfe_ControlLoop_AbsoluteToleranceSetNumber0 - MODULE PROCEDURE cmfe_ControlLoop_AbsoluteToleranceSetNumber1 - MODULE PROCEDURE cmfe_ControlLoop_AbsoluteToleranceSetObj - END INTERFACE cmfe_ControlLoop_AbsoluteToleranceSet - - !>Returns the number of iterations for a time control loop. If the returned value is 0, that means that the number has not yet been computed. - INTERFACE cmfe_ControlLoop_NumberOfIterationsGet - MODULE PROCEDURE cmfe_ControlLoop_NumberOfIterationsGetNumber0 - MODULE PROCEDURE cmfe_ControlLoop_NumberOfIterationsGetNumber1 - MODULE PROCEDURE cmfe_ControlLoop_NumberOfIterationsGetObj - END INTERFACE cmfe_ControlLoop_NumberOfIterationsGet - - !>Sets/changes the number of iterations for a time control loop. If set to 0, it will be computed from time increment and start/stop time - INTERFACE cmfe_ControlLoop_NumberOfIterationsSet - MODULE PROCEDURE cmfe_ControlLoop_NumberOfIterationsSetNumber0 - MODULE PROCEDURE cmfe_ControlLoop_NumberOfIterationsSetNumber1 - MODULE PROCEDURE cmfe_ControlLoop_NumberOfIterationsSetObj - END INTERFACE cmfe_ControlLoop_NumberOfIterationsSet - - !>Returns the number of sub loops for a control loop. - INTERFACE cmfe_ControlLoop_NumberOfSubLoopsGet - MODULE PROCEDURE cmfe_ControlLoop_NumberOfSubLoopsGetNumber0 - MODULE PROCEDURE cmfe_ControlLoop_NumberOfSubLoopsGetNumber1 - MODULE PROCEDURE cmfe_ControlLoop_NumberOfSubLoopsGetObj - END INTERFACE cmfe_ControlLoop_NumberOfSubLoopsGet - - !>Sets/changes the number of sub loops for a control loop. \todo is this really a public method??? - INTERFACE cmfe_ControlLoop_NumberOfSubLoopsSet - MODULE PROCEDURE cmfe_ControlLoop_NumberOfSubLoopsSetNumber0 - MODULE PROCEDURE cmfe_ControlLoop_NumberOfSubLoopsSetNumber1 - MODULE PROCEDURE cmfe_ControlLoop_NumberOfSubLoopsSetObj - END INTERFACE cmfe_ControlLoop_NumberOfSubLoopsSet - - !>Sets/changes the output parameters for a time control loop. - INTERFACE cmfe_ControlLoop_TimeOutputSet - MODULE PROCEDURE cmfe_ControlLoop_TimeOutputSetNumber0 - MODULE PROCEDURE cmfe_ControlLoop_TimeOutputSetNumber1 - MODULE PROCEDURE cmfe_ControlLoop_TimeOutputSetObj - END INTERFACE cmfe_ControlLoop_TimeOutputSet - - !>Returns the output type for a control loop. - INTERFACE cmfe_ControlLoop_OutputTypeGet - MODULE PROCEDURE cmfe_ControlLoop_OutputTypeGetNumber0 - MODULE PROCEDURE cmfe_ControlLoop_OutputTypeGetNumber1 - MODULE PROCEDURE cmfe_ControlLoop_OutputTypeGetObj - END INTERFACE cmfe_ControlLoop_OutputTypeGet - - !>Sets/changes the output type for a control loop. - INTERFACE cmfe_ControlLoop_OutputTypeSet - MODULE PROCEDURE cmfe_ControlLoop_OutputTypeSetNumber0 - MODULE PROCEDURE cmfe_ControlLoop_OutputTypeSetNumber1 - MODULE PROCEDURE cmfe_ControlLoop_OutputTypeSetObj - END INTERFACE cmfe_ControlLoop_OutputTypeSet - - !>Sets/changes the input parameters for a time control loop. - INTERFACE cmfe_ControlLoop_TimeInputSet - MODULE PROCEDURE cmfe_ControlLoop_TimeInputSetNumber0 - MODULE PROCEDURE cmfe_ControlLoop_TimeInputSetNumber1 - MODULE PROCEDURE cmfe_ControlLoop_TimeInputSetObj - END INTERFACE cmfe_ControlLoop_TimeInputSet - - !>Returns the time parameters for a time control loop. - INTERFACE cmfe_ControlLoop_TimesGet - MODULE PROCEDURE cmfe_ControlLoop_TimesGetNumber0 - MODULE PROCEDURE cmfe_ControlLoop_TimesGetNumber1 - MODULE PROCEDURE cmfe_ControlLoop_TimesGetObj - END INTERFACE cmfe_ControlLoop_TimesGet - - !>Sets/Changes the time parameters for a time control loop. - INTERFACE cmfe_ControlLoop_TimesSet - MODULE PROCEDURE cmfe_ControlLoop_TimesSetNumber0 - MODULE PROCEDURE cmfe_ControlLoop_TimesSetNumber1 - MODULE PROCEDURE cmfe_ControlLoop_TimesSetObj - END INTERFACE cmfe_ControlLoop_TimesSet - - !>Sets/Changes the loop type for a control loop. \todo Is this really a public method? \todo need a get method - INTERFACE cmfe_ControlLoop_TypeSet - MODULE PROCEDURE cmfe_ControlLoop_TypeSetNumber0 - MODULE PROCEDURE cmfe_ControlLoop_TypeSetNumber1 - MODULE PROCEDURE cmfe_ControlLoop_TypeSetObj - END INTERFACE cmfe_ControlLoop_TypeSet - - PUBLIC CMFE_CONTROL_LOOP_NODE - - PUBLIC CMFE_CONTROL_LOOP_NO_OUTPUT,CMFE_CONTROL_LOOP_PROGRESS_OUTPUT,CMFE_CONTROL_LOOP_TIMING_OUTPUT - - PUBLIC cmfe_ControlLoop_CurrentTimesGet - - PUBLIC cmfe_ControlLoop_Destroy - - PUBLIC cmfe_ControlLoop_ControlLoopGet - - PUBLIC cmfe_ControlLoop_IterationsSet - - PUBLIC cmfe_ControlLoop_LabelGet,cmfe_ControlLoop_LabelSet - - PUBLIC cmfe_ControlLoop_MaximumIterationsSet - - PUBLIC cmfe_ControlLoop_AbsoluteToleranceSet - - PUBLIC cmfe_ControlLoop_NumberOfIterationsGet, cmfe_ControlLoop_NumberOfIterationsSet - - PUBLIC cmfe_ControlLoop_NumberOfSubLoopsGet,cmfe_ControlLoop_NumberOfSubLoopsSet + !Interfaces - PUBLIC cmfe_ControlLoop_OutputTypeGet,cmfe_ControlLoop_OutputTypeSet + !>Extracts the OpenCMISS error message. + INTERFACE cmfe_ExtractErrorMessage + MODULE PROCEDURE cmfe_ExtractErrorMessageC + MODULE PROCEDURE cmfe_ExtractErrorMessageVS + END INTERFACE cmfe_ExtractErrorMessage - PUBLIC cmfe_ControlLoop_TimeOutputSet,cmfe_ControlLoop_TimeInputSet + !>Extracts the OpenCMISS error stack. + INTERFACE cmfe_ExtractErrorStack + MODULE PROCEDURE cmfe_ExtractErrorStackC + MODULE PROCEDURE cmfe_ExtractErrorStackVS + END INTERFACE cmfe_ExtractErrorStack - PUBLIC cmfe_ControlLoop_TimesGet,cmfe_ControlLoop_TimesSet + PUBLIC CMFE_ERRORS_RETURN_ERROR_CODE,CMFE_ERRORS_OUTPUT_ERROR,CMFE_ERRORS_TRAP_ERROR - PUBLIC cmfe_ControlLoop_TypeSet + PUBLIC cmfe_ErrorHandlingModeGet,cmfe_ErrorHandlingModeSet + PUBLIC cmfe_ExtractErrorMessage,cmfe_ExtractErrorStack -!!================================================================================================================================== -!! -!! COORDINATE_ROUTINES -!! -!!================================================================================================================================== +!================================================================================================================================== +! +! CMISS_CELLML +! +!================================================================================================================================== + + !Module parameters + + !> \addtogroup OpenCMISS_CellMLConstants OpenCMISS::Iron::CellML::Constants + !> \brief CellML constants. + !>@{ + !> \addtogroup OpenCMISS_CellMLFieldTypes OpenCMISS::Iron::CellML::FieldTypes + !> \brief CellML field type parameters. + !> \see OpenCMISS::Iron::CellML,OpenCMISS + !>@{ + INTEGER(INTG), PARAMETER :: CMFE_CELLML_MODELS_FIELD = CELLML_MODELS_FIELD !@} + !>@} + + !Module types + + !Module variables + + !Interfaces + + !>Set a CellML model variable as being known (the value will be set from an OpenCMISS field) + INTERFACE cmfe_CellML_VariableSetAsKnown + MODULE PROCEDURE cmfe_CellML_VariableSetAsKnownNumberC + MODULE PROCEDURE cmfe_CellML_VariableSetAsKnownObjC + MODULE PROCEDURE cmfe_CellML_VariableSetAsKnownNumberVS + MODULE PROCEDURE cmfe_CellML_VariableSetAsKnownObjVS + END INTERFACE cmfe_CellML_VariableSetAsKnown + + !>Set a CellML model variable as being wanted (the value will be extracted from the model to an OpenCMISS field) + INTERFACE cmfe_CellML_VariableSetAsWanted + MODULE PROCEDURE cmfe_CellML_VariableSetAsWantedNumberC + MODULE PROCEDURE cmfe_CellML_VariableSetAsWantedObjC + MODULE PROCEDURE cmfe_CellML_VariableSetAsWantedNumberVS + MODULE PROCEDURE cmfe_CellML_VariableSetAsWantedObjVS + END INTERFACE cmfe_CellML_VariableSetAsWanted + + !>Map a CellML model variable to a field variable component in this CellML environment. + INTERFACE cmfe_CellML_CreateCellMLToFieldMap + MODULE PROCEDURE cmfe_CellML_CreateCellMLToFieldMapNumberC + MODULE PROCEDURE cmfe_CellML_CreateCellMLToFieldMapObjC + MODULE PROCEDURE cmfe_CellML_CreateCellMLToFieldMapNumberVS + MODULE PROCEDURE cmfe_CellML_CreateCellMLToFieldMapObjVS + END INTERFACE cmfe_CellML_CreateCellMLToFieldMap + + !>Map a field variable component to a CellML model variable in this CellML environment. + INTERFACE cmfe_CellML_CreateFieldToCellMLMap + MODULE PROCEDURE cmfe_CellML_CreateFieldToCellMLMapNumberC + MODULE PROCEDURE cmfe_CellML_CreateFieldToCellMLMapObjC + MODULE PROCEDURE cmfe_CellML_CreateFieldToCellMLMapNumberVS + MODULE PROCEDURE cmfe_CellML_CreateFieldToCellMLMapObjVS + END INTERFACE cmfe_CellML_CreateFieldToCellMLMap + + !>Finishes the creation of a CellML environment. \see OpenCMISS::Iron::cmfe_CellML_CreateStart + INTERFACE cmfe_CellML_CreateFinish + MODULE PROCEDURE cmfe_CellML_CreateFinishNumber + MODULE PROCEDURE cmfe_CellML_CreateFinishObj + END INTERFACE cmfe_CellML_CreateFinish + + !>Starts the creation of a CellML environment. \see OpenCMISS::Iron::cmfe_CellML_CreateFinish + INTERFACE cmfe_CellML_CreateStart + MODULE PROCEDURE cmfe_CellML_CreateStartNumber + MODULE PROCEDURE cmfe_CellML_CreateStartObj + END INTERFACE cmfe_CellML_CreateStart + + !>Destroys a CellML environment. + INTERFACE cmfe_CellML_Destroy + MODULE PROCEDURE cmfe_CellML_DestroyNumber + MODULE PROCEDURE cmfe_CellML_DestroyObj + END INTERFACE cmfe_CellML_Destroy + + !>Finishes the creation of field maps for a CellML environment. \see OpenCMISS::Iron::cmfe_CellML_FieldMapsCreateStart + INTERFACE cmfe_CellML_FieldMapsCreateFinish + MODULE PROCEDURE cmfe_CellML_FieldMapsCreateFinishNumber + MODULE PROCEDURE cmfe_CellML_FieldMapsCreateFinishObj + END INTERFACE cmfe_CellML_FieldMapsCreateFinish + + !>Starts the creation of field maps for a CellML environment. \see OpenCMISS::Iron::cmfe_CellML_FieldMapsCreateFinish + INTERFACE cmfe_CellML_FieldMapsCreateStart + MODULE PROCEDURE cmfe_CellML_FieldMapsCreateStartNumber + MODULE PROCEDURE cmfe_CellML_FieldMapsCreateStartObj + END INTERFACE cmfe_CellML_FieldMapsCreateStart + + !>Imports the specified CellML model into a CellML models environment. + INTERFACE cmfe_CellML_ModelImport + MODULE PROCEDURE cmfe_CellML_ModelImportNumberC + MODULE PROCEDURE cmfe_CellML_ModelImportObjC + MODULE PROCEDURE cmfe_CellML_ModelImportNumberVS + MODULE PROCEDURE cmfe_CellML_ModelImportObjVS + END INTERFACE cmfe_CellML_ModelImport + + !>Finishes the creation of CellML models field. \see OpenCMISS::Iron::cmfe_CellML_ModelsFieldCreateStart + INTERFACE cmfe_CellML_ModelsFieldCreateFinish + MODULE PROCEDURE cmfe_CellML_ModelsFieldCreateFinishNumber + MODULE PROCEDURE cmfe_CellML_ModelsFieldCreateFinishObj + END INTERFACE cmfe_CellML_ModelsFieldCreateFinish + + !>Starts the creation of CellML models field. \see OpenCMISS::Iron::cmfe_CellML_ModelsFieldCreateFinish + INTERFACE cmfe_CellML_ModelsFieldCreateStart + MODULE PROCEDURE cmfe_CellML_ModelsFieldCreateStartNumber + MODULE PROCEDURE cmfe_CellML_ModelsFieldCreateStartObj + END INTERFACE cmfe_CellML_ModelsFieldCreateStart + + !>Returns the CellML models field for a CellML environment. + INTERFACE cmfe_CellML_ModelsFieldGet + MODULE PROCEDURE cmfe_CellML_ModelsFieldGetNumber + MODULE PROCEDURE cmfe_CellML_ModelsFieldGetObj + END INTERFACE cmfe_CellML_ModelsFieldGet + + !>Finishes the creation of CellML state field. \see OpenCMISS::Iron::cmfe_CellML_StateFieldCreateStart + INTERFACE cmfe_CellML_StateFieldCreateFinish + MODULE PROCEDURE cmfe_CellML_StateFieldCreateFinishNumber + MODULE PROCEDURE cmfe_CellML_StateFieldCreateFinishObj + END INTERFACE cmfe_CellML_StateFieldCreateFinish + + !>Starts the creation of CellML state field. \see OpenCMISS::Iron::cmfe_CellML_StateFieldCreateFinish + INTERFACE cmfe_CellML_StateFieldCreateStart + MODULE PROCEDURE cmfe_CellML_StateFieldCreateStartNumber + MODULE PROCEDURE cmfe_CellML_StateFieldCreateStartObj + END INTERFACE cmfe_CellML_StateFieldCreateStart + + !>Returns the CellML state field for a CellML environment. + INTERFACE cmfe_CellML_StateFieldGet + MODULE PROCEDURE cmfe_CellML_StateFieldGetNumber + MODULE PROCEDURE cmfe_CellML_StateFieldGetObj + END INTERFACE cmfe_CellML_StateFieldGet + + !>Returns the component for a given CellML field that corresponds to the specified CellML variable ID. + INTERFACE cmfe_CellML_FieldComponentGet + MODULE PROCEDURE cmfe_CellML_FieldComponentGetNumberC + MODULE PROCEDURE cmfe_CellML_FieldComponentGetObjC + MODULE PROCEDURE cmfe_CellML_FieldComponentGetNumberVS + MODULE PROCEDURE cmfe_CellML_FieldComponentGetObjVS + END INTERFACE cmfe_CellML_FieldComponentGet + + !>Finishes the creation of CellML intermediate field. \see OpenCMISS::Iron::cmfe_CellML_IntermediateFieldCreateStart + INTERFACE cmfe_CellML_IntermediateFieldCreateFinish + MODULE PROCEDURE cmfe_CellML_IntermediateFieldCreateFinishNumber + MODULE PROCEDURE cmfe_CellML_IntermediateFieldCreateFinishObj + END INTERFACE cmfe_CellML_IntermediateFieldCreateFinish + + !>Starts the creation of CellML intermediate field. \see OpenCMISS::Iron::cmfe_CellML_IntermediateFieldCreateFinish + INTERFACE cmfe_CellML_IntermediateFieldCreateStart + MODULE PROCEDURE cmfe_CellML_IntermediateFieldCreateStartNumber + MODULE PROCEDURE cmfe_CellML_IntermediateFieldCreateStartObj + END INTERFACE cmfe_CellML_IntermediateFieldCreateStart + + !>Returns the CellML intermediate field for a CellML environment. + INTERFACE cmfe_CellML_IntermediateFieldGet + MODULE PROCEDURE cmfe_CellML_IntermediateFieldGetNumber + MODULE PROCEDURE cmfe_CellML_IntermediateFieldGetObj + END INTERFACE cmfe_CellML_IntermediateFieldGet + + !>Finishes the creation of CellML parameters field. \see OpenCMISS::Iron::cmfe_CellML_ParametersFieldCreateStart + INTERFACE cmfe_CellML_ParametersFieldCreateFinish + MODULE PROCEDURE cmfe_CellML_ParametersFieldCreateFinishNumber + MODULE PROCEDURE cmfe_CellML_ParametersFieldCreateFinishObj + END INTERFACE cmfe_CellML_ParametersFieldCreateFinish + + !>Starts the creation of CellML parameters field. \see OpenCMISS::Iron::cmfe_CellML_ParametersFieldCreateFinish + INTERFACE cmfe_CellML_ParametersFieldCreateStart + MODULE PROCEDURE cmfe_CellML_ParametersFieldCreateStartNumber + MODULE PROCEDURE cmfe_CellML_ParametersFieldCreateStartObj + END INTERFACE cmfe_CellML_ParametersFieldCreateStart + + !>Returns the CellML parameters field for a CellML environment. + INTERFACE cmfe_CellML_ParametersFieldGet + MODULE PROCEDURE cmfe_CellML_ParametersFieldGetNumber + MODULE PROCEDURE cmfe_CellML_ParametersFieldGetObj + END INTERFACE cmfe_CellML_ParametersFieldGet + + !>Validate and instantiate the specified CellML environment. + INTERFACE cmfe_CellML_Generate + MODULE PROCEDURE cmfe_CellML_GenerateNumber + MODULE PROCEDURE cmfe_CellML_GenerateObj + END INTERFACE cmfe_CellML_Generate + + PUBLIC CMFE_CELLML_MODELS_FIELD,CMFE_CELLML_STATE_FIELD,CMFE_CELLML_INTERMEDIATE_FIELD,CMFE_CELLML_PARAMETERS_FIELD + + PUBLIC cmfe_CellML_VariableSetAsKnown,cmfe_CellML_VariableSetAsWanted + + PUBLIC cmfe_CellML_CreateCellMLToFieldMap,cmfe_CellML_CreateFieldToCellMLMap + + PUBLIC cmfe_CellML_CreateFinish,cmfe_CellML_CreateStart + + PUBLIC cmfe_CellML_Destroy + + PUBLIC cmfe_CellML_FieldMapsCreateStart,cmfe_CellML_FieldMapsCreateFinish - !Module parameters + PUBLIC cmfe_CellML_ModelImport - !> \addtogroup OpenCMISS_CoordinateConstants OpenCMISS::Iron::Coordinate::Constants - !> \brief Coordinate constants. - !>@{ - !> \addtogroup OpenCMISS_CoordinateSystemTypes OpenCMISS::Iron::Coordinate::SystemTypes - !> \brief Coordinate system type parameters. - !> \see OpenCMISS::Iron::Coordinate,OpenCMISS - !>@{ - INTEGER(INTG), PARAMETER :: CMFE_COORDINATE_RECTANGULAR_CARTESIAN_TYPE = COORDINATE_RECTANGULAR_CARTESIAN_TYPE !@} - !> \addtogroup OpenCMISS_CoordinateRadialInterpolations OpenCMISS::Iron::Coordinate::RadialInterpolations - !> \brief The type of radial interpolation for polar coordinate systems - !> \see OpenCMISS::Iron::Coordinate,OpenCMISS - !>@{ - INTEGER(INTG), PARAMETER :: CMFE_COORDINATE_NO_RADIAL_INTERPOLATION_TYPE = COORDINATE_NO_RADIAL_INTERPOLATION_TYPE !@} - !>@} - - !Module types - - !Module variables - - !Interfaces - - !>Finishes the creation of a coordinate system. \see OpenCMISS::Iron::cmfe_CoordinateSystem_CreateStart - INTERFACE cmfe_CoordinateSystem_CreateFinish - MODULE PROCEDURE cmfe_CoordinateSystem_CreateFinishNumber - MODULE PROCEDURE cmfe_CoordinateSystem_CreateFinishObj - END INTERFACE cmfe_CoordinateSystem_CreateFinish - - !>Starts the creation of a coordinate system. \see OpenCMISS::Iron::cmfe_CoordinateSystem_CreateFinish - INTERFACE cmfe_CoordinateSystem_CreateStart - MODULE PROCEDURE cmfe_CoordinateSystem_CreateStartNumber - MODULE PROCEDURE cmfe_CoordinateSystem_CreateStartObj - END INTERFACE cmfe_CoordinateSystem_CreateStart - - !>Destorys a coordinate system. - INTERFACE cmfe_CoordinateSystem_Destroy - MODULE PROCEDURE cmfe_CoordinateSystem_DestroyNumber - MODULE PROCEDURE cmfe_CoordinateSystem_DestroyObj - END INTERFACE cmfe_CoordinateSystem_Destroy - - !>Returns the coordinate system dimension. \todo user number method \todo fix pointers - INTERFACE cmfe_CoordinateSystem_DimensionGet - MODULE PROCEDURE cmfe_CoordinateSystem_DimensionGetNumber - MODULE PROCEDURE cmfe_CoordinateSystem_DimensionGetObj - END INTERFACE cmfe_CoordinateSystem_DimensionGet - - !>Sets/changes the coordinate system dimension. \todo fix pointers - INTERFACE cmfe_CoordinateSystem_DimensionSet - MODULE PROCEDURE cmfe_CoordinateSystem_DimensionSetNumber - MODULE PROCEDURE cmfe_CoordinateSystem_DimensionSetObj - END INTERFACE cmfe_CoordinateSystem_DimensionSet - - !>Returns the coordinate system focus. \todo user number method \todo fix pointers - INTERFACE cmfe_CoordinateSystem_FocusGet - MODULE PROCEDURE cmfe_CoordinateSystem_FocusGetNumber - MODULE PROCEDURE cmfe_CoordinateSystem_FocusGetObj - END INTERFACE cmfe_CoordinateSystem_FocusGet - - !>Sets/changes the coordinate system focus. \todo user number method \todo fix pointers - INTERFACE cmfe_CoordinateSystem_FocusSet - MODULE PROCEDURE cmfe_CoordinateSystem_FocusSetNumber - MODULE PROCEDURE cmfe_CoordinateSystem_FocusSetObj - END INTERFACE cmfe_CoordinateSystem_FocusSet - - !>Returns the coordinate system radial interpolation type. \todo user number method \todo fix pointers - INTERFACE cmfe_CoordinateSystem_RadialInterpolationGet - MODULE PROCEDURE cmfe_CoordinateSystem_RadialInterpolationGetNumber - MODULE PROCEDURE cmfe_CoordinateSystem_RadialInterpolationGetObj - END INTERFACE cmfe_CoordinateSystem_RadialInterpolationGet - - !>Sets/changes the coordinate system radial interpolation type. \todo user number method \todo fix pointers - INTERFACE cmfe_CoordinateSystem_RadialInterpolationSet - MODULE PROCEDURE cmfe_CoordinateSystem_RadialInterpolationSetNumber - MODULE PROCEDURE cmfe_CoordinateSystem_RadialInterpolationSetObj - END INTERFACE cmfe_CoordinateSystem_RadialInterpolationSet - - !>Returns the coordinate system type. \todo user number method \todo fix pointers - INTERFACE cmfe_CoordinateSystem_TypeGet - MODULE PROCEDURE cmfe_CoordinateSystem_TypeGetNumber - MODULE PROCEDURE cmfe_CoordinateSystem_TypeGetObj - END INTERFACE cmfe_CoordinateSystem_TypeGet - - !>Sets/changes the coordinate system type. \todo user number method \todo fix pointers - INTERFACE cmfe_CoordinateSystem_TypeSet - MODULE PROCEDURE cmfe_CoordinateSystem_TypeSetNumber - MODULE PROCEDURE cmfe_CoordinateSystem_TypeSetObj - END INTERFACE cmfe_CoordinateSystem_TypeSet - - !>Returns the coordinate system orign. - INTERFACE cmfe_CoordinateSystem_OriginGet - MODULE PROCEDURE cmfe_CoordinateSystem_OriginGetNumber - MODULE PROCEDURE cmfe_CoordinateSystem_OriginGetObj - END INTERFACE cmfe_CoordinateSystem_OriginGet - - !>Sets/changes the coordinate system orign. - INTERFACE cmfe_CoordinateSystem_OriginSet - MODULE PROCEDURE cmfe_CoordinateSystem_OriginSetNumber - MODULE PROCEDURE cmfe_CoordinateSystem_OriginSetObj - END INTERFACE cmfe_CoordinateSystem_OriginSet - - !>Returns the coordinate system orientation. - INTERFACE cmfe_CoordinateSystem_OrientationGet - MODULE PROCEDURE cmfe_CoordinateSystem_OrientationGetNumber - MODULE PROCEDURE cmfe_CoordinateSystem_OrientationGetObj - END INTERFACE cmfe_CoordinateSystem_OrientationGet - - !>Sets/changes the coordinate system orientation. - INTERFACE cmfe_CoordinateSystem_OrientationSet - MODULE PROCEDURE cmfe_CoordinateSystem_OrientationSetNumber - MODULE PROCEDURE cmfe_CoordinateSystem_OrientationSetObj - END INTERFACE cmfe_CoordinateSystem_OrientationSet - - PUBLIC CMFE_COORDINATE_RECTANGULAR_CARTESIAN_TYPE,CMFE_COORDINATE_CYLINDRICAL_POLAR_TYPE, & - & CMFE_COORDINATE_SPHERICAL_POLAR_TYPE, & - & CMFE_COORDINATE_PROLATE_SPHEROIDAL_TYPE,CMFE_COORDINATE_OBLATE_SPHEROIDAL_TYPE - - PUBLIC CMFE_COORDINATE_NO_RADIAL_INTERPOLATION_TYPE,CMFE_COORDINATE_RADIAL_INTERPOLATION_TYPE, & - & CMFE_COORDINATE_RADIAL_SQUARED_INTERPOLATION_TYPE,CMFE_COORDINATE_RADIAL_CUBED_INTERPOLATION_TYPE - - PUBLIC cmfe_CoordinateSystem_CreateFinish,cmfe_CoordinateSystem_CreateStart - - PUBLIC cmfe_CoordinateSystem_Destroy - - PUBLIC cmfe_CoordinateSystem_DimensionGet,cmfe_CoordinateSystem_DimensionSet - - PUBLIC cmfe_CoordinateSystem_FocusGet,cmfe_CoordinateSystem_FocusSet - - PUBLIC cmfe_CoordinateSystem_RadialInterpolationGet,cmfe_CoordinateSystem_RadialInterpolationSet - - PUBLIC cmfe_CoordinateSystem_TypeGet,cmfe_CoordinateSystem_TypeSet - - PUBLIC cmfe_CoordinateSystem_OriginGet,cmfe_CoordinateSystem_OriginSet - - PUBLIC cmfe_CoordinateSystem_OrientationGet,cmfe_CoordinateSystem_OrientationSet + PUBLIC cmfe_CellML_ModelsFieldCreateFinish,cmfe_CellML_ModelsFieldCreateStart,cmfe_CellML_ModelsFieldGet -!!================================================================================================================================== -!! -!! DataPointsRoutines -!! -!!================================================================================================================================== + PUBLIC cmfe_CellML_StateFieldCreateFinish,cmfe_CellML_StateFieldCreateStart,cmfe_CellML_StateFieldGet - !Module parameters + PUBLIC cmfe_CellML_FieldComponentGet - !Module types + PUBLIC cmfe_CellML_IntermediateFieldCreateFinish,cmfe_CellML_IntermediateFieldCreateStart - !Module variables + PUBLIC cmfe_CellML_IntermediateFieldGet - !Interfaces + PUBLIC cmfe_CellML_ParametersFieldCreateFinish,cmfe_CellML_ParametersFieldCreateStart,cmfe_CellML_ParametersFieldGet - !>Finishes the process of creating data points in a region. \see OpenCMISS::Iron::cmfe_DataPoints_CreateStart - INTERFACE cmfe_DataPoints_CreateFinish - MODULE PROCEDURE cmfe_DataPoints_CreateFinishNumber - MODULE PROCEDURE cmfe_DataPoints_CreateFinishObj - END INTERFACE cmfe_DataPoints_CreateFinish + PUBLIC cmfe_CellML_Generate - !>Starts the process of creating data points in a region. \see OpenCMISS::Iron::cmfe_DataPoints_CreateFinish - INTERFACE cmfe_DataPoints_CreateStart - MODULE PROCEDURE cmfe_DataPoints_CreateStartNumber - MODULE PROCEDURE cmfe_DataPoints_CreateStartObj - MODULE PROCEDURE cmfe_DataPoints_CreateStartInterfaceObj - END INTERFACE cmfe_DataPoints_CreateStart +!================================================================================================================================== +! +! Computation +! +!================================================================================================================================== + + !Module parameters + + !Module types + + !Module variables + + !Interfaces + + !>Returns the number of world nodes in the computation environment + INTERFACE cmfe_ComputationEnvironment_NumberOfWorldNodesGet + MODULE PROCEDURE cmfe_ComputationEnvironment_NumberOfWorldNodesGetNumber + MODULE PROCEDURE cmfe_ComputationEnvironment_NumberOfWorldNodesGetObj + END INTERFACE cmfe_ComputationEnvironment_NumberOfWorldNodesGet + + !>Returns the world communicator for the computation environment + INTERFACE cmfe_ComputationEnvironment_WorldCommunicatorGet + MODULE PROCEDURE cmfe_ComputationEnvironment_WorldCommunicatorGetNumber + MODULE PROCEDURE cmfe_ComputationEnvironment_WorldCommunicatorGetObj + END INTERFACE cmfe_ComputationEnvironment_WorldCommunicatorGet + + !>Returns the world node number for the computation environment + INTERFACE cmfe_ComputationEnvironment_WorldNodeNumberGet + MODULE PROCEDURE cmfe_ComputationEnvironment_WorldNodeNumberGetNumber + MODULE PROCEDURE cmfe_ComputationEnvironment_WorldNodeNumberGetObj + END INTERFACE cmfe_ComputationEnvironment_WorldNodeNumberGet + + !>Returns the world work group for the computation environment + INTERFACE cmfe_ComputationEnvironment_WorldWorkGroupGet + MODULE PROCEDURE cmfe_ComputationEnvironment_WorldWorkGroupGetNumber + MODULE PROCEDURE cmfe_ComputationEnvironment_WorldWorkGroupGetObj + END INTERFACE cmfe_ComputationEnvironment_WorldWorkGroupGet + + !>Starts the creation of a work group + INTERFACE cmfe_WorkGroup_CreateStart + MODULE PROCEDURE cmfe_WorkGroup_CreateStartNumber + MODULE PROCEDURE cmfe_WorkGroup_CreateStartObj + END INTERFACE cmfe_WorkGroup_CreateStart + + !>Finishes the creation of a work group + INTERFACE cmfe_WorkGroup_CreateFinish + MODULE PROCEDURE cmfe_WorkGroup_CreateFinishNumber + MODULE PROCEDURE cmfe_WorkGroup_CreateFinishObj + END INTERFACE cmfe_WorkGroup_CreateFinish + + !>Destroys a work group + INTERFACE cmfe_WorkGroup_Destroy + MODULE PROCEDURE cmfe_WorkGroup_DestroyNumber + MODULE PROCEDURE cmfe_WorkGroup_DestroyObj + END INTERFACE cmfe_WorkGroup_Destroy + + !>Gets the group communicator for a work group + INTERFACE cmfe_WorkGroup_GroupCommunicatorGet + MODULE PROCEDURE cmfe_WorkGroup_GroupCommunicatorGetNumber + MODULE PROCEDURE cmfe_WorkGroup_GroupCommunicatorGetObj + END INTERFACE cmfe_WorkGroup_GroupCommunicatorGet + + !>Returns the label of a work group. + INTERFACE cmfe_WorkGroup_LabelGet + MODULE PROCEDURE cmfe_WorkGroup_LabelGetCNumber + MODULE PROCEDURE cmfe_WorkGroup_LabelGetCObj + MODULE PROCEDURE cmfe_WorkGroup_LabelGetVSNumber + MODULE PROCEDURE cmfe_WorkGroup_LabelGetVSObj + END INTERFACE cmfe_WorkGroup_LabelGet + + !>Sets/changes the label of a work group. + INTERFACE cmfe_WorkGroup_LabelSet + MODULE PROCEDURE cmfe_WorkGroup_LabelSetCNumber + MODULE PROCEDURE cmfe_WorkGroup_LabelSetCObj + MODULE PROCEDURE cmfe_WorkGroup_LabelSetVSNumber + MODULE PROCEDURE cmfe_WorkGroup_LabelSetVSObj + END INTERFACE cmfe_WorkGroup_LabelSet + + !>Gets the group node number in a work group + INTERFACE cmfe_WorkGroup_GroupNodeNumberGet + MODULE PROCEDURE cmfe_WorkGroup_GroupNodeNumberGetNumber + MODULE PROCEDURE cmfe_WorkGroup_GroupNodeNumberGetObj + END INTERFACE cmfe_WorkGroup_GroupNodeNumberGet + + !>Gets the number of group nodes in a work group + INTERFACE cmfe_WorkGroup_NumberOfGroupNodesGet + MODULE PROCEDURE cmfe_WorkGroup_NumberOfGroupNodesGetNumber + MODULE PROCEDURE cmfe_WorkGroup_NumberOfGroupNodesGetObj + END INTERFACE cmfe_WorkGroup_NumberOfGroupNodesGet + + !>Sets/changes the number of group nodes in a work group + INTERFACE cmfe_WorkGroup_NumberOfGroupNodesSet + MODULE PROCEDURE cmfe_WorkGroup_NumberOfGroupNodesSetNumber + MODULE PROCEDURE cmfe_WorkGroup_NumberOfGroupNodesSetObj + END INTERFACE cmfe_WorkGroup_NumberOfGroupNodesSet + + PUBLIC cmfe_ComputationEnvironment_NumberOfWorldNodesGet - !>Destroys data points. - INTERFACE cmfe_DataPoints_Destroy - MODULE PROCEDURE cmfe_DataPoints_DestroyNumber - MODULE PROCEDURE cmfe_DataPoints_DestroyObj - END INTERFACE cmfe_DataPoints_Destroy + PUBLIC cmfe_ComputationEnvironment_WorldCommunicatorGet + + PUBLIC cmfe_ComputationEnvironment_WorldNodeNumberGet - !>Returns the number of data points - INTERFACE cmfe_DataPoints_NumberOfDataPointsGet - MODULE PROCEDURE cmfe_DataPoints_NumberOfDataPointsGetNumber - MODULE PROCEDURE cmfe_DataPoints_NumberOfDataPointsGetObj - END INTERFACE cmfe_DataPoints_NumberOfDataPointsGet - - !>Returns the label for a data point identified by a given user number. - INTERFACE cmfe_DataPoints_LabelGet - MODULE PROCEDURE cmfe_DataPoints_LabelGetCNumber - MODULE PROCEDURE cmfe_DataPoints_LabelGetCObj - MODULE PROCEDURE cmfe_DataPoints_LabelGetVSNumber - MODULE PROCEDURE cmfe_DataPoints_LabelGetVSObj - END INTERFACE cmfe_DataPoints_LabelGet - - !>Sets/changes the label for a data point identified by a given user number. - INTERFACE cmfe_DataPoints_LabelSet - MODULE PROCEDURE cmfe_DataPoints_LabelSetCNumber - MODULE PROCEDURE cmfe_DataPoints_LabelSetCObj - MODULE PROCEDURE cmfe_DataPoints_LabelSetVSNumber - MODULE PROCEDURE cmfe_DataPoints_LabelSetVSObj - END INTERFACE cmfe_DataPoints_LabelSet - - !>Returns the user number for a data point identified by a given global number. - INTERFACE cmfe_DataPoints_UserNumberGet - MODULE PROCEDURE cmfe_DataPoints_UserNumberGetNumber - MODULE PROCEDURE cmfe_DataPoints_UserNumberGetObj - END INTERFACE cmfe_DataPoints_UserNumberGet - - !>Sets/changes the user number for a data point identified by a given global number. - INTERFACE cmfe_DataPoints_UserNumberSet - MODULE PROCEDURE cmfe_DataPoints_UserNumberSetNumber - MODULE PROCEDURE cmfe_DataPoints_UserNumberSetObj - END INTERFACE cmfe_DataPoints_UserNumberSet - - !>Returns the position for a data point identified by a given user number. - INTERFACE cmfe_DataPoints_PositionGet - MODULE PROCEDURE cmfe_DataPoints_PositionGetNumber - MODULE PROCEDURE cmfe_DataPoints_PositionGetObj - END INTERFACE cmfe_DataPoints_PositionGet - - !>Sets/changes the position for a data point identified by a given user number. - INTERFACE cmfe_DataPoints_PositionSet - MODULE PROCEDURE cmfe_DataPoints_PositionSetNumber - MODULE PROCEDURE cmfe_DataPoints_PositionSetObj - END INTERFACE cmfe_DataPoints_PositionSet - - !>Returns the weights for a data point identified by a given user number. - INTERFACE cmfe_DataPoints_WeightsGet - MODULE PROCEDURE cmfe_DataPoints_WeightsGetNumber - MODULE PROCEDURE cmfe_DataPoints_WeightsGetObj - END INTERFACE cmfe_DataPoints_WeightsGet - - !>Sets/changes the weights for a data point identified by a given user number. - INTERFACE cmfe_DataPoints_WeightsSet - MODULE PROCEDURE cmfe_DataPoints_WeightsSetNumber - MODULE PROCEDURE cmfe_DataPoints_WeightsSetObj - END INTERFACE cmfe_DataPoints_WeightsSet - - PUBLIC cmfe_DataPoints_CreateFinish,cmfe_DataPoints_CreateStart - - PUBLIC cmfe_DataPoints_Destroy - - PUBLIC cmfe_DataPoints_NumberOfDataPointsGet - - PUBLIC cmfe_DataPoints_LabelGet,cmfe_DataPoints_LabelSet - - PUBLIC cmfe_DataPoints_UserNumberGet,cmfe_DataPoints_UserNumberSet - - PUBLIC cmfe_DataPoints_PositionGet,cmfe_DataPoints_PositionSet - - PUBLIC cmfe_DataPoints_WeightsGet,cmfe_DataPoints_WeightsSet + PUBLIC cmfe_ComputationEnvironment_WorldWorkGroupGet -!!================================================================================================================================== -!! -!! DataProjectionRoutines -!! -!!================================================================================================================================== + PUBLIC cmfe_WorkGroup_CreateStart - !Module parameters + PUBLIC cmfe_WorkGroup_CreateFinish - !> \addtogroup OpenCMISS_DataProjectionConstants OpenCMISS::Iron::DataProjection::Constants - !> \brief DataProjection constants. - !>@{ - !> \addtogroup OpenCMISS_DataProjectionProjectionTypes OpenCMISS::Iron::DataProjection::ProjectionTypes - !> \brief Data Projection types - !> \see OpenCMISS::Iron::DataProjection,OpenCMISS - !>@{ - INTEGER(INTG), PARAMETER :: CMFE_DATA_PROJECTION_BOUNDARY_LINES_PROJECTION_TYPE = DATA_PROJECTION_BOUNDARY_LINES_PROJECTION_TYPE!@} - !> \addtogroup OpenCMISS_DataProjectionExitTags OpenCMISS::Iron::DataProjection::DataProjectionExitTags - !> \brief Datapoint projection exit tags - !> \see OpenCMISS::Iron::DataProjection,OpenCMISS - !>@{ - INTEGER(INTG), PARAMETER :: CMFE_DATA_PROJECTION_CANCELLED = DATA_PROJECTION_CANCELLED !@} - !> \addtogroup OpenCMISS_DataProjectionDistanceRelations OpenCMISS::Iron::DataProjection::DataProjectionDistanceRelations - !> \brief Datapoint projection distance relations to select data points based on distance. - !> \see OpenCMISS::Iron::DataProjection,OpenCMISS - !>@{ - INTEGER(INTG), PARAMETER :: CMFE_DATA_PROJECTION_DISTANCE_GREATER = DATA_PROJECTION_DISTANCE_GREATER !@} - !>@} - - !Module types - - !Module variables - - !Interfaces - - !>Returns the absolute tolerance for a data projection. - INTERFACE cmfe_DataProjection_AbsoluteToleranceGet - MODULE PROCEDURE cmfe_DataProjection_AbsoluteToleranceGetNumber - MODULE PROCEDURE cmfe_DataProjection_AbsoluteToleranceGetObj - END INTERFACE cmfe_DataProjection_AbsoluteToleranceGet - - !>Sets/changes the absolute tolerance for a data projection. - INTERFACE cmfe_DataProjection_AbsoluteToleranceSet - MODULE PROCEDURE cmfe_DataProjection_AbsoluteToleranceSetNumber - MODULE PROCEDURE cmfe_DataProjection_AbsoluteToleranceSetObj - END INTERFACE cmfe_DataProjection_AbsoluteToleranceSet - - !>Finishes the creation of a new data projection. \see OpenCMISS::Iron::cmfe_DataProjection_CreateStart - INTERFACE cmfe_DataProjection_CreateFinish - MODULE PROCEDURE cmfe_DataProjection_CreateFinishNumber - MODULE PROCEDURE cmfe_DataProjection_CreateFinishObj - END INTERFACE cmfe_DataProjection_CreateFinish - - !>Starts the creation of a new data projection. \see OpenCMISS::Iron::cmfe_DataProjection_CreateFinish - INTERFACE cmfe_DataProjection_CreateStart - MODULE PROCEDURE cmfe_DataProjection_CreateStartNumber - MODULE PROCEDURE cmfe_DataProjection_CreateStartObj - END INTERFACE cmfe_DataProjection_CreateStart - - !>Destroy a data projection. - INTERFACE cmfe_DataProjection_Destroy - MODULE PROCEDURE cmfe_DataProjection_DestroyNumber - MODULE PROCEDURE cmfe_DataProjection_DestroyObj - END INTERFACE cmfe_DataProjection_Destroy - - !>Evaluate the data points position in a field based on data projection - INTERFACE cmfe_DataProjection_DataPointsPositionEvaluate - MODULE PROCEDURE cmfe_DataProjection_DataPointsPositionEvaluateRegionNumber - MODULE PROCEDURE cmfe_DataProjection_DataPointsPositionEvaluateInterfaceNumber - MODULE PROCEDURE cmfe_DataProjection_DataPointsPositionEvaluateObj - END INTERFACE cmfe_DataProjection_DataPointsPositionEvaluate - - !>Starts the evluation of data projection on the geometric field. - INTERFACE cmfe_DataProjection_DataPointsProjectionEvaluate - MODULE PROCEDURE cmfe_DataProjection_DataPointsProjectionEvaluateNumber - MODULE PROCEDURE cmfe_DataProjection_DataPointsProjectionEvaluateObj - END INTERFACE cmfe_DataProjection_DataPointsProjectionEvaluate - - !>Returns the maximum iteration update for a data projection. - INTERFACE cmfe_DataProjection_MaximumIterationUpdateGet - MODULE PROCEDURE cmfe_DataProjection_MaximumIterationUpdateGetNumber - MODULE PROCEDURE cmfe_DataProjection_MaximumIterationUpdateGetObj - END INTERFACE cmfe_DataProjection_MaximumIterationUpdateGet - - !>Sets/changes the maximum iteration update for a data projection. - INTERFACE cmfe_DataProjection_MaximumIterationUpdateSet - MODULE PROCEDURE cmfe_DataProjection_MaximumIterationUpdateSetNumber - MODULE PROCEDURE cmfe_DataProjection_MaximumIterationUpdateSetObj - END INTERFACE cmfe_DataProjection_MaximumIterationUpdateSet - - !>Returns the maximum number of iterations for a data projection. - INTERFACE cmfe_DataProjection_MaximumNumberOfIterationsGet - MODULE PROCEDURE cmfe_DataProjection_MaximumNumberOfIterationsGetNumber - MODULE PROCEDURE cmfe_DataProjection_MaximumNumberOfIterationsGetObj - END INTERFACE cmfe_DataProjection_MaximumNumberOfIterationsGet - - !>Sets/changes the maximum number of iterations for a data projection. - INTERFACE cmfe_DataProjection_MaximumNumberOfIterationsSet - MODULE PROCEDURE cmfe_DataProjection_MaximumNumberOfIterationsSetNumber - MODULE PROCEDURE cmfe_DataProjection_MaximumNumberOfIterationsSetObj - END INTERFACE cmfe_DataProjection_MaximumNumberOfIterationsSet - - !>Returns the number of closest elements for a data projection. - INTERFACE cmfe_DataProjection_NumberOfClosestElementsGet - MODULE PROCEDURE cmfe_DataProjection_NumberOfClosestElementsGetNumber - MODULE PROCEDURE cmfe_DataProjection_NumberOfClosestElementsGetObj - END INTERFACE cmfe_DataProjection_NumberOfClosestElementsGet - - !>Sets/changes the number of closest elements for a data projection. - INTERFACE cmfe_DataProjection_NumberOfClosestElementsSet - MODULE PROCEDURE cmfe_DataProjection_NumberOfClosestElementsSetNumber - MODULE PROCEDURE cmfe_DataProjection_NumberOfClosestElementsSetObj - END INTERFACE cmfe_DataProjection_NumberOfClosestElementsSet - - !>Cancel the data projection for data points based on the data point user numbers. - INTERFACE cmfe_DataProjection_ProjectionCancelByDataPoints - MODULE PROCEDURE cmfe_DataProjection_ProjectionCancelByDataPointsRegionNumber0 - MODULE PROCEDURE cmfe_DataProjection_ProjectionCancelByDataPointsRegionNumber1 - MODULE PROCEDURE cmfe_DataProjection_ProjectionCancelByDataPointsInterNum0 - MODULE PROCEDURE cmfe_DataProjection_ProjectionCancelByDataPointsInterNum1 - MODULE PROCEDURE cmfe_DataProjection_ProjectionCancelByDataPointsObj0 - MODULE PROCEDURE cmfe_DataProjection_ProjectionCancelByDataPointsObj1 - END INTERFACE cmfe_DataProjection_ProjectionCancelByDataPoints - - !>Cancel the data projection for data points based on the projection distance. - INTERFACE cmfe_DataProjection_ProjectionCancelByDistance - MODULE PROCEDURE cmfe_DataProjection_ProjectionCancelByDistanceRegionNumber - MODULE PROCEDURE cmfe_DataProjection_ProjectionCancelByDistanceInterfaceNumber - MODULE PROCEDURE cmfe_DataProjection_ProjectionCancelByDistanceObj - END INTERFACE cmfe_DataProjection_ProjectionCancelByDistance - - !>Cancel the data projection for data points based on the projection exit tag. - INTERFACE cmfe_DataProjection_ProjectionCancelByExitTags - MODULE PROCEDURE cmfe_DataProjection_ProjectionCancelByExitTagsRegionNumber0 - MODULE PROCEDURE cmfe_DataProjection_ProjectionCancelByExitTagsRegionNumber1 - MODULE PROCEDURE cmfe_DataProjection_ProjectionCancelByExitTagsInterfaceNumber0 - MODULE PROCEDURE cmfe_DataProjection_ProjectionCancelByExitTagsInterfaceNumber1 - MODULE PROCEDURE cmfe_DataProjection_ProjectionCancelByExitTagsObj0 - MODULE PROCEDURE cmfe_DataProjection_ProjectionCancelByExitTagsObj1 - END INTERFACE cmfe_DataProjection_ProjectionCancelByExitTags - - !>Set the data projection candidate elements for an all elements projection type. - INTERFACE cmfe_DataProjection_ProjectionCandidateElementsSet - MODULE PROCEDURE cmfe_DataProjection_ProjectionCandidateElementsSetRegionNumber - MODULE PROCEDURE cmfe_DataProjection_ProjectionCandidateElementsSetIntNum - MODULE PROCEDURE cmfe_DataProjection_ProjectionCandidateElementsSetObj - END INTERFACE cmfe_DataProjection_ProjectionCandidateElementsSet - - !>Set the data projection candidate elements for data points for an all elements projection type. - INTERFACE cmfe_DataProjection_ProjectionDataCandidateElementsSet - MODULE PROCEDURE cmfe_DataProjection_ProjectionDataCandidateElementsSetRegNum00 - MODULE PROCEDURE cmfe_DataProjection_ProjectionDataCandidateElementsSetRegNum01 - MODULE PROCEDURE cmfe_DataProjection_ProjectionDataCandidateElementsSetRegNum10 - MODULE PROCEDURE cmfe_DataProjection_ProjectionDataCandidateElementsSetRegNum11 - MODULE PROCEDURE cmfe_DataProjection_ProjectionDataCandidateElementsSetIntNum00 - MODULE PROCEDURE cmfe_DataProjection_ProjectionDataCandidateElementsSetIntNum01 - MODULE PROCEDURE cmfe_DataProjection_ProjectionDataCandidateElementsSetIntNum10 - MODULE PROCEDURE cmfe_DataProjection_ProjectionDataCandidateElementsSetIntNum11 - MODULE PROCEDURE cmfe_DataProjection_ProjectionDataCandidateElementsSetObj00 - MODULE PROCEDURE cmfe_DataProjection_ProjectionDataCandidateElementsSetObj01 - MODULE PROCEDURE cmfe_DataProjection_ProjectionDataCandidateElementsSetObj10 - MODULE PROCEDURE cmfe_DataProjection_ProjectionDataCandidateElementsSetObj11 - END INTERFACE cmfe_DataProjection_ProjectionDataCandidateElementsSet - - !>Set the data projection candidate faces for a boundary faces projection type. - INTERFACE cmfe_DataProjection_ProjectionCandidateFacesSet - MODULE PROCEDURE cmfe_DataProjection_ProjectionCandidateFacesSetRegionNumber - MODULE PROCEDURE cmfe_DataProjection_ProjectionCandidateFacesSetInterfaceNumber - MODULE PROCEDURE cmfe_DataProjection_ProjectionCandidateFacesSetObj - END INTERFACE cmfe_DataProjection_ProjectionCandidateFacesSet - - !>Set the data projection candidate faces for data points for a boundary faces projection type. - INTERFACE cmfe_DataProjection_ProjectionDataCandidateFacesSet - MODULE PROCEDURE cmfe_DataProjection_ProjectionDataCandidateFacesSetRegNum000 - MODULE PROCEDURE cmfe_DataProjection_ProjectionDataCandidateFacesSetRegNum011 - MODULE PROCEDURE cmfe_DataProjection_ProjectionDataCandidateFacesSetRegNum100 - MODULE PROCEDURE cmfe_DataProjection_ProjectionDataCandidateFacesSetRegNum111 - MODULE PROCEDURE cmfe_DataProjection_ProjectionDataCandidateFacesSetIntNum000 - MODULE PROCEDURE cmfe_DataProjection_ProjectionDataCandidateFacesSetIntNum011 - MODULE PROCEDURE cmfe_DataProjection_ProjectionDataCandidateFacesSetIntNum100 - MODULE PROCEDURE cmfe_DataProjection_ProjectionDataCandidateFacesSetIntNum111 - MODULE PROCEDURE cmfe_DataProjection_ProjectionDataCandidateFacesSetObj000 - MODULE PROCEDURE cmfe_DataProjection_ProjectionDataCandidateFacesSetObj011 - MODULE PROCEDURE cmfe_DataProjection_ProjectionDataCandidateFacesSetObj100 - MODULE PROCEDURE cmfe_DataProjection_ProjectionDataCandidateFacesSetObj111 - END INTERFACE cmfe_DataProjection_ProjectionDataCandidateFacesSet - - !>Set the data projection candidate lines for a boundary lines projection type. - INTERFACE cmfe_DataProjection_ProjectionCandidateLinesSet - MODULE PROCEDURE cmfe_DataProjection_ProjectionCandidateLinesSetRegionNumber - MODULE PROCEDURE cmfe_DataProjection_ProjectionCandidateLinesSetInterfaceNumber - MODULE PROCEDURE cmfe_DataProjection_ProjectionCandidateLinesSetObj - END INTERFACE cmfe_DataProjection_ProjectionCandidateLinesSet - - !>Set the data projection candidate lines for data points for a boundary lines projection type. - INTERFACE cmfe_DataProjection_ProjectionDataCandidateLinesSet - MODULE PROCEDURE cmfe_DataProjection_ProjectionDataCandidateLinesSetRegNum000 - MODULE PROCEDURE cmfe_DataProjection_ProjectionDataCandidateLinesSetRegNum011 - MODULE PROCEDURE cmfe_DataProjection_ProjectionDataCandidateLinesSetRegNum100 - MODULE PROCEDURE cmfe_DataProjection_ProjectionDataCandidateLinesSetRegNum111 - MODULE PROCEDURE cmfe_DataProjection_ProjectionDataCandidateLinesSetIntNum000 - MODULE PROCEDURE cmfe_DataProjection_ProjectionDataCandidateLinesSetIntNum011 - MODULE PROCEDURE cmfe_DataProjection_ProjectionDataCandidateLinesSetIntNum100 - MODULE PROCEDURE cmfe_DataProjection_ProjectionDataCandidateLinesSetIntNum111 - MODULE PROCEDURE cmfe_DataProjection_ProjectionDataCandidateLinesSetObj000 - MODULE PROCEDURE cmfe_DataProjection_ProjectionDataCandidateLinesSetObj011 - MODULE PROCEDURE cmfe_DataProjection_ProjectionDataCandidateLinesSetObj100 - MODULE PROCEDURE cmfe_DataProjection_ProjectionDataCandidateLinesSetObj111 - END INTERFACE cmfe_DataProjection_ProjectionDataCandidateLinesSet - - !>Returns the projection type for a data projection. - INTERFACE cmfe_DataProjection_ProjectionTypeGet - MODULE PROCEDURE cmfe_DataProjection_ProjectionTypeGetNumber - MODULE PROCEDURE cmfe_DataProjection_ProjectionTypeGetObj - END INTERFACE cmfe_DataProjection_ProjectionTypeGet - - !>Sets/changes the projection type for a data projection. - INTERFACE cmfe_DataProjection_ProjectionTypeSet - MODULE PROCEDURE cmfe_DataProjection_ProjectionTypeSetNumber - MODULE PROCEDURE cmfe_DataProjection_ProjectionTypeSetObj - END INTERFACE cmfe_DataProjection_ProjectionTypeSet - - !>Returns the relative tolerance for a data projection. - INTERFACE cmfe_DataProjection_RelativeToleranceGet - MODULE PROCEDURE cmfe_DataProjection_RelativeToleranceGetNumber - MODULE PROCEDURE cmfe_DataProjection_RelativeToleranceGetObj - END INTERFACE cmfe_DataProjection_RelativeToleranceGet - - !>Sets/changes the relative tolerance for a data projection. - INTERFACE cmfe_DataProjection_RelativeToleranceSet - MODULE PROCEDURE cmfe_DataProjection_RelativeToleranceSetNumber - MODULE PROCEDURE cmfe_DataProjection_RelativeToleranceSetObj - END INTERFACE cmfe_DataProjection_RelativeToleranceSet - - !>Returns the starting xi for a data projection. - INTERFACE cmfe_DataProjection_StartingXiGet - MODULE PROCEDURE cmfe_DataProjection_StartingXiGetNumber - MODULE PROCEDURE cmfe_DataProjection_StartingXiGetObj - END INTERFACE cmfe_DataProjection_StartingXiGet - - !>Sets/changes the starting xi for a data projection. - INTERFACE cmfe_DataProjection_StartingXiSet - MODULE PROCEDURE cmfe_DataProjection_StartingXiSetNumber - MODULE PROCEDURE cmfe_DataProjection_StartingXiSetObj - END INTERFACE cmfe_DataProjection_StartingXiSet - - !>Sets/changes the element number for a data point projection. - INTERFACE cmfe_DataProjection_ElementSet - MODULE PROCEDURE cmfe_DataProjection_ElementSetRegionNumber - MODULE PROCEDURE cmfe_DataProjection_ElementSetInterfaceNumber - MODULE PROCEDURE cmfe_DataProjection_ElementSetObj - END INTERFACE cmfe_DataProjection_ElementSet - - !>Gets the label for a data point projection. - INTERFACE cmfe_DataProjection_LabelGet - MODULE PROCEDURE cmfe_DataProjection_LabelGetCRegionNumber - MODULE PROCEDURE cmfe_DataProjection_LabelGetCInterfaceNumber - MODULE PROCEDURE cmfe_DataProjection_LabelGetCObj - MODULE PROCEDURE cmfe_DataProjection_LabelGetVSRegionNumber - MODULE PROCEDURE cmfe_DataProjection_LabelGetVSInterfaceNumber - MODULE PROCEDURE cmfe_DataProjection_LabelGetVSObj - END INTERFACE cmfe_DataProjection_LabelGet - - !>Sets/changes the label for a data point projection. - INTERFACE cmfe_DataProjection_LabelSet - MODULE PROCEDURE cmfe_DataProjection_LabelSetCRegionNumber - MODULE PROCEDURE cmfe_DataProjection_LabelSetCInterfaceNumber - MODULE PROCEDURE cmfe_DataProjection_LabelSetCObj - MODULE PROCEDURE cmfe_DataProjection_LabelSetVSRegionNumber - MODULE PROCEDURE cmfe_DataProjection_LabelSetVSInterfaceNumber - MODULE PROCEDURE cmfe_DataProjection_LabelSetVSObj - END INTERFACE cmfe_DataProjection_LabelSet - - !>Outputs an analysis of the data projection results - INTERFACE cmfe_DataProjection_ResultAnalysisOutput - MODULE PROCEDURE cmfe_DataProjection_ResultAnalysisOutputNumber - MODULE PROCEDURE cmfe_DataProjection_ResultAnalysisOutputObj - END INTERFACE cmfe_DataProjection_ResultAnalysisOutput - - !>Returns the projection distance for a data point identified by a given user number. - INTERFACE cmfe_DataProjection_ResultDistanceGet - MODULE PROCEDURE cmfe_DataProjection_ResultDistanceGetNumber - MODULE PROCEDURE cmfe_DataProjection_ResultDistanceGetObj - END INTERFACE cmfe_DataProjection_ResultDistanceGet - - !>Returns the projection element number for a data point identified by a given user number. - INTERFACE cmfe_DataProjection_ResultElementNumberGet - MODULE PROCEDURE cmfe_DataProjection_ResultElementNumberGetNumber - MODULE PROCEDURE cmfe_DataProjection_ResultElementNumberGetObj - END INTERFACE cmfe_DataProjection_ResultElementNumberGet - - !>Returns the projection element face number for a data point identified by a given user number. - INTERFACE cmfe_DataProjection_ResultElementFaceNumberGet - MODULE PROCEDURE cmfe_DataProjection_ResultElementFaceNumberGetNumber - MODULE PROCEDURE cmfe_DataProjection_ResultElementFaceNumberGetObj - END INTERFACE cmfe_DataProjection_ResultElementFaceNumberGet - - !>Returns the projection element line number for a data point identified by a given user number. - INTERFACE cmfe_DataProjection_ResultElementLineNumberGet - MODULE PROCEDURE cmfe_DataProjection_ResultElementLineNumberGetNumber - MODULE PROCEDURE cmfe_DataProjection_ResultElementLineNumberGetObj - END INTERFACE cmfe_DataProjection_ResultElementLineNumberGet - - !>Returns the projection exit tag for a data point identified by a given user number. - INTERFACE cmfe_DataProjection_ResultExitTagGet - MODULE PROCEDURE cmfe_DataProjection_ResultExitTagGetNumber - MODULE PROCEDURE cmfe_DataProjection_ResultExitTagGetObj - END INTERFACE cmfe_DataProjection_ResultExitTagGet + PUBLIC cmfe_WorkGroup_Destroy - !>Returns the maximum error for a data projection. - INTERFACE cmfe_DataProjection_ResultMaximumErrorGet - MODULE PROCEDURE cmfe_DataProjection_ResultMaximumErrorGetNumber - MODULE PROCEDURE cmfe_DataProjection_ResultMaximumErrorGetObj - END INTERFACE cmfe_DataProjection_ResultMaximumErrorGet + PUBLIC cmfe_WorkGroup_GroupCommunicatorGet - !>Returns the minimum error for a data projection. - INTERFACE cmfe_DataProjection_ResultMinimumErrorGet - MODULE PROCEDURE cmfe_DataProjection_ResultMinimumErrorGetNumber - MODULE PROCEDURE cmfe_DataProjection_ResultMinimumErrorGetObj - END INTERFACE cmfe_DataProjection_ResultMinimumErrorGet + PUBLIC cmfe_WorkGroup_GroupNodeNumberGet - !>Returns the RMS error for a data projection. - INTERFACE cmfe_DataProjection_ResultRMSErrorGet - MODULE PROCEDURE cmfe_DataProjection_ResultRMSErrorGetNumber - MODULE PROCEDURE cmfe_DataProjection_ResultRMSErrorGetObj - END INTERFACE cmfe_DataProjection_ResultRMSErrorGet + PUBLIC cmfe_WorkGroup_LabelGet,cmfe_WorkGroup_LabelSet - !>Returns the projection xi for a data point identified by a given user number. - INTERFACE cmfe_DataProjection_ResultXiGet - MODULE PROCEDURE cmfe_DataProjection_ResultXiGetNumber - MODULE PROCEDURE cmfe_DataProjection_ResultXiGetObj - END INTERFACE cmfe_DataProjection_ResultXiGet + PUBLIC cmfe_WorkGroup_NumberOfGroupNodesGet,cmfe_WorkGroup_NumberOfGroupNodesSet + +!================================================================================================================================== +! +! ContextRoutines +! +!================================================================================================================================== - !>Sets the projection xi for a data point identified by a given user number. - INTERFACE cmfe_DataProjection_ResultXiSet - MODULE PROCEDURE cmfe_DataProjection_ResultXiSetNumber - MODULE PROCEDURE cmfe_DataProjection_ResultXiSetObj - END INTERFACE cmfe_DataProjection_ResultXiSet + !Module parameters - !>Returns the projection vector for a data point identified by a given user number. - INTERFACE cmfe_DataProjection_ResultProjectionVectorGet - MODULE PROCEDURE cmfe_DataProjection_ResultProjectionVectorGetNumber - MODULE PROCEDURE cmfe_DataProjection_ResultProjectionVectorGetObj - END INTERFACE cmfe_DataProjection_ResultProjectionVectorGet + !Module types - PUBLIC CMFE_DATA_PROJECTION_BOUNDARY_LINES_PROJECTION_TYPE,CMFE_DATA_PROJECTION_BOUNDARY_FACES_PROJECTION_TYPE, & - & CMFE_DATA_PROJECTION_ALL_ELEMENTS_PROJECTION_TYPE + !Module variables - PUBLIC CMFE_DATA_PROJECTION_CANCELLED,CMFE_DATA_PROJECTION_EXIT_TAG_CONVERGED,CMFE_DATA_PROJECTION_EXIT_TAG_BOUNDS, & - & CMFE_DATA_PROJECTION_EXIT_TAG_MAX_ITERATION,CMFE_DATA_PROJECTION_EXIT_TAG_NO_ELEMENT + !Interfaces - PUBLIC CMFE_DATA_PROJECTION_DISTANCE_GREATER,CMFE_DATA_PROJECTION_DISTANCE_GREATER_EQUAL,CMFE_DATA_PROJECTION_DISTANCE_LESS, & - & CMFE_DATA_PROJECTION_DISTANCE_LESS_EQUAL + !>Gets the computation environment for an OpenCMISS context. + INTERFACE cmfe_Context_ComputationEnvironmentGet + MODULE PROCEDURE cmfe_Context_ComputationEnvironmentGetNumber + MODULE PROCEDURE cmfe_Context_ComputationEnvironmentGetObj + END INTERFACE cmfe_Context_ComputationEnvironmentGet + + !>Gets the random seeds for an OpenCMISS context. + INTERFACE cmfe_Context_RandomSeedsGet + MODULE PROCEDURE cmfe_Context_RandomSeedsGetNumber0 + MODULE PROCEDURE cmfe_Context_RandomSeedsGetNumber1 + MODULE PROCEDURE cmfe_Context_RandomSeedsGetObj0 + MODULE PROCEDURE cmfe_Context_RandomSeedsGetObj1 + END INTERFACE cmfe_Context_RandomSeedsGet + + !>Gets the size of the random seeds for an OpenCMISS context. + INTERFACE cmfe_Context_RandomSeedsSizeGet + MODULE PROCEDURE cmfe_Context_RandomSeedsSizeGetNumber + MODULE PROCEDURE cmfe_Context_RandomSeedsSizeGetObj + END INTERFACE cmfe_Context_RandomSeedsSizeGet + + !>Sets the random seeds for an OpenCMISS context. + INTERFACE cmfe_Context_RandomSeedsSet + MODULE PROCEDURE cmfe_Context_RandomSeedsSetNumber0 + MODULE PROCEDURE cmfe_Context_RandomSeedsSetNumber1 + MODULE PROCEDURE cmfe_Context_RandomSeedsSetObj0 + MODULE PROCEDURE cmfe_Context_RandomSeedsSetObj1 + END INTERFACE cmfe_Context_RandomSeedsSet + + !>Gets the world region for an OpenCMISS context. + INTERFACE cmfe_Context_WorldRegionGet + MODULE PROCEDURE cmfe_Context_WorldRegionGetNumber + MODULE PROCEDURE cmfe_Context_WorldRegionGetObj + END INTERFACE cmfe_Context_WorldRegionGet + + PUBLIC cmfe_Context_ComputationEnvironmentGet - PUBLIC cmfe_DataProjection_AbsoluteToleranceGet,cmfe_DataProjection_AbsoluteToleranceSet + PUBLIC cmfe_Context_RandomSeedsGet,cmfe_Context_RandomSeedsSizeGet,cmfe_Context_RandomSeedsSet + + PUBLIC cmfe_Context_UserNumberGet - PUBLIC cmfe_DataProjection_CreateFinish,cmfe_DataProjection_CreateStart + PUBLIC cmfe_Context_WorldRegionGet + +!================================================================================================================================== +! +! Constants +! +!================================================================================================================================== + + !Module parameters + + !> \addtogroup OpenCMISS_Constants OpenCMISS::Iron::Constants + !> \brief OpeCMISS constants. + !>@{ + !> \addtogroup OpenCMISS_DataTypeConstants OpenCMISS::Iron::Constants::DataTypeConstants + !> \brief Data type constants for base data types + !> \see OpenCMISS_Constants,OpenCMISS + !>@{ + INTEGER(INTG), PARAMETER :: CMFE_INTEGER_TYPE = INTEGER_TYPE !@} + !> \addtogroup OpenCMISS_GlobalDerivativeConstants OpenCMISS::Iron::Constants::GlobalDerivativeConstants + !> \brief Global derivative constant identifiers + !> \see OpenCMISS_Constants,OpenCMISS + !>@{ + INTEGER(INTG), PARAMETER :: CMFE_NO_GLOBAL_DERIV = NO_GLOBAL_DERIV !@} + !> \addtogroup OpenCMISS_PartialDerivativeConstants OpenCMISS::Iron::Constants::PartialDerivativeConstants + !> \brief Partial derivative constant identifiers + !> \see OpenCMISS_Constants,OpenCMISS + !>@{ + INTEGER(INTG), PARAMETER :: CMFE_NO_PARTIAL_DERIV=NO_PART_DERIV !@} + !> \addtogroup OpenCMISS_ElementNormalXiDirections OpenCMISS::Iron::Constants::ElementNormalXiDirections + !> \brief Xi directions normal to element faces and lines. + !> \see OpenCMISS_CONSTANTS,OpenCMISS + !>@{ + INTEGER(INTG), PARAMETER :: CMFE_ELEMENT_NORMAL_MINUS_XI1 = ELEMENT_NORMAL_MINUS_XI1 !@} + !>@} + + !Module types + + !Module variables + + !Interfaces + + PUBLIC CMFE_INTEGER_TYPE,CMFE_SHORT_INTEGER_TYPE,CMFE_LONG_INTEGER_TYPE,CMFE_SINGLE_REAL_TYPE,CMFE_DOUBLE_REAL_TYPE, & + & CMFE_QUADRAUPLE_REAL_TYPE,CMFE_CHARACTER_TYPE,CMFE_LOGICAL_TYPE,CMFE_SINGLE_COMPLEX_TYPE,CMFE_DOUBLE_COMPLEX_TYPE, & + & CMFE_QUADRUPLE_COMPLEX_TYPE + + PUBLIC CMFE_NO_GLOBAL_DERIV,CMFE_GLOBAL_DERIV_S1,CMFE_GLOBAL_DERIV_S2,CMFE_GLOBAL_DERIV_S1_S2, & + & CMFE_GLOBAL_DERIV_S3,CMFE_GLOBAL_DERIV_S1_S3,CMFE_GLOBAL_DERIV_S2_S3,CMFE_GLOBAL_DERIV_S1_S2_S3 + + PUBLIC CMFE_NO_PARTIAL_DERIV,CMFE_PARTIAL_DERIV_S1,CMFE_PARTIAL_DERIV_S1_S1,CMFE_PARTIAL_DERIV_S2,CMFE_PARTIAL_DERIV_S2_S2, & + & CMFE_PARTIAL_DERIV_S1_S2,CMFE_PARTIAL_DERIV_S3,CMFE_PARTIAL_DERIV_S3_S3,CMFE_PARTIAL_DERIV_S1_S3,CMFE_PARTIAL_DERIV_S2_S3, & + & CMFE_PARTIAL_DERIV_S1_S2_S3,CMFE_PARTIAL_DERIV_S4,CMFE_PARTIAL_DERIV_S4_S4,CMFE_PARTIAL_DERIV_S1_S4, & + & CMFE_PARTIAL_DERIV_S2_S4,CMFE_PARTIAL_DERIV_S3_S4,CMFE_PARTIAL_DERIV_S1_S2_S4,CMFE_PARTIAL_DERIV_S1_S3_S4, & + & CMFE_PARTIAL_DERIV_S2_S3_S4,CMFE_PARTIAL_DERIV_S1_S4_S4,CMFE_PARTIAL_DERIV_S2_S4_S4,CMFE_PARTIAL_DERIV_S3_S4_S4, & + & CMFE_PARTIAL_DERIV_S4_S4_S4 + + PUBLIC CMFE_ELEMENT_NORMAL_MINUS_XI1,CMFE_ELEMENT_NORMAL_MINUS_XI2,CMFE_ELEMENT_NORMAL_MINUS_XI3,CMFE_ELEMENT_NORMAL_MINUS_XI4, & + & CMFE_ELEMENT_NORMAL_PLUS_XI1,CMFE_ELEMENT_NORMAL_PLUS_XI2,CMFE_ELEMENT_NORMAL_PLUS_XI3,CMFE_ELEMENT_NORMAL_PLUS_XI4 + +!================================================================================================================================== +! +! CONTROL_LOOP_ROUTINES +! +!================================================================================================================================== + + !Module parameters + + !> \addtogroup OpenCMISS_ControlLoopConstants OpenCMISS::Iron::ControlLoop::Constants + !> \brief Control loops constants. + !>@{ + !> \addtogroup OpenCMISS_ControlLoopIdentifiers OpenCMISS::Iron::ControlLoop::Identifiers + !> \brief The control loop identification parameters. + !> \see OpenCMISS::Iron::ControlLoop,OpenCMISS + !>@{ + INTEGER(INTG), PARAMETER :: CMFE_CONTROL_LOOP_NODE = CONTROL_LOOP_NODE !@} + !> \addtogroup OpenCMISS_ControlLoopOutputTypes OpenCMISS::Iron::ControlLoop::OutputTypes + !> \brief The control loop output types. + !> \see OpenCMISS::Iron::ControlLoop,OpenCMISS + !>@{ + INTEGER(INTG), PARAMETER :: CMFE_CONTROL_LOOP_NO_OUTPUT = CONTROL_LOOP_NO_OUTPUT !@} + !>@} + + !Module types + + !Module variables + + !Interfaces + + !>Returns the current time parameters for a time control loop. + INTERFACE cmfe_ControlLoop_CurrentTimesGet + MODULE PROCEDURE cmfe_ControlLoop_CurrentTimesGetNumber0 + MODULE PROCEDURE cmfe_ControlLoop_CurrentTimesGetNumber1 + MODULE PROCEDURE cmfe_ControlLoop_CurrentTimesGetObj + END INTERFACE cmfe_ControlLoop_CurrentTimesGet + + !>Destroy a control loop. + INTERFACE cmfe_ControlLoop_Destroy + MODULE PROCEDURE cmfe_ControlLoop_DestroyNumber0 + MODULE PROCEDURE cmfe_ControlLoop_DestroyNumber1 + MODULE PROCEDURE cmfe_ControlLoop_DestroyObj + END INTERFACE cmfe_ControlLoop_Destroy + + !>Returns the specified control loop as indexed by the control loop identifier from the control loop root. + INTERFACE cmfe_ControlLoop_ControlLoopGet + MODULE PROCEDURE cmfe_ControlLoop_ControlLoopGetNumber00 + MODULE PROCEDURE cmfe_ControlLoop_ControlLoopGetNumber10 + MODULE PROCEDURE cmfe_ControlLoop_ControlLoopGetNumber01 + MODULE PROCEDURE cmfe_ControlLoop_ControlLoopGetNumber11 + MODULE PROCEDURE cmfe_ControlLoop_ControlLoopGetObj0 + MODULE PROCEDURE cmfe_ControlLoop_ControlLoopGetObj1 + END INTERFACE cmfe_ControlLoop_ControlLoopGet + + !>Sets/changes the iteration parameters for a fixed control loop. \todo need a get metod + INTERFACE cmfe_ControlLoop_IterationsSet + MODULE PROCEDURE cmfe_ControlLoop_IterationsSetNumber0 + MODULE PROCEDURE cmfe_ControlLoop_IterationsSetNumber1 + MODULE PROCEDURE cmfe_ControlLoop_IterationsSetObj + END INTERFACE cmfe_ControlLoop_IterationsSet + + !>Returns the label of a control loop. + INTERFACE cmfe_ControlLoop_LabelGet + MODULE PROCEDURE cmfe_ControlLoop_LabelGetCNumber0 + MODULE PROCEDURE cmfe_ControlLoop_LabelGetCNumber1 + MODULE PROCEDURE cmfe_ControlLoop_LabelGetCObj + MODULE PROCEDURE cmfe_ControlLoop_LabelGetVSNumber0 + MODULE PROCEDURE cmfe_ControlLoop_LabelGetVSNumber1 + MODULE PROCEDURE cmfe_ControlLoop_LabelGetVSObj + END INTERFACE cmfe_ControlLoop_LabelGet + + !>Sets/changes the label of a control loop. + INTERFACE cmfe_ControlLoop_LabelSet + MODULE PROCEDURE cmfe_ControlLoop_LabelSetCNumber0 + MODULE PROCEDURE cmfe_ControlLoop_LabelSetCNumber1 + MODULE PROCEDURE cmfe_ControlLoop_LabelSetCObj + MODULE PROCEDURE cmfe_ControlLoop_LabelSetVSNumber0 + MODULE PROCEDURE cmfe_ControlLoop_LabelSetVSNumber1 + MODULE PROCEDURE cmfe_ControlLoop_LabelSetVSObj + END INTERFACE cmfe_ControlLoop_LabelSet + + !>Sets/changes the maximum iterations for a while control loop. \todo need a get method + INTERFACE cmfe_ControlLoop_MaximumIterationsSet + MODULE PROCEDURE cmfe_ControlLoop_MaximumIterationsSetNumber0 + MODULE PROCEDURE cmfe_ControlLoop_MaximumIterationsSetNumber1 + MODULE PROCEDURE cmfe_ControlLoop_MaximumIterationsSetObj + END INTERFACE cmfe_ControlLoop_MaximumIterationsSet + + !>Sets/changes the convergence tolerance for a while control loop. \todo need a get method + INTERFACE cmfe_ControlLoop_AbsoluteToleranceSet + MODULE PROCEDURE cmfe_ControlLoop_AbsoluteToleranceSetNumber0 + MODULE PROCEDURE cmfe_ControlLoop_AbsoluteToleranceSetNumber1 + MODULE PROCEDURE cmfe_ControlLoop_AbsoluteToleranceSetObj + END INTERFACE cmfe_ControlLoop_AbsoluteToleranceSet + + !>Returns the number of iterations for a time control loop. If the returned value is 0, that means that the number has not yet been computed. + INTERFACE cmfe_ControlLoop_NumberOfIterationsGet + MODULE PROCEDURE cmfe_ControlLoop_NumberOfIterationsGetNumber0 + MODULE PROCEDURE cmfe_ControlLoop_NumberOfIterationsGetNumber1 + MODULE PROCEDURE cmfe_ControlLoop_NumberOfIterationsGetObj + END INTERFACE cmfe_ControlLoop_NumberOfIterationsGet + + !>Sets/changes the number of iterations for a time control loop. If set to 0, it will be computed from time increment and start/stop time + INTERFACE cmfe_ControlLoop_NumberOfIterationsSet + MODULE PROCEDURE cmfe_ControlLoop_NumberOfIterationsSetNumber0 + MODULE PROCEDURE cmfe_ControlLoop_NumberOfIterationsSetNumber1 + MODULE PROCEDURE cmfe_ControlLoop_NumberOfIterationsSetObj + END INTERFACE cmfe_ControlLoop_NumberOfIterationsSet + + !>Returns the number of sub loops for a control loop. + INTERFACE cmfe_ControlLoop_NumberOfSubLoopsGet + MODULE PROCEDURE cmfe_ControlLoop_NumberOfSubLoopsGetNumber0 + MODULE PROCEDURE cmfe_ControlLoop_NumberOfSubLoopsGetNumber1 + MODULE PROCEDURE cmfe_ControlLoop_NumberOfSubLoopsGetObj + END INTERFACE cmfe_ControlLoop_NumberOfSubLoopsGet + + !>Sets/changes the number of sub loops for a control loop. \todo is this really a public method??? + INTERFACE cmfe_ControlLoop_NumberOfSubLoopsSet + MODULE PROCEDURE cmfe_ControlLoop_NumberOfSubLoopsSetNumber0 + MODULE PROCEDURE cmfe_ControlLoop_NumberOfSubLoopsSetNumber1 + MODULE PROCEDURE cmfe_ControlLoop_NumberOfSubLoopsSetObj + END INTERFACE cmfe_ControlLoop_NumberOfSubLoopsSet + + !>Sets/changes the output parameters for a time control loop. + INTERFACE cmfe_ControlLoop_TimeOutputSet + MODULE PROCEDURE cmfe_ControlLoop_TimeOutputSetNumber0 + MODULE PROCEDURE cmfe_ControlLoop_TimeOutputSetNumber1 + MODULE PROCEDURE cmfe_ControlLoop_TimeOutputSetObj + END INTERFACE cmfe_ControlLoop_TimeOutputSet + + !>Returns the output type for a control loop. + INTERFACE cmfe_ControlLoop_OutputTypeGet + MODULE PROCEDURE cmfe_ControlLoop_OutputTypeGetNumber0 + MODULE PROCEDURE cmfe_ControlLoop_OutputTypeGetNumber1 + MODULE PROCEDURE cmfe_ControlLoop_OutputTypeGetObj + END INTERFACE cmfe_ControlLoop_OutputTypeGet + + !>Sets/changes the output type for a control loop. + INTERFACE cmfe_ControlLoop_OutputTypeSet + MODULE PROCEDURE cmfe_ControlLoop_OutputTypeSetNumber0 + MODULE PROCEDURE cmfe_ControlLoop_OutputTypeSetNumber1 + MODULE PROCEDURE cmfe_ControlLoop_OutputTypeSetObj + END INTERFACE cmfe_ControlLoop_OutputTypeSet + + !>Sets/changes the input parameters for a time control loop. + INTERFACE cmfe_ControlLoop_TimeInputSet + MODULE PROCEDURE cmfe_ControlLoop_TimeInputSetNumber0 + MODULE PROCEDURE cmfe_ControlLoop_TimeInputSetNumber1 + MODULE PROCEDURE cmfe_ControlLoop_TimeInputSetObj + END INTERFACE cmfe_ControlLoop_TimeInputSet + + !>Returns the time parameters for a time control loop. + INTERFACE cmfe_ControlLoop_TimesGet + MODULE PROCEDURE cmfe_ControlLoop_TimesGetNumber0 + MODULE PROCEDURE cmfe_ControlLoop_TimesGetNumber1 + MODULE PROCEDURE cmfe_ControlLoop_TimesGetObj + END INTERFACE cmfe_ControlLoop_TimesGet + + !>Sets/Changes the time parameters for a time control loop. + INTERFACE cmfe_ControlLoop_TimesSet + MODULE PROCEDURE cmfe_ControlLoop_TimesSetNumber0 + MODULE PROCEDURE cmfe_ControlLoop_TimesSetNumber1 + MODULE PROCEDURE cmfe_ControlLoop_TimesSetObj + END INTERFACE cmfe_ControlLoop_TimesSet + + !>Sets/Changes the loop type for a control loop. \todo Is this really a public method? \todo need a get method + INTERFACE cmfe_ControlLoop_TypeSet + MODULE PROCEDURE cmfe_ControlLoop_TypeSetNumber0 + MODULE PROCEDURE cmfe_ControlLoop_TypeSetNumber1 + MODULE PROCEDURE cmfe_ControlLoop_TypeSetObj + END INTERFACE cmfe_ControlLoop_TypeSet + + PUBLIC CMFE_CONTROL_LOOP_NODE + + PUBLIC CMFE_CONTROL_LOOP_NO_OUTPUT,CMFE_CONTROL_LOOP_PROGRESS_OUTPUT,CMFE_CONTROL_LOOP_TIMING_OUTPUT + + PUBLIC cmfe_ControlLoop_CurrentTimesGet + + PUBLIC cmfe_ControlLoop_Destroy + + PUBLIC cmfe_ControlLoop_ControlLoopGet + + PUBLIC cmfe_ControlLoop_IterationsSet + + PUBLIC cmfe_ControlLoop_LabelGet,cmfe_ControlLoop_LabelSet + + PUBLIC cmfe_ControlLoop_MaximumIterationsSet + + PUBLIC cmfe_ControlLoop_AbsoluteToleranceSet + + PUBLIC cmfe_ControlLoop_NumberOfIterationsGet, cmfe_ControlLoop_NumberOfIterationsSet + + PUBLIC cmfe_ControlLoop_NumberOfSubLoopsGet,cmfe_ControlLoop_NumberOfSubLoopsSet - PUBLIC cmfe_DataProjection_Destroy + PUBLIC cmfe_ControlLoop_OutputTypeGet,cmfe_ControlLoop_OutputTypeSet - PUBLIC cmfe_DataProjection_DataPointsPositionEvaluate + PUBLIC cmfe_ControlLoop_TimeOutputSet,cmfe_ControlLoop_TimeInputSet - PUBLIC cmfe_DataProjection_ProjectionCancelByDataPoints + PUBLIC cmfe_ControlLoop_TimesGet,cmfe_ControlLoop_TimesSet - PUBLIC cmfe_DataProjection_ProjectionCancelByDistance + PUBLIC cmfe_ControlLoop_TypeSet - PUBLIC cmfe_DataProjection_ProjectionCancelByExitTags - PUBLIC cmfe_DataProjection_ProjectionCandidateElementsSet +!================================================================================================================================== +! +! COORDINATE_ROUTINES +! +!================================================================================================================================== + + !Module parameters + + !> \addtogroup OpenCMISS_CoordinateConstants OpenCMISS::Iron::Coordinate::Constants + !> \brief Coordinate constants. + !>@{ + !> \addtogroup OpenCMISS_CoordinateSystemTypes OpenCMISS::Iron::Coordinate::SystemTypes + !> \brief Coordinate system type parameters. + !> \see OpenCMISS::Iron::Coordinate,OpenCMISS + !>@{ + INTEGER(INTG), PARAMETER :: CMFE_COORDINATE_RECTANGULAR_CARTESIAN_TYPE = COORDINATE_RECTANGULAR_CARTESIAN_TYPE !@} + !> \addtogroup OpenCMISS_CoordinateRadialInterpolations OpenCMISS::Iron::Coordinate::RadialInterpolations + !> \brief The type of radial interpolation for polar coordinate systems + !> \see OpenCMISS::Iron::Coordinate,OpenCMISS + !>@{ + INTEGER(INTG), PARAMETER :: CMFE_COORDINATE_NO_RADIAL_INTERPOLATION_TYPE = COORDINATE_NO_RADIAL_INTERPOLATION_TYPE !@} + !>@} + + !Module types + + !Module variables + + !Interfaces + + !>Finishes the creation of a coordinate system. \see OpenCMISS::Iron::cmfe_CoordinateSystem_CreateStart + INTERFACE cmfe_CoordinateSystem_CreateFinish + MODULE PROCEDURE cmfe_CoordinateSystem_CreateFinishNumber + MODULE PROCEDURE cmfe_CoordinateSystem_CreateFinishObj + END INTERFACE cmfe_CoordinateSystem_CreateFinish + + !>Starts the creation of a coordinate system. \see OpenCMISS::Iron::cmfe_CoordinateSystem_CreateFinish + INTERFACE cmfe_CoordinateSystem_CreateStart + MODULE PROCEDURE cmfe_CoordinateSystem_CreateStartNumber + MODULE PROCEDURE cmfe_CoordinateSystem_CreateStartObj + END INTERFACE cmfe_CoordinateSystem_CreateStart + + !>Destorys a coordinate system. + INTERFACE cmfe_CoordinateSystem_Destroy + MODULE PROCEDURE cmfe_CoordinateSystem_DestroyNumber + MODULE PROCEDURE cmfe_CoordinateSystem_DestroyObj + END INTERFACE cmfe_CoordinateSystem_Destroy + + !>Returns the coordinate system dimension. \todo user number method \todo fix pointers + INTERFACE cmfe_CoordinateSystem_DimensionGet + MODULE PROCEDURE cmfe_CoordinateSystem_DimensionGetNumber + MODULE PROCEDURE cmfe_CoordinateSystem_DimensionGetObj + END INTERFACE cmfe_CoordinateSystem_DimensionGet + + !>Sets/changes the coordinate system dimension. \todo fix pointers + INTERFACE cmfe_CoordinateSystem_DimensionSet + MODULE PROCEDURE cmfe_CoordinateSystem_DimensionSetNumber + MODULE PROCEDURE cmfe_CoordinateSystem_DimensionSetObj + END INTERFACE cmfe_CoordinateSystem_DimensionSet + + !>Returns the coordinate system focus. \todo user number method \todo fix pointers + INTERFACE cmfe_CoordinateSystem_FocusGet + MODULE PROCEDURE cmfe_CoordinateSystem_FocusGetNumber + MODULE PROCEDURE cmfe_CoordinateSystem_FocusGetObj + END INTERFACE cmfe_CoordinateSystem_FocusGet + + !>Sets/changes the coordinate system focus. \todo user number method \todo fix pointers + INTERFACE cmfe_CoordinateSystem_FocusSet + MODULE PROCEDURE cmfe_CoordinateSystem_FocusSetNumber + MODULE PROCEDURE cmfe_CoordinateSystem_FocusSetObj + END INTERFACE cmfe_CoordinateSystem_FocusSet + + !>Returns the coordinate system radial interpolation type. \todo user number method \todo fix pointers + INTERFACE cmfe_CoordinateSystem_RadialInterpolationGet + MODULE PROCEDURE cmfe_CoordinateSystem_RadialInterpolationGetNumber + MODULE PROCEDURE cmfe_CoordinateSystem_RadialInterpolationGetObj + END INTERFACE cmfe_CoordinateSystem_RadialInterpolationGet + + !>Sets/changes the coordinate system radial interpolation type. \todo user number method \todo fix pointers + INTERFACE cmfe_CoordinateSystem_RadialInterpolationSet + MODULE PROCEDURE cmfe_CoordinateSystem_RadialInterpolationSetNumber + MODULE PROCEDURE cmfe_CoordinateSystem_RadialInterpolationSetObj + END INTERFACE cmfe_CoordinateSystem_RadialInterpolationSet + + !>Returns the coordinate system type. \todo user number method \todo fix pointers + INTERFACE cmfe_CoordinateSystem_TypeGet + MODULE PROCEDURE cmfe_CoordinateSystem_TypeGetNumber + MODULE PROCEDURE cmfe_CoordinateSystem_TypeGetObj + END INTERFACE cmfe_CoordinateSystem_TypeGet + + !>Sets/changes the coordinate system type. \todo user number method \todo fix pointers + INTERFACE cmfe_CoordinateSystem_TypeSet + MODULE PROCEDURE cmfe_CoordinateSystem_TypeSetNumber + MODULE PROCEDURE cmfe_CoordinateSystem_TypeSetObj + END INTERFACE cmfe_CoordinateSystem_TypeSet + + !>Returns the coordinate system orign. + INTERFACE cmfe_CoordinateSystem_OriginGet + MODULE PROCEDURE cmfe_CoordinateSystem_OriginGetNumber + MODULE PROCEDURE cmfe_CoordinateSystem_OriginGetObj + END INTERFACE cmfe_CoordinateSystem_OriginGet + + !>Sets/changes the coordinate system orign. + INTERFACE cmfe_CoordinateSystem_OriginSet + MODULE PROCEDURE cmfe_CoordinateSystem_OriginSetNumber + MODULE PROCEDURE cmfe_CoordinateSystem_OriginSetObj + END INTERFACE cmfe_CoordinateSystem_OriginSet + + !>Returns the coordinate system orientation. + INTERFACE cmfe_CoordinateSystem_OrientationGet + MODULE PROCEDURE cmfe_CoordinateSystem_OrientationGetNumber + MODULE PROCEDURE cmfe_CoordinateSystem_OrientationGetObj + END INTERFACE cmfe_CoordinateSystem_OrientationGet + + !>Sets/changes the coordinate system orientation. + INTERFACE cmfe_CoordinateSystem_OrientationSet + MODULE PROCEDURE cmfe_CoordinateSystem_OrientationSetNumber + MODULE PROCEDURE cmfe_CoordinateSystem_OrientationSetObj + END INTERFACE cmfe_CoordinateSystem_OrientationSet + + PUBLIC CMFE_COORDINATE_RECTANGULAR_CARTESIAN_TYPE,CMFE_COORDINATE_CYLINDRICAL_POLAR_TYPE, & + & CMFE_COORDINATE_SPHERICAL_POLAR_TYPE, & + & CMFE_COORDINATE_PROLATE_SPHEROIDAL_TYPE,CMFE_COORDINATE_OBLATE_SPHEROIDAL_TYPE + + PUBLIC CMFE_COORDINATE_NO_RADIAL_INTERPOLATION_TYPE,CMFE_COORDINATE_RADIAL_INTERPOLATION_TYPE, & + & CMFE_COORDINATE_RADIAL_SQUARED_INTERPOLATION_TYPE,CMFE_COORDINATE_RADIAL_CUBED_INTERPOLATION_TYPE + + PUBLIC cmfe_CoordinateSystem_CreateFinish,cmfe_CoordinateSystem_CreateStart + + PUBLIC cmfe_CoordinateSystem_Destroy + + PUBLIC cmfe_CoordinateSystem_DimensionGet,cmfe_CoordinateSystem_DimensionSet + + PUBLIC cmfe_CoordinateSystem_FocusGet,cmfe_CoordinateSystem_FocusSet + + PUBLIC cmfe_CoordinateSystem_RadialInterpolationGet,cmfe_CoordinateSystem_RadialInterpolationSet + + PUBLIC cmfe_CoordinateSystem_TypeGet,cmfe_CoordinateSystem_TypeSet + + PUBLIC cmfe_CoordinateSystem_OriginGet,cmfe_CoordinateSystem_OriginSet + + PUBLIC cmfe_CoordinateSystem_OrientationGet,cmfe_CoordinateSystem_OrientationSet + +!================================================================================================================================== +! +! DataPointsRoutines +! +!================================================================================================================================== + + !Module parameters + + !Module types + + !Module variables + + !Interfaces + + !>Finishes the process of creating data points in a region. \see OpenCMISS::Iron::cmfe_DataPoints_CreateStart + INTERFACE cmfe_DataPoints_CreateFinish + MODULE PROCEDURE cmfe_DataPoints_CreateFinishNumber + MODULE PROCEDURE cmfe_DataPoints_CreateFinishObj + END INTERFACE cmfe_DataPoints_CreateFinish + + !>Starts the process of creating data points in a region. \see OpenCMISS::Iron::cmfe_DataPoints_CreateFinish + INTERFACE cmfe_DataPoints_CreateStart + MODULE PROCEDURE cmfe_DataPoints_CreateStartNumber + MODULE PROCEDURE cmfe_DataPoints_CreateStartObj + MODULE PROCEDURE cmfe_DataPoints_CreateStartInterfaceObj + END INTERFACE cmfe_DataPoints_CreateStart + + !>Destroys data points. + INTERFACE cmfe_DataPoints_Destroy + MODULE PROCEDURE cmfe_DataPoints_DestroyNumber + MODULE PROCEDURE cmfe_DataPoints_DestroyObj + END INTERFACE cmfe_DataPoints_Destroy + + !>Returns the number of data points + INTERFACE cmfe_DataPoints_NumberOfDataPointsGet + MODULE PROCEDURE cmfe_DataPoints_NumberOfDataPointsGetNumber + MODULE PROCEDURE cmfe_DataPoints_NumberOfDataPointsGetObj + END INTERFACE cmfe_DataPoints_NumberOfDataPointsGet + + !>Returns the label for a data point identified by a given user number. + INTERFACE cmfe_DataPoints_LabelGet + MODULE PROCEDURE cmfe_DataPoints_LabelGetCNumber + MODULE PROCEDURE cmfe_DataPoints_LabelGetCObj + MODULE PROCEDURE cmfe_DataPoints_LabelGetVSNumber + MODULE PROCEDURE cmfe_DataPoints_LabelGetVSObj + END INTERFACE cmfe_DataPoints_LabelGet + + !>Sets/changes the label for a data point identified by a given user number. + INTERFACE cmfe_DataPoints_LabelSet + MODULE PROCEDURE cmfe_DataPoints_LabelSetCNumber + MODULE PROCEDURE cmfe_DataPoints_LabelSetCObj + MODULE PROCEDURE cmfe_DataPoints_LabelSetVSNumber + MODULE PROCEDURE cmfe_DataPoints_LabelSetVSObj + END INTERFACE cmfe_DataPoints_LabelSet + + !>Returns the user number for a data point identified by a given global number. + INTERFACE cmfe_DataPoints_UserNumberGet + MODULE PROCEDURE cmfe_DataPoints_UserNumberGetNumber + MODULE PROCEDURE cmfe_DataPoints_UserNumberGetObj + END INTERFACE cmfe_DataPoints_UserNumberGet + + !>Sets/changes the user number for a data point identified by a given global number. + INTERFACE cmfe_DataPoints_UserNumberSet + MODULE PROCEDURE cmfe_DataPoints_UserNumberSetNumber + MODULE PROCEDURE cmfe_DataPoints_UserNumberSetObj + END INTERFACE cmfe_DataPoints_UserNumberSet + + !>Returns the position for a data point identified by a given user number. + INTERFACE cmfe_DataPoints_PositionGet + MODULE PROCEDURE cmfe_DataPoints_PositionGetNumber + MODULE PROCEDURE cmfe_DataPoints_PositionGetObj + END INTERFACE cmfe_DataPoints_PositionGet + + !>Sets/changes the position for a data point identified by a given user number. + INTERFACE cmfe_DataPoints_PositionSet + MODULE PROCEDURE cmfe_DataPoints_PositionSetNumber + MODULE PROCEDURE cmfe_DataPoints_PositionSetObj + END INTERFACE cmfe_DataPoints_PositionSet + + !>Returns the weights for a data point identified by a given user number. + INTERFACE cmfe_DataPoints_WeightsGet + MODULE PROCEDURE cmfe_DataPoints_WeightsGetNumber + MODULE PROCEDURE cmfe_DataPoints_WeightsGetObj + END INTERFACE cmfe_DataPoints_WeightsGet + + !>Sets/changes the weights for a data point identified by a given user number. + INTERFACE cmfe_DataPoints_WeightsSet + MODULE PROCEDURE cmfe_DataPoints_WeightsSetNumber + MODULE PROCEDURE cmfe_DataPoints_WeightsSetObj + END INTERFACE cmfe_DataPoints_WeightsSet + + PUBLIC cmfe_DataPoints_CreateFinish,cmfe_DataPoints_CreateStart + + PUBLIC cmfe_DataPoints_Destroy + + PUBLIC cmfe_DataPoints_NumberOfDataPointsGet + + PUBLIC cmfe_DataPoints_LabelGet,cmfe_DataPoints_LabelSet + + PUBLIC cmfe_DataPoints_UserNumberGet,cmfe_DataPoints_UserNumberSet + + PUBLIC cmfe_DataPoints_PositionGet,cmfe_DataPoints_PositionSet + + PUBLIC cmfe_DataPoints_WeightsGet,cmfe_DataPoints_WeightsSet + +!================================================================================================================================== +! +! DataProjectionRoutines +! +!================================================================================================================================== + + !Module parameters + + !> \addtogroup OpenCMISS_DataProjectionConstants OpenCMISS::Iron::DataProjection::Constants + !> \brief DataProjection constants. + !>@{ + !> \addtogroup OpenCMISS_DataProjectionProjectionTypes OpenCMISS::Iron::DataProjection::ProjectionTypes + !> \brief Data Projection types + !> \see OpenCMISS::Iron::DataProjection,OpenCMISS + !>@{ + INTEGER(INTG), PARAMETER :: CMFE_DATA_PROJECTION_BOUNDARY_LINES_PROJECTION_TYPE = DATA_PROJECTION_BOUNDARY_LINES_PROJECTION_TYPE!@} + !> \addtogroup OpenCMISS_DataProjectionExitTags OpenCMISS::Iron::DataProjection::DataProjectionExitTags + !> \brief Datapoint projection exit tags + !> \see OpenCMISS::Iron::DataProjection,OpenCMISS + !>@{ + INTEGER(INTG), PARAMETER :: CMFE_DATA_PROJECTION_CANCELLED = DATA_PROJECTION_CANCELLED !@} + !> \addtogroup OpenCMISS_DataProjectionDistanceRelations OpenCMISS::Iron::DataProjection::DataProjectionDistanceRelations + !> \brief Datapoint projection distance relations to select data points based on distance. + !> \see OpenCMISS::Iron::DataProjection,OpenCMISS + !>@{ + INTEGER(INTG), PARAMETER :: CMFE_DATA_PROJECTION_DISTANCE_GREATER = DATA_PROJECTION_DISTANCE_GREATER !@} + !>@} + + !Module types + + !Module variables + + !Interfaces + + !>Returns the absolute tolerance for a data projection. + INTERFACE cmfe_DataProjection_AbsoluteToleranceGet + MODULE PROCEDURE cmfe_DataProjection_AbsoluteToleranceGetNumber + MODULE PROCEDURE cmfe_DataProjection_AbsoluteToleranceGetObj + END INTERFACE cmfe_DataProjection_AbsoluteToleranceGet + + !>Sets/changes the absolute tolerance for a data projection. + INTERFACE cmfe_DataProjection_AbsoluteToleranceSet + MODULE PROCEDURE cmfe_DataProjection_AbsoluteToleranceSetNumber + MODULE PROCEDURE cmfe_DataProjection_AbsoluteToleranceSetObj + END INTERFACE cmfe_DataProjection_AbsoluteToleranceSet + + !>Finishes the creation of a new data projection. \see OpenCMISS::Iron::cmfe_DataProjection_CreateStart + INTERFACE cmfe_DataProjection_CreateFinish + MODULE PROCEDURE cmfe_DataProjection_CreateFinishNumber + MODULE PROCEDURE cmfe_DataProjection_CreateFinishObj + END INTERFACE cmfe_DataProjection_CreateFinish + + !>Starts the creation of a new data projection. \see OpenCMISS::Iron::cmfe_DataProjection_CreateFinish + INTERFACE cmfe_DataProjection_CreateStart + MODULE PROCEDURE cmfe_DataProjection_CreateStartNumber + MODULE PROCEDURE cmfe_DataProjection_CreateStartObj + END INTERFACE cmfe_DataProjection_CreateStart + + !>Destroy a data projection. + INTERFACE cmfe_DataProjection_Destroy + MODULE PROCEDURE cmfe_DataProjection_DestroyNumber + MODULE PROCEDURE cmfe_DataProjection_DestroyObj + END INTERFACE cmfe_DataProjection_Destroy + + !>Evaluate the data points position in a field based on data projection + INTERFACE cmfe_DataProjection_DataPointsPositionEvaluate + MODULE PROCEDURE cmfe_DataProjection_DataPointsPositionEvaluateRegionNumber + MODULE PROCEDURE cmfe_DataProjection_DataPointsPositionEvaluateInterfaceNumber + MODULE PROCEDURE cmfe_DataProjection_DataPointsPositionEvaluateObj + END INTERFACE cmfe_DataProjection_DataPointsPositionEvaluate + + !>Starts the evluation of data projection on the geometric field. + INTERFACE cmfe_DataProjection_DataPointsProjectionEvaluate + MODULE PROCEDURE cmfe_DataProjection_DataPointsProjectionEvaluateNumber + MODULE PROCEDURE cmfe_DataProjection_DataPointsProjectionEvaluateObj + END INTERFACE cmfe_DataProjection_DataPointsProjectionEvaluate + + !>Returns the maximum iteration update for a data projection. + INTERFACE cmfe_DataProjection_MaximumIterationUpdateGet + MODULE PROCEDURE cmfe_DataProjection_MaximumIterationUpdateGetNumber + MODULE PROCEDURE cmfe_DataProjection_MaximumIterationUpdateGetObj + END INTERFACE cmfe_DataProjection_MaximumIterationUpdateGet + + !>Sets/changes the maximum iteration update for a data projection. + INTERFACE cmfe_DataProjection_MaximumIterationUpdateSet + MODULE PROCEDURE cmfe_DataProjection_MaximumIterationUpdateSetNumber + MODULE PROCEDURE cmfe_DataProjection_MaximumIterationUpdateSetObj + END INTERFACE cmfe_DataProjection_MaximumIterationUpdateSet + + !>Returns the maximum number of iterations for a data projection. + INTERFACE cmfe_DataProjection_MaximumNumberOfIterationsGet + MODULE PROCEDURE cmfe_DataProjection_MaximumNumberOfIterationsGetNumber + MODULE PROCEDURE cmfe_DataProjection_MaximumNumberOfIterationsGetObj + END INTERFACE cmfe_DataProjection_MaximumNumberOfIterationsGet + + !>Sets/changes the maximum number of iterations for a data projection. + INTERFACE cmfe_DataProjection_MaximumNumberOfIterationsSet + MODULE PROCEDURE cmfe_DataProjection_MaximumNumberOfIterationsSetNumber + MODULE PROCEDURE cmfe_DataProjection_MaximumNumberOfIterationsSetObj + END INTERFACE cmfe_DataProjection_MaximumNumberOfIterationsSet + + !>Returns the number of closest elements for a data projection. + INTERFACE cmfe_DataProjection_NumberOfClosestElementsGet + MODULE PROCEDURE cmfe_DataProjection_NumberOfClosestElementsGetNumber + MODULE PROCEDURE cmfe_DataProjection_NumberOfClosestElementsGetObj + END INTERFACE cmfe_DataProjection_NumberOfClosestElementsGet + + !>Sets/changes the number of closest elements for a data projection. + INTERFACE cmfe_DataProjection_NumberOfClosestElementsSet + MODULE PROCEDURE cmfe_DataProjection_NumberOfClosestElementsSetNumber + MODULE PROCEDURE cmfe_DataProjection_NumberOfClosestElementsSetObj + END INTERFACE cmfe_DataProjection_NumberOfClosestElementsSet + + !>Cancel the data projection for data points based on the data point user numbers. + INTERFACE cmfe_DataProjection_ProjectionCancelByDataPoints + MODULE PROCEDURE cmfe_DataProjection_ProjectionCancelByDataPointsRegionNumber0 + MODULE PROCEDURE cmfe_DataProjection_ProjectionCancelByDataPointsRegionNumber1 + MODULE PROCEDURE cmfe_DataProjection_ProjectionCancelByDataPointsInterNum0 + MODULE PROCEDURE cmfe_DataProjection_ProjectionCancelByDataPointsInterNum1 + MODULE PROCEDURE cmfe_DataProjection_ProjectionCancelByDataPointsObj0 + MODULE PROCEDURE cmfe_DataProjection_ProjectionCancelByDataPointsObj1 + END INTERFACE cmfe_DataProjection_ProjectionCancelByDataPoints + + !>Cancel the data projection for data points based on the projection distance. + INTERFACE cmfe_DataProjection_ProjectionCancelByDistance + MODULE PROCEDURE cmfe_DataProjection_ProjectionCancelByDistanceRegionNumber + MODULE PROCEDURE cmfe_DataProjection_ProjectionCancelByDistanceInterfaceNumber + MODULE PROCEDURE cmfe_DataProjection_ProjectionCancelByDistanceObj + END INTERFACE cmfe_DataProjection_ProjectionCancelByDistance + + !>Cancel the data projection for data points based on the projection exit tag. + INTERFACE cmfe_DataProjection_ProjectionCancelByExitTags + MODULE PROCEDURE cmfe_DataProjection_ProjectionCancelByExitTagsRegionNumber0 + MODULE PROCEDURE cmfe_DataProjection_ProjectionCancelByExitTagsRegionNumber1 + MODULE PROCEDURE cmfe_DataProjection_ProjectionCancelByExitTagsInterfaceNumber0 + MODULE PROCEDURE cmfe_DataProjection_ProjectionCancelByExitTagsInterfaceNumber1 + MODULE PROCEDURE cmfe_DataProjection_ProjectionCancelByExitTagsObj0 + MODULE PROCEDURE cmfe_DataProjection_ProjectionCancelByExitTagsObj1 + END INTERFACE cmfe_DataProjection_ProjectionCancelByExitTags + + !>Set the data projection candidate elements for an all elements projection type. + INTERFACE cmfe_DataProjection_ProjectionCandidateElementsSet + MODULE PROCEDURE cmfe_DataProjection_ProjectionCandidateElementsSetRegionNumber + MODULE PROCEDURE cmfe_DataProjection_ProjectionCandidateElementsSetIntNum + MODULE PROCEDURE cmfe_DataProjection_ProjectionCandidateElementsSetObj + END INTERFACE cmfe_DataProjection_ProjectionCandidateElementsSet + + !>Set the data projection candidate elements for data points for an all elements projection type. + INTERFACE cmfe_DataProjection_ProjectionDataCandidateElementsSet + MODULE PROCEDURE cmfe_DataProjection_ProjectionDataCandidateElementsSetRegNum00 + MODULE PROCEDURE cmfe_DataProjection_ProjectionDataCandidateElementsSetRegNum01 + MODULE PROCEDURE cmfe_DataProjection_ProjectionDataCandidateElementsSetRegNum10 + MODULE PROCEDURE cmfe_DataProjection_ProjectionDataCandidateElementsSetRegNum11 + MODULE PROCEDURE cmfe_DataProjection_ProjectionDataCandidateElementsSetIntNum00 + MODULE PROCEDURE cmfe_DataProjection_ProjectionDataCandidateElementsSetIntNum01 + MODULE PROCEDURE cmfe_DataProjection_ProjectionDataCandidateElementsSetIntNum10 + MODULE PROCEDURE cmfe_DataProjection_ProjectionDataCandidateElementsSetIntNum11 + MODULE PROCEDURE cmfe_DataProjection_ProjectionDataCandidateElementsSetObj00 + MODULE PROCEDURE cmfe_DataProjection_ProjectionDataCandidateElementsSetObj01 + MODULE PROCEDURE cmfe_DataProjection_ProjectionDataCandidateElementsSetObj10 + MODULE PROCEDURE cmfe_DataProjection_ProjectionDataCandidateElementsSetObj11 + END INTERFACE cmfe_DataProjection_ProjectionDataCandidateElementsSet + + !>Set the data projection candidate faces for a boundary faces projection type. + INTERFACE cmfe_DataProjection_ProjectionCandidateFacesSet + MODULE PROCEDURE cmfe_DataProjection_ProjectionCandidateFacesSetRegionNumber + MODULE PROCEDURE cmfe_DataProjection_ProjectionCandidateFacesSetInterfaceNumber + MODULE PROCEDURE cmfe_DataProjection_ProjectionCandidateFacesSetObj + END INTERFACE cmfe_DataProjection_ProjectionCandidateFacesSet + + !>Set the data projection candidate faces for data points for a boundary faces projection type. + INTERFACE cmfe_DataProjection_ProjectionDataCandidateFacesSet + MODULE PROCEDURE cmfe_DataProjection_ProjectionDataCandidateFacesSetRegNum000 + MODULE PROCEDURE cmfe_DataProjection_ProjectionDataCandidateFacesSetRegNum011 + MODULE PROCEDURE cmfe_DataProjection_ProjectionDataCandidateFacesSetRegNum100 + MODULE PROCEDURE cmfe_DataProjection_ProjectionDataCandidateFacesSetRegNum111 + MODULE PROCEDURE cmfe_DataProjection_ProjectionDataCandidateFacesSetIntNum000 + MODULE PROCEDURE cmfe_DataProjection_ProjectionDataCandidateFacesSetIntNum011 + MODULE PROCEDURE cmfe_DataProjection_ProjectionDataCandidateFacesSetIntNum100 + MODULE PROCEDURE cmfe_DataProjection_ProjectionDataCandidateFacesSetIntNum111 + MODULE PROCEDURE cmfe_DataProjection_ProjectionDataCandidateFacesSetObj000 + MODULE PROCEDURE cmfe_DataProjection_ProjectionDataCandidateFacesSetObj011 + MODULE PROCEDURE cmfe_DataProjection_ProjectionDataCandidateFacesSetObj100 + MODULE PROCEDURE cmfe_DataProjection_ProjectionDataCandidateFacesSetObj111 + END INTERFACE cmfe_DataProjection_ProjectionDataCandidateFacesSet + + !>Set the data projection candidate lines for a boundary lines projection type. + INTERFACE cmfe_DataProjection_ProjectionCandidateLinesSet + MODULE PROCEDURE cmfe_DataProjection_ProjectionCandidateLinesSetRegionNumber + MODULE PROCEDURE cmfe_DataProjection_ProjectionCandidateLinesSetInterfaceNumber + MODULE PROCEDURE cmfe_DataProjection_ProjectionCandidateLinesSetObj + END INTERFACE cmfe_DataProjection_ProjectionCandidateLinesSet + + !>Set the data projection candidate lines for data points for a boundary lines projection type. + INTERFACE cmfe_DataProjection_ProjectionDataCandidateLinesSet + MODULE PROCEDURE cmfe_DataProjection_ProjectionDataCandidateLinesSetRegNum000 + MODULE PROCEDURE cmfe_DataProjection_ProjectionDataCandidateLinesSetRegNum011 + MODULE PROCEDURE cmfe_DataProjection_ProjectionDataCandidateLinesSetRegNum100 + MODULE PROCEDURE cmfe_DataProjection_ProjectionDataCandidateLinesSetRegNum111 + MODULE PROCEDURE cmfe_DataProjection_ProjectionDataCandidateLinesSetIntNum000 + MODULE PROCEDURE cmfe_DataProjection_ProjectionDataCandidateLinesSetIntNum011 + MODULE PROCEDURE cmfe_DataProjection_ProjectionDataCandidateLinesSetIntNum100 + MODULE PROCEDURE cmfe_DataProjection_ProjectionDataCandidateLinesSetIntNum111 + MODULE PROCEDURE cmfe_DataProjection_ProjectionDataCandidateLinesSetObj000 + MODULE PROCEDURE cmfe_DataProjection_ProjectionDataCandidateLinesSetObj011 + MODULE PROCEDURE cmfe_DataProjection_ProjectionDataCandidateLinesSetObj100 + MODULE PROCEDURE cmfe_DataProjection_ProjectionDataCandidateLinesSetObj111 + END INTERFACE cmfe_DataProjection_ProjectionDataCandidateLinesSet + + !>Returns the projection type for a data projection. + INTERFACE cmfe_DataProjection_ProjectionTypeGet + MODULE PROCEDURE cmfe_DataProjection_ProjectionTypeGetNumber + MODULE PROCEDURE cmfe_DataProjection_ProjectionTypeGetObj + END INTERFACE cmfe_DataProjection_ProjectionTypeGet + + !>Sets/changes the projection type for a data projection. + INTERFACE cmfe_DataProjection_ProjectionTypeSet + MODULE PROCEDURE cmfe_DataProjection_ProjectionTypeSetNumber + MODULE PROCEDURE cmfe_DataProjection_ProjectionTypeSetObj + END INTERFACE cmfe_DataProjection_ProjectionTypeSet + + !>Returns the relative tolerance for a data projection. + INTERFACE cmfe_DataProjection_RelativeToleranceGet + MODULE PROCEDURE cmfe_DataProjection_RelativeToleranceGetNumber + MODULE PROCEDURE cmfe_DataProjection_RelativeToleranceGetObj + END INTERFACE cmfe_DataProjection_RelativeToleranceGet + + !>Sets/changes the relative tolerance for a data projection. + INTERFACE cmfe_DataProjection_RelativeToleranceSet + MODULE PROCEDURE cmfe_DataProjection_RelativeToleranceSetNumber + MODULE PROCEDURE cmfe_DataProjection_RelativeToleranceSetObj + END INTERFACE cmfe_DataProjection_RelativeToleranceSet + + !>Returns the starting xi for a data projection. + INTERFACE cmfe_DataProjection_StartingXiGet + MODULE PROCEDURE cmfe_DataProjection_StartingXiGetNumber + MODULE PROCEDURE cmfe_DataProjection_StartingXiGetObj + END INTERFACE cmfe_DataProjection_StartingXiGet + + !>Sets/changes the starting xi for a data projection. + INTERFACE cmfe_DataProjection_StartingXiSet + MODULE PROCEDURE cmfe_DataProjection_StartingXiSetNumber + MODULE PROCEDURE cmfe_DataProjection_StartingXiSetObj + END INTERFACE cmfe_DataProjection_StartingXiSet + + !>Sets/changes the element number for a data point projection. + INTERFACE cmfe_DataProjection_ElementSet + MODULE PROCEDURE cmfe_DataProjection_ElementSetRegionNumber + MODULE PROCEDURE cmfe_DataProjection_ElementSetInterfaceNumber + MODULE PROCEDURE cmfe_DataProjection_ElementSetObj + END INTERFACE cmfe_DataProjection_ElementSet + + !>Gets the label for a data point projection. + INTERFACE cmfe_DataProjection_LabelGet + MODULE PROCEDURE cmfe_DataProjection_LabelGetCRegionNumber + MODULE PROCEDURE cmfe_DataProjection_LabelGetCInterfaceNumber + MODULE PROCEDURE cmfe_DataProjection_LabelGetCObj + MODULE PROCEDURE cmfe_DataProjection_LabelGetVSRegionNumber + MODULE PROCEDURE cmfe_DataProjection_LabelGetVSInterfaceNumber + MODULE PROCEDURE cmfe_DataProjection_LabelGetVSObj + END INTERFACE cmfe_DataProjection_LabelGet + + !>Sets/changes the label for a data point projection. + INTERFACE cmfe_DataProjection_LabelSet + MODULE PROCEDURE cmfe_DataProjection_LabelSetCRegionNumber + MODULE PROCEDURE cmfe_DataProjection_LabelSetCInterfaceNumber + MODULE PROCEDURE cmfe_DataProjection_LabelSetCObj + MODULE PROCEDURE cmfe_DataProjection_LabelSetVSRegionNumber + MODULE PROCEDURE cmfe_DataProjection_LabelSetVSInterfaceNumber + MODULE PROCEDURE cmfe_DataProjection_LabelSetVSObj + END INTERFACE cmfe_DataProjection_LabelSet + + !>Outputs an analysis of the data projection results + INTERFACE cmfe_DataProjection_ResultAnalysisOutput + MODULE PROCEDURE cmfe_DataProjection_ResultAnalysisOutputNumber + MODULE PROCEDURE cmfe_DataProjection_ResultAnalysisOutputObj + END INTERFACE cmfe_DataProjection_ResultAnalysisOutput + + !>Returns the projection distance for a data point identified by a given user number. + INTERFACE cmfe_DataProjection_ResultDistanceGet + MODULE PROCEDURE cmfe_DataProjection_ResultDistanceGetNumber + MODULE PROCEDURE cmfe_DataProjection_ResultDistanceGetObj + END INTERFACE cmfe_DataProjection_ResultDistanceGet + + !>Returns the projection element number for a data point identified by a given user number. + INTERFACE cmfe_DataProjection_ResultElementNumberGet + MODULE PROCEDURE cmfe_DataProjection_ResultElementNumberGetNumber + MODULE PROCEDURE cmfe_DataProjection_ResultElementNumberGetObj + END INTERFACE cmfe_DataProjection_ResultElementNumberGet + + !>Returns the projection element face number for a data point identified by a given user number. + INTERFACE cmfe_DataProjection_ResultElementFaceNumberGet + MODULE PROCEDURE cmfe_DataProjection_ResultElementFaceNumberGetNumber + MODULE PROCEDURE cmfe_DataProjection_ResultElementFaceNumberGetObj + END INTERFACE cmfe_DataProjection_ResultElementFaceNumberGet + + !>Returns the projection element line number for a data point identified by a given user number. + INTERFACE cmfe_DataProjection_ResultElementLineNumberGet + MODULE PROCEDURE cmfe_DataProjection_ResultElementLineNumberGetNumber + MODULE PROCEDURE cmfe_DataProjection_ResultElementLineNumberGetObj + END INTERFACE cmfe_DataProjection_ResultElementLineNumberGet + + !>Returns the projection exit tag for a data point identified by a given user number. + INTERFACE cmfe_DataProjection_ResultExitTagGet + MODULE PROCEDURE cmfe_DataProjection_ResultExitTagGetNumber + MODULE PROCEDURE cmfe_DataProjection_ResultExitTagGetObj + END INTERFACE cmfe_DataProjection_ResultExitTagGet - PUBLIC cmfe_DataProjection_ProjectionDataCandidateElementsSet + !>Returns the maximum error for a data projection. + INTERFACE cmfe_DataProjection_ResultMaximumErrorGet + MODULE PROCEDURE cmfe_DataProjection_ResultMaximumErrorGetNumber + MODULE PROCEDURE cmfe_DataProjection_ResultMaximumErrorGetObj + END INTERFACE cmfe_DataProjection_ResultMaximumErrorGet - PUBLIC cmfe_DataProjection_ProjectionCandidateFacesSet + !>Returns the minimum error for a data projection. + INTERFACE cmfe_DataProjection_ResultMinimumErrorGet + MODULE PROCEDURE cmfe_DataProjection_ResultMinimumErrorGetNumber + MODULE PROCEDURE cmfe_DataProjection_ResultMinimumErrorGetObj + END INTERFACE cmfe_DataProjection_ResultMinimumErrorGet - PUBLIC cmfe_DataProjection_ProjectionDataCandidateFacesSet + !>Returns the RMS error for a data projection. + INTERFACE cmfe_DataProjection_ResultRMSErrorGet + MODULE PROCEDURE cmfe_DataProjection_ResultRMSErrorGetNumber + MODULE PROCEDURE cmfe_DataProjection_ResultRMSErrorGetObj + END INTERFACE cmfe_DataProjection_ResultRMSErrorGet - PUBLIC cmfe_DataProjection_ProjectionCandidateLinesSet + !>Returns the projection xi for a data point identified by a given user number. + INTERFACE cmfe_DataProjection_ResultXiGet + MODULE PROCEDURE cmfe_DataProjection_ResultXiGetNumber + MODULE PROCEDURE cmfe_DataProjection_ResultXiGetObj + END INTERFACE cmfe_DataProjection_ResultXiGet - PUBLIC cmfe_DataProjection_ProjectionDataCandidateLinesSet + !>Sets the projection xi for a data point identified by a given user number. + INTERFACE cmfe_DataProjection_ResultXiSet + MODULE PROCEDURE cmfe_DataProjection_ResultXiSetNumber + MODULE PROCEDURE cmfe_DataProjection_ResultXiSetObj + END INTERFACE cmfe_DataProjection_ResultXiSet - PUBLIC cmfe_DataProjection_DataPointsProjectionEvaluate + !>Returns the projection vector for a data point identified by a given user number. + INTERFACE cmfe_DataProjection_ResultProjectionVectorGet + MODULE PROCEDURE cmfe_DataProjection_ResultProjectionVectorGetNumber + MODULE PROCEDURE cmfe_DataProjection_ResultProjectionVectorGetObj + END INTERFACE cmfe_DataProjection_ResultProjectionVectorGet - PUBLIC cmfe_DataProjection_MaximumIterationUpdateGet,cmfe_DataProjection_MaximumIterationUpdateSet + PUBLIC CMFE_DATA_PROJECTION_BOUNDARY_LINES_PROJECTION_TYPE,CMFE_DATA_PROJECTION_BOUNDARY_FACES_PROJECTION_TYPE, & + & CMFE_DATA_PROJECTION_ALL_ELEMENTS_PROJECTION_TYPE - PUBLIC cmfe_DataProjection_MaximumNumberOfIterationsGet,cmfe_DataProjection_MaximumNumberOfIterationsSet + PUBLIC CMFE_DATA_PROJECTION_CANCELLED,CMFE_DATA_PROJECTION_EXIT_TAG_CONVERGED,CMFE_DATA_PROJECTION_EXIT_TAG_BOUNDS, & + & CMFE_DATA_PROJECTION_EXIT_TAG_MAX_ITERATION,CMFE_DATA_PROJECTION_EXIT_TAG_NO_ELEMENT - PUBLIC cmfe_DataProjection_NumberOfClosestElementsGet,cmfe_DataProjection_NumberOfClosestElementsSet + PUBLIC CMFE_DATA_PROJECTION_DISTANCE_GREATER,CMFE_DATA_PROJECTION_DISTANCE_GREATER_EQUAL,CMFE_DATA_PROJECTION_DISTANCE_LESS, & + & CMFE_DATA_PROJECTION_DISTANCE_LESS_EQUAL - PUBLIC cmfe_DataProjection_ProjectionTypeGet,cmfe_DataProjection_ProjectionTypeSet + PUBLIC cmfe_DataProjection_AbsoluteToleranceGet,cmfe_DataProjection_AbsoluteToleranceSet - PUBLIC cmfe_DataProjection_RelativeToleranceGet,cmfe_DataProjection_RelativeToleranceSet + PUBLIC cmfe_DataProjection_CreateFinish,cmfe_DataProjection_CreateStart - PUBLIC cmfe_DataProjection_StartingXiGet,cmfe_DataProjection_StartingXiSet + PUBLIC cmfe_DataProjection_Destroy - PUBLIC cmfe_DataProjection_ElementSet + PUBLIC cmfe_DataProjection_DataPointsPositionEvaluate - PUBLIC cmfe_DataProjection_LabelGet,cmfe_DataProjection_LabelSet + PUBLIC cmfe_DataProjection_ProjectionCancelByDataPoints - PUBLIC cmfe_DataProjection_ResultAnalysisOutput + PUBLIC cmfe_DataProjection_ProjectionCancelByDistance - PUBLIC cmfe_DataProjection_ResultDistanceGet,cmfe_DataProjection_ResultElementNumberGet + PUBLIC cmfe_DataProjection_ProjectionCancelByExitTags - PUBLIC cmfe_DataProjection_ResultElementFaceNumberGet,cmfe_DataProjection_ResultElementLineNumberGet + PUBLIC cmfe_DataProjection_ProjectionCandidateElementsSet - PUBLIC cmfe_DataProjection_ResultExitTagGet + PUBLIC cmfe_DataProjection_ProjectionDataCandidateElementsSet - PUBLIC cmfe_DataProjection_ResultMaximumErrorGet,cmfe_DataProjection_ResultMinimumErrorGet + PUBLIC cmfe_DataProjection_ProjectionCandidateFacesSet - PUBLIC cmfe_DataProjection_ResultRMSErrorGet + PUBLIC cmfe_DataProjection_ProjectionDataCandidateFacesSet - PUBLIC cmfe_DataProjection_ResultXiGet,cmfe_DataProjection_ResultXiSet + PUBLIC cmfe_DataProjection_ProjectionCandidateLinesSet - PUBLIC cmfe_DataProjection_ResultProjectionVectorGet + PUBLIC cmfe_DataProjection_ProjectionDataCandidateLinesSet -!!================================================================================================================================== -!! -!! EquationsRoutines -!! -!!================================================================================================================================== + PUBLIC cmfe_DataProjection_DataPointsProjectionEvaluate - !Module parameters + PUBLIC cmfe_DataProjection_MaximumIterationUpdateGet,cmfe_DataProjection_MaximumIterationUpdateSet - !> \addtogroup OpenCMISS_EquationsConstants OpenCMISS::Iron::Equations::Constants - !> \brief Equations constants. - !>@{ - !> \addtogroup OpenCMISS_EquationsOutputTypes OpenCMISS::Iron::Equations::OutputTypes - !> \brief Equations output types - !> \see OpenCMISS::Iron::Equations,OpenCMISS - !>@{ - INTEGER(INTG), PARAMETER :: CMFE_EQUATIONS_NO_OUTPUT = EQUATIONS_NO_OUTPUT!@} - !> \addtogroup OpenCMISS_EquationsSparsityTypes OpenCMISS::Iron::Equations::SparsityTypes - !> \brief Equations sparsity types - !> \see OpenCMISS::Iron::Equations,OpenCMISS - !>@{ - INTEGER(INTG), PARAMETER :: CMFE_EQUATIONS_SPARSE_MATRICES = EQUATIONS_SPARSE_MATRICES !@} - !> \addtogroup OpenCMISS_EquationsLumpingTypes OpenCMISS::Iron::Equations::LumpingTypes - !> \brief Equations lumping types - !> \see OpenCMISS::Iron::Equations,OpenCMISS - !>@{ - INTEGER(INTG), PARAMETER :: CMFE_EQUATIONS_UNLUMPED_MATRICES = EQUATIONS_UNLUMPED_MATRICES !@} - !> \addtogroup OpenCMISS_EquationsLinearityTypes OpenCMISS::Iron::Equations::LinearityTypes - !> \brief The equations linearity types - !> \see OpenCMISS::Iron::Equations,OpenCMISS - !>@{ - INTEGER(INTG), PARAMETER :: CMFE_EQUATIONS_LINEAR = EQUATIONS_LINEAR !@} - !> \addtogroup OpenCMISS_EquationsTimeDependenceTypes OpenCMISS::Iron::Equations::TimeDependenceTypes - !> \brief The equations time dependence types - !> \see OpenCMISS::Iron::Equations,OpenCMISS - !>@{ - INTEGER(INTG), PARAMETER :: CMFE_EQUATIONS_STATIC = EQUATIONS_STATIC !@} - !> \addtogroup OpenCMISS_EquationsJacobianCalculated OpenCMISS::Iron::Equations::JacobianCalculated - !> \brief Equations Jacobian matrices calculation types - !> \see OpenCMISS::Iron::Equations,OpenCMISS - !>@{ - INTEGER(INTG), PARAMETER :: CMFE_EQUATIONS_JACOBIAN_FINITE_DIFFERENCE_CALCULATED = EQUATIONS_JACOBIAN_FINITE_DIFFERENCE_CALCULATED!@} - !>@} + PUBLIC cmfe_DataProjection_MaximumNumberOfIterationsGet,cmfe_DataProjection_MaximumNumberOfIterationsSet - !Module types + PUBLIC cmfe_DataProjection_NumberOfClosestElementsGet,cmfe_DataProjection_NumberOfClosestElementsSet - !Module variables + PUBLIC cmfe_DataProjection_ProjectionTypeGet,cmfe_DataProjection_ProjectionTypeSet - !Interfaces + PUBLIC cmfe_DataProjection_RelativeToleranceGet,cmfe_DataProjection_RelativeToleranceSet - !>Destroys equations for an equations set. - INTERFACE cmfe_Equations_Destroy - MODULE PROCEDURE cmfe_Equations_DestroyNumber - MODULE PROCEDURE cmfe_Equations_DestroyObj - END INTERFACE cmfe_Equations_Destroy + PUBLIC cmfe_DataProjection_StartingXiGet,cmfe_DataProjection_StartingXiSet - !>Gets the linearity type for equations. - INTERFACE cmfe_Equations_LinearityTypeGet - MODULE PROCEDURE cmfe_Equations_LinearityTypeGetNumber - MODULE PROCEDURE cmfe_Equations_LinearityTypeGetObj - END INTERFACE cmfe_Equations_LinearityTypeGet + PUBLIC cmfe_DataProjection_ElementSet - !>Gets the lumping type for equations. - INTERFACE cmfe_Equations_LumpingTypeGet - MODULE PROCEDURE cmfe_Equations_LumpingTypeGetNumber - MODULE PROCEDURE cmfe_Equations_LumpingTypeGetObj - END INTERFACE cmfe_Equations_LumpingTypeGet + PUBLIC cmfe_DataProjection_LabelGet,cmfe_DataProjection_LabelSet - !>Sets/changes the lumping type for equations. - INTERFACE cmfe_Equations_LumpingTypeSet - MODULE PROCEDURE cmfe_Equations_LumpingTypeSetNumber - MODULE PROCEDURE cmfe_Equations_LumpingTypeSetObj - END INTERFACE cmfe_Equations_LumpingTypeSet + PUBLIC cmfe_DataProjection_ResultAnalysisOutput - !>Gets the output type for equations. - INTERFACE cmfe_Equations_OutputTypeGet - MODULE PROCEDURE cmfe_Equations_OutputTypeGetNumber - MODULE PROCEDURE cmfe_Equations_OutputTypeGetObj - END INTERFACE cmfe_Equations_OutputTypeGet + PUBLIC cmfe_DataProjection_ResultDistanceGet,cmfe_DataProjection_ResultElementNumberGet - !>Sets/changes the output type for equations. - INTERFACE cmfe_Equations_OutputTypeSet - MODULE PROCEDURE cmfe_Equations_OutputTypeSetNumber - MODULE PROCEDURE cmfe_Equations_OutputTypeSetObj - END INTERFACE cmfe_Equations_OutputTypeSet + PUBLIC cmfe_DataProjection_ResultElementFaceNumberGet,cmfe_DataProjection_ResultElementLineNumberGet - !>Gets the sparsity type for equations. - INTERFACE cmfe_Equations_SparsityTypeGet - MODULE PROCEDURE cmfe_Equations_SparsityTypeGetNumber - MODULE PROCEDURE cmfe_Equations_SparsityTypeGetObj - END INTERFACE cmfe_Equations_SparsityTypeGet + PUBLIC cmfe_DataProjection_ResultExitTagGet - !>Sets/changes the sparsity type for equations. - INTERFACE cmfe_Equations_SparsityTypeSet - MODULE PROCEDURE cmfe_Equations_SparsityTypeSetNumber - MODULE PROCEDURE cmfe_Equations_SparsityTypeSetObj - END INTERFACE cmfe_Equations_SparsityTypeSet + PUBLIC cmfe_DataProjection_ResultMaximumErrorGet,cmfe_DataProjection_ResultMinimumErrorGet - !>Gets the time dependence type for equations. - INTERFACE cmfe_Equations_TimeDependenceTypeGet - MODULE PROCEDURE cmfe_Equations_TimeDependenceTypeGetNumber - MODULE PROCEDURE cmfe_Equations_TimeDependenceTypeGetObj - END INTERFACE cmfe_Equations_TimeDependenceTypeGet + PUBLIC cmfe_DataProjection_ResultRMSErrorGet - PUBLIC CMFE_EQUATIONS_NO_OUTPUT,CMFE_EQUATIONS_TIMING_OUTPUT,CMFE_EQUATIONS_MATRIX_OUTPUT, & - & CMFE_EQUATIONS_ELEMENT_MATRIX_OUTPUT,CMFE_EQUATIONS_NODAL_MATRIX_OUTPUT + PUBLIC cmfe_DataProjection_ResultXiGet,cmfe_DataProjection_ResultXiSet - PUBLIC CMFE_EQUATIONS_SPARSE_MATRICES,CMFE_EQUATIONS_FULL_MATRICES + PUBLIC cmfe_DataProjection_ResultProjectionVectorGet - PUBLIC CMFE_EQUATIONS_JACOBIAN_FINITE_DIFFERENCE_CALCULATED, CMFE_EQUATIONS_JACOBIAN_ANALYTIC_CALCULATED +!================================================================================================================================== +! +! EquationsRoutines +! +!================================================================================================================================== + + !Module parameters + + !> \addtogroup OpenCMISS_EquationsConstants OpenCMISS::Iron::Equations::Constants + !> \brief Equations constants. + !>@{ + !> \addtogroup OpenCMISS_EquationsOutputTypes OpenCMISS::Iron::Equations::OutputTypes + !> \brief Equations output types + !> \see OpenCMISS::Iron::Equations,OpenCMISS + !>@{ + INTEGER(INTG), PARAMETER :: CMFE_EQUATIONS_NO_OUTPUT = EQUATIONS_NO_OUTPUT!@} + !> \addtogroup OpenCMISS_EquationsSparsityTypes OpenCMISS::Iron::Equations::SparsityTypes + !> \brief Equations sparsity types + !> \see OpenCMISS::Iron::Equations,OpenCMISS + !>@{ + INTEGER(INTG), PARAMETER :: CMFE_EQUATIONS_SPARSE_MATRICES = EQUATIONS_SPARSE_MATRICES !@} + !> \addtogroup OpenCMISS_EquationsLumpingTypes OpenCMISS::Iron::Equations::LumpingTypes + !> \brief Equations lumping types + !> \see OpenCMISS::Iron::Equations,OpenCMISS + !>@{ + INTEGER(INTG), PARAMETER :: CMFE_EQUATIONS_UNLUMPED_MATRICES = EQUATIONS_UNLUMPED_MATRICES !@} + !> \addtogroup OpenCMISS_EquationsLinearityTypes OpenCMISS::Iron::Equations::LinearityTypes + !> \brief The equations linearity types + !> \see OpenCMISS::Iron::Equations,OpenCMISS + !>@{ + INTEGER(INTG), PARAMETER :: CMFE_EQUATIONS_LINEAR = EQUATIONS_LINEAR !@} + !> \addtogroup OpenCMISS_EquationsTimeDependenceTypes OpenCMISS::Iron::Equations::TimeDependenceTypes + !> \brief The equations time dependence types + !> \see OpenCMISS::Iron::Equations,OpenCMISS + !>@{ + INTEGER(INTG), PARAMETER :: CMFE_EQUATIONS_STATIC = EQUATIONS_STATIC !@} + !> \addtogroup OpenCMISS_EquationsJacobianCalculated OpenCMISS::Iron::Equations::JacobianCalculated + !> \brief Equations Jacobian matrices calculation types + !> \see OpenCMISS::Iron::Equations,OpenCMISS + !>@{ + INTEGER(INTG), PARAMETER :: CMFE_EQUATIONS_JACOBIAN_FINITE_DIFFERENCE_CALCULATED = EQUATIONS_JACOBIAN_FINITE_DIFFERENCE_CALCULATED!@} + !>@} + + !Module types + + !Module variables + + !Interfaces + + !>Destroys equations for an equations set. + INTERFACE cmfe_Equations_Destroy + MODULE PROCEDURE cmfe_Equations_DestroyNumber + MODULE PROCEDURE cmfe_Equations_DestroyObj + END INTERFACE cmfe_Equations_Destroy + + !>Gets the linearity type for equations. + INTERFACE cmfe_Equations_LinearityTypeGet + MODULE PROCEDURE cmfe_Equations_LinearityTypeGetNumber + MODULE PROCEDURE cmfe_Equations_LinearityTypeGetObj + END INTERFACE cmfe_Equations_LinearityTypeGet + + !>Gets the lumping type for equations. + INTERFACE cmfe_Equations_LumpingTypeGet + MODULE PROCEDURE cmfe_Equations_LumpingTypeGetNumber + MODULE PROCEDURE cmfe_Equations_LumpingTypeGetObj + END INTERFACE cmfe_Equations_LumpingTypeGet + + !>Sets/changes the lumping type for equations. + INTERFACE cmfe_Equations_LumpingTypeSet + MODULE PROCEDURE cmfe_Equations_LumpingTypeSetNumber + MODULE PROCEDURE cmfe_Equations_LumpingTypeSetObj + END INTERFACE cmfe_Equations_LumpingTypeSet + + !>Gets the output type for equations. + INTERFACE cmfe_Equations_OutputTypeGet + MODULE PROCEDURE cmfe_Equations_OutputTypeGetNumber + MODULE PROCEDURE cmfe_Equations_OutputTypeGetObj + END INTERFACE cmfe_Equations_OutputTypeGet + + !>Sets/changes the output type for equations. + INTERFACE cmfe_Equations_OutputTypeSet + MODULE PROCEDURE cmfe_Equations_OutputTypeSetNumber + MODULE PROCEDURE cmfe_Equations_OutputTypeSetObj + END INTERFACE cmfe_Equations_OutputTypeSet + +!>Gets the sparsity type for equations. + INTERFACE cmfe_Equations_SparsityTypeGet + MODULE PROCEDURE cmfe_Equations_SparsityTypeGetNumber + MODULE PROCEDURE cmfe_Equations_SparsityTypeGetObj + END INTERFACE cmfe_Equations_SparsityTypeGet + + !>Sets/changes the sparsity type for equations. + INTERFACE cmfe_Equations_SparsityTypeSet + MODULE PROCEDURE cmfe_Equations_SparsityTypeSetNumber + MODULE PROCEDURE cmfe_Equations_SparsityTypeSetObj + END INTERFACE cmfe_Equations_SparsityTypeSet + + !>Gets the time dependence type for equations. + INTERFACE cmfe_Equations_TimeDependenceTypeGet + MODULE PROCEDURE cmfe_Equations_TimeDependenceTypeGetNumber + MODULE PROCEDURE cmfe_Equations_TimeDependenceTypeGetObj + END INTERFACE cmfe_Equations_TimeDependenceTypeGet - PUBLIC CMFE_EQUATIONS_UNLUMPED_MATRICES,CMFE_EQUATIONS_LUMPED_MATRICES + PUBLIC CMFE_EQUATIONS_NO_OUTPUT,CMFE_EQUATIONS_TIMING_OUTPUT,CMFE_EQUATIONS_MATRIX_OUTPUT, & + & CMFE_EQUATIONS_ELEMENT_MATRIX_OUTPUT,CMFE_EQUATIONS_NODAL_MATRIX_OUTPUT - PUBLIC CMFE_EQUATIONS_LINEAR,CMFE_EQUATIONS_NONLINEAR,CMFE_EQUATIONS_NONLINEAR_BCS + PUBLIC CMFE_EQUATIONS_SPARSE_MATRICES,CMFE_EQUATIONS_FULL_MATRICES - PUBLIC CMFE_EQUATIONS_STATIC,CMFE_EQUATIONS_QUASISTATIC,CMFE_EQUATIONS_FIRST_ORDER_DYNAMIC, & - & CMFE_EQUATIONS_SECOND_ORDER_DYNAMIC, & - & CMFE_EQUATIONS_TIME_STEPPING + PUBLIC CMFE_EQUATIONS_JACOBIAN_FINITE_DIFFERENCE_CALCULATED, CMFE_EQUATIONS_JACOBIAN_ANALYTIC_CALCULATED - PUBLIC cmfe_Equations_Destroy + PUBLIC CMFE_EQUATIONS_UNLUMPED_MATRICES,CMFE_EQUATIONS_LUMPED_MATRICES - PUBLIC cmfe_Equations_LinearityTypeGet + PUBLIC CMFE_EQUATIONS_LINEAR,CMFE_EQUATIONS_NONLINEAR,CMFE_EQUATIONS_NONLINEAR_BCS - PUBLIC cmfe_Equations_LumpingTypeGet,cmfe_Equations_LumpingTypeSet + PUBLIC CMFE_EQUATIONS_STATIC,CMFE_EQUATIONS_QUASISTATIC,CMFE_EQUATIONS_FIRST_ORDER_DYNAMIC, & + & CMFE_EQUATIONS_SECOND_ORDER_DYNAMIC, & + & CMFE_EQUATIONS_TIME_STEPPING - PUBLIC cmfe_Equations_OutputTypeGet,cmfe_Equations_OutputTypeSet + PUBLIC cmfe_Equations_Destroy - PUBLIC cmfe_Equations_SparsityTypeGet,cmfe_Equations_SparsityTypeSet + PUBLIC cmfe_Equations_LinearityTypeGet - PUBLIC cmfe_Equations_TimeDependenceTypeGet + PUBLIC cmfe_Equations_LumpingTypeGet,cmfe_Equations_LumpingTypeSet - PUBLIC cmfe_Equations_JacobianMatricesTypesSet + PUBLIC cmfe_Equations_OutputTypeGet,cmfe_Equations_OutputTypeSet - PUBLIC cmfe_Equations_NumberOfLinearMatricesGet + PUBLIC cmfe_Equations_SparsityTypeGet,cmfe_Equations_SparsityTypeSet - PUBLIC cmfe_Equations_NumberOfJacobianMatricesGet + PUBLIC cmfe_Equations_TimeDependenceTypeGet - PUBLIC cmfe_Equations_NumberOfDynamicMatricesGet + PUBLIC cmfe_Equations_JacobianMatricesTypesSet - PUBLIC cmfe_Equations_LinearMatrixGet + PUBLIC cmfe_Equations_NumberOfLinearMatricesGet - PUBLIC cmfe_Equations_JacobianMatrixGet + PUBLIC cmfe_Equations_NumberOfJacobianMatricesGet - PUBLIC cmfe_Equations_DynamicMatrixGet + PUBLIC cmfe_Equations_NumberOfDynamicMatricesGet - PUBLIC cmfe_Equations_DynamicMatrixGetByType + PUBLIC cmfe_Equations_LinearMatrixGet - PUBLIC cmfe_Equations_DynamicMatrixTypeGet + PUBLIC cmfe_Equations_JacobianMatrixGet - PUBLIC cmfe_Equations_RhsVectorGet + PUBLIC cmfe_Equations_DynamicMatrixGet - PUBLIC cmfe_Equations_ResidualVectorGet + PUBLIC cmfe_Equations_DynamicMatrixGetByType - PUBLIC cmfe_Equations_ResidualNumberOfVariablesGet + PUBLIC cmfe_Equations_DynamicMatrixTypeGet - PUBLIC cmfe_Equations_ResidualVariablesGet + PUBLIC cmfe_Equations_RhsVectorGet - PUBLIC cmfe_Equations_SourceVectorGet + PUBLIC cmfe_Equations_ResidualVectorGet -!!================================================================================================================================== -!! -!! EquationsSetConstants -!! -!!================================================================================================================================== + PUBLIC cmfe_Equations_ResidualNumberOfVariablesGet - !Module parameters + PUBLIC cmfe_Equations_ResidualVariablesGet - !> \addtogroup OpenCMISS_EquationsSetConstants OpenCMISS::Iron::EquationsSet::Constants - !> \brief Equations set constants. - !>@{ - !> \addtogroup OpenCMISS_EquationsSetClasses OpenCMISS::Iron::EquationsSet::Classes - !> \brief Equations set classes. - !> \see OpenCMISS::Iron::EquationsSet,OpenCMISS - !>@{ - INTEGER(INTG), PARAMETER :: CMFE_EQUATIONS_SET_NO_CLASS = EQUATIONS_SET_NO_CLASS !@} - !> \addtogroup OpenCMISS_EquationsSetTypes OpenCMISS::Iron::EquationsSet::Types - !> \brief Equations set Types. - !> \see OpenCMISS::Iron::EquationsSet,OpenCMISS - !>@{ - INTEGER(INTG), PARAMETER :: CMFE_EQUATIONS_SET_NO_TYPE = EQUATIONS_SET_NO_TYPE !@} - !> \addtogroup OpenCMISS_EquationsSetSubtypes OpenCMISS::Iron::EquationsSet::Subtypes - !> \brief Equations set subtypes. - !> \see OpenCMISS::Iron::EquationsSet,OpenCMISS - !>@{ - INTEGER(INTG), PARAMETER :: CMFE_EQUATIONS_SET_NO_SUBTYPE = EQUATIONS_SET_NO_SUBTYPE !@} - !> \addtogroup OpenCMISS_EquationsSetFittingSmoothingTypes OpenCMISS::Iron::EquationsSet::Fitting::SmoothingTypes - !> \brief The smoothing types for fitting equations sets. - !> \see OpenCMISS::Iron::EquationsSet,OpenCMISS - !>@{ - INTEGER(INTG), PARAMETER :: CMFE_EQUATIONS_SET_FITTING_NO_SMOOTHING = & - & EQUATIONS_SET_FITTING_NO_SMOOTHING !@} - - !>@} - !> \addtogroup OpenCMISS_EquationsSetSolutionMethods OpenCMISS::Iron::EquationsSet::SolutionMethods - !> \brief The solution method parameters - !> \see OpenCMISS::Iron::EquationsSet,OpenCMISS - !>@{ - INTEGER(INTG), PARAMETER :: CMFE_EQUATIONS_SET_FEM_SOLUTION_METHOD = EQUATIONS_SET_FEM_SOLUTION_METHOD !@} - - !> \addtogroup OpenCMISS_EquationsSetDerivedTensorTypes OpenCMISS::Iron::EquationsSet::DerivedTensorTypes - !> \brief EquationsSet derived tensor type parameters - !> \see OpenCMISS::Iron::EquationsSet,OpenCMISS - !>@{ - INTEGER(INTG), PARAMETER :: CMFE_EQUATIONS_SET_DERIVED_DEFORMATION_GRADIENT = EQUATIONS_SET_DEFORMATION_GRADIENT_TENSOR !@} - - !> \addtogroup OpenCMISS_EquationsSetDynamicMatrixTypes OpenCMISS::Iron::EquationsSet::DynamicMatrixTypes - !> \brief Type of matrix in a dynamic equations set - !>@{ - INTEGER(INTG), PARAMETER :: CMFE_EQUATIONS_MATRIX_STIFFNESS=EQUATIONS_MATRIX_STIFFNESS !@} - !> \addtogroup OpenCMISS_EquationsSetOutputTypes OpenCMISS::Iron::EquationsSet::OutputTypes - !> \brief Equations set output types - !> \see OpenCMISS::Iron::EquationsSet,OpenCMISS - !>@{ - INTEGER(INTG), PARAMETER :: CMFE_EQUATIONS_SET_NO_OUTPUT = EQUATIONS_SET_NO_OUTPUT!@} + PUBLIC cmfe_Equations_SourceVectorGet - !> \addtogroup OpenCMISS_EquationsSetAnalyticFunctionTypes OpenCMISS::Iron::EquationsSet::AnalyticFunctionTypes - !> \brief The analytic function types. - !> \see OpenCMISS::Iron::EquationsSet,OpenCMISS - !>@{ - !> \addtogroup OpenCMISS_EquationsSetLaplaceAnalyticFunctionTypes OpenCMISS::Iron::EquationsSet::AnalyticFunctionTypes::Laplace - !> \brief The analytic function types for a Laplace equation - !> \see OpenCMISS::Iron::EquationsSet::AnalyticFunctionTypes,OpenCMISS - !>@{ - INTEGER(INTG), PARAMETER :: CMFE_EQUATIONS_SET_LAPLACE_EQUATION_TWO_DIM_1 = EQUATIONS_SET_LAPLACE_EQUATION_TWO_DIM_1 !@} - !> \addtogroup OpenCMISS_EquationsSetHelmholtzAnalyticFunctionTypes OpenCMISS::Iron::EquationsSet::AnalyticFunctionTypes::Helmholtz - !> \brief The analytic function types for a Helmholtz equation - !> \see OpenCMISS::Iron::EquationsSet::AnalyticFunctionTypes,OpenCMISS - !>@{ - INTEGER(INTG), PARAMETER :: CMFE_EQUATIONS_SET_HELMHOLTZ_EQUATION_TWO_DIM_1 = EQUATIONS_SET_HELMHOLTZ_EQUATION_TWO_DIM_1 !@} - !> \addtogroup OpenCMISS_PoiseuilleAnalyticFunctionTypes OpenCMISS::Iron::EquationsSet::AnalyticFunctionTypes::Poiseuille - !> \brief The analytic function types for a Poiseuille equation. - !> \see OpenCMISS::Iron::EquationsSet::AnalyticFunctionTypes,OpenCMISS - !>@{ - INTEGER(INTG), PARAMETER :: CMFE_EQUATIONS_SET_POISEUILLE_EQUATION_TWO_DIM_1 = EQUATIONS_SET_POISEUILLE_EQUATION_TWO_DIM_1 !@} - !> \addtogroup OpenCMISS_PoissonAnalyticFunctionTypes OpenCMISS::Iron::EquationsSet::AnalyticFunctionTypes::Poisson - !> \brief The analytic function types for a Poisson equation. - !> \see OpenCMISS::Iron::EquationsSet::AnalyticFunctionTypes,OpenCMISS - !>@{ - INTEGER(INTG), PARAMETER :: CMFE_EQUATIONS_SET_POISSON_EQUATION_TWO_DIM_1 = EQUATIONS_SET_POISSON_EQUATION_TWO_DIM_1 !@} - !> \addtogroup OpenCMISS_DiffusionAnalyticFunctionTypes OpenCMISS::Iron::EquationsSet::AnalyticFunctionTypes::Diffusion - !> \brief The analytic function types for a diffusion equation. - !> \see OpenCMISS::Iron::EquationsSet::AnalyticFunctionTypes,OpenCMISS - !>@{ - INTEGER(INTG), PARAMETER :: CMFE_EQUATIONS_SET_DIFFUSION_EQUATION_ONE_DIM_1 = EQUATIONS_SET_DIFFUSION_EQUATION_ONE_DIM_1 - INTEGER(INTG), PARAMETER :: CMFE_EQUATIONS_SET_DIFFUSION_EQUATION_TWO_DIM_1 = EQUATIONS_SET_DIFFUSION_EQUATION_TWO_DIM_1 !@} - !> \addtogroup OpenCMISS_AdvectionDiffusionAnalyticFunctionTypes OpenCMISS::Iron::EquationsSet::AnalyticFunctionTypes::AdvectionDiffusion - !> \brief The analytic function types for an advection-diffusion equation. - !> \see OpenCMISS::Iron::EquationsSet::AnalyticFunctionTypes,OpenCMISS - !>@{ - INTEGER(INTG), PARAMETER :: CMFE_EQUATIONS_SET_ADVECTION_DIFFUSION_EQUATION_TWO_DIM_1 = & - & EQUATIONS_SET_ADVECTION_DIFFUSION_EQUATION_TWO_DIM_1 ! \addtogroup OpenCMISS_StokesAnalyticFunctionTypes OpenCMISS::Iron::EquationsSet::AnalyticFunctionTypes::Stokes - !> \brief The analytic function types for a Stokes equation. - !> \see OpenCMISS::Iron::EquationsSet::AnalyticFunctionTypes,OpenCMISS - !>@{ - INTEGER(INTG), PARAMETER :: CMFE_EQUATIONS_SET_STOKES_EQUATION_TWO_DIM_1 = EQUATIONS_SET_STOKES_EQUATION_TWO_DIM_1 !@} - !> \addtogroup OpenCMISS_NavierStokesAnalyticFunctionTypes OpenCMISS::Iron::EquationsSet::AnalyticFunctionTypes::NavierStokes - !> \brief The analytic function types for a Navier-Stokes equation. - !> \see OpenCMISS::Iron::EquationsSet::AnalyticFunctionTypes,OpenCMISS - !>@{ - INTEGER(INTG), PARAMETER :: CMFE_EQUATIONS_SET_NAVIER_STOKES_EQUATION_TWO_DIM_POISEUILLE= & - & EQUATIONS_SET_NAVIER_STOKES_EQUATION_TWO_DIM_POISEUILLE !< fully developed 2D channel flow (parabolic) \see OpenCMISS_EquationsSetNavierStokesAnalyticFunctionTypes,OpenCMISS - INTEGER(INTG), PARAMETER :: CMFE_EQUATIONS_SET_NAVIER_STOKES_EQUATION_TWO_DIM_TAYLOR_GREEN= & - & EQUATIONS_SET_NAVIER_STOKES_EQUATION_TWO_DIM_TAYLOR_GREEN !< 2D dynamic nonlinear Taylor-Green vortex decay \see OpenCMISS_EquationsSetNavierStokesAnalyticFunctionTypes,OpenCMISS - INTEGER(INTG), PARAMETER :: CMFE_EQUATIONS_SET_NAVIER_STOKES_EQUATION_FLOWRATE_AORTA= & - & EQUATIONS_SET_NAVIER_STOKES_EQUATION_FLOWRATE_AORTA !< A fourier decomposed flow waveform for boundary conditions - INTEGER(INTG), PARAMETER :: CMFE_EQUATIONS_SET_NAVIER_STOKES_EQUATION_SINUSOID= & - & EQUATIONS_SET_NAVIER_STOKES_EQUATION_SINUSOID !< A sinusoidal flow waveform - INTEGER(INTG), PARAMETER :: CMFE_EQUATIONS_SET_NAVIER_STOKES_EQUATION_SPLINT_FROM_FILE= & - & EQUATIONS_SET_NAVIER_STOKES_EQUATION_SPLINT_FROM_FILE !< Spline integration of dependent values specified in a file - INTEGER(INTG), PARAMETER :: CMFE_EQUATIONS_SET_NAVIER_STOKES_EQUATION_TWO_DIM_1 = EQUATIONS_SET_NAVIER_STOKES_EQUATION_TWO_DIM_1 !@} - !> \addtogroup OpenCMISS_DarcyAnalyticFunctionTypes OpenCMISS::Iron::EquationsSet::AnalyticFunctionTypes::Darcy - !> \brief The analytic function types for a Darcy equation. - !> \see OpenCMISS::Iron::EquationsSet::AnalyticFunctionTypes,OpenCMISS - !>@{ - INTEGER(INTG), PARAMETER :: CMFE_EQUATIONS_SET_DARCY_EQUATION_TWO_DIM_1 = EQUATIONS_SET_DARCY_EQUATION_TWO_DIM_1 !@} - !> \addtogroup OpenCMISS_BurgersAnalyticFunctionTypes OpenCMISS::Iron::EquationsSet::AnalyticFunctionTypes::Burgers - !> \brief The analytic function types for a Burgers equation. - !> \see OpenCMISS::Iron::EquationsSet::AnalyticFunctionTypes,OpenCMISS - !>@{ - INTEGER(INTG), PARAMETER :: CMFE_EQUATIONS_SET_BURGERS_EQUATION_ONE_DIM_1 = EQUATIONS_SET_BURGERS_EQUATION_ONE_DIM_1 - INTEGER(INTG), PARAMETER :: CMFE_EQUATIONS_SET_GENERALISED_BURGERS_EQUATION_ONE_DIM_1 = & - & EQUATIONS_SET_GENERALISED_BURGERS_EQUATION_ONE_DIM_1 - INTEGER(INTG), PARAMETER :: CMFE_EQUATIONS_SET_GENERALISED_BURGERS_EQUATION_ONE_DIM_2 = & - & EQUATIONS_SET_GENERALISED_BURGERS_EQUATION_ONE_DIM_2 - INTEGER(INTG), PARAMETER :: CMFE_EQUATIONS_SET_STATIC_BURGERS_EQUATION_ONE_DIM_1 = & - & EQUATIONS_SET_STATIC_BURGERS_EQUATION_ONE_DIM_1 - !>@} - - !> \addtogroup OpenCMISS_EquationsSetLinearElasticityAnalyticFunctionTypes OpenCMISS::Iron::EquationsSet::AnalyticFunctionTypes::LinearElasticity - !> \brief The analytic function types for a LinearElasticity equation - !> \see OpenCMISS::Iron::EquationsSet::AnalyticFunctionTypes,OpenCMISS - !>@{ - INTEGER(INTG), PARAMETER :: CMFE_EQUATIONS_SET_LINEAR_ELASTICITY_ONE_DIM_1 = EQUATIONS_SET_LINEAR_ELASTICITY_ONE_DIM_1 !@} - !> \addtogroup OpenCMISS_EquationsSetFiniteElasticityAnalyticFunctionTypes OpenCMISS::Iron::EquationsSet::AnalyticFunctionTypes::FiniteElasticity - !> \brief The analytic function types for a FiniteElasticity equation - !> \see OpenCMISS::Iron::EquationsSet::AnalyticFunctionTypes,OpenCMISS - !>@{ - INTEGER(INTG), PARAMETER :: CMFE_EQUATIONS_SET_FINITE_ELASTICITY_CYLINDER = EQUATIONS_SET_FINITE_ELASTICITY_CYLINDER !@} - !>@} - !>@} - - !> \addtogroup OpenCMISS_AnalyticParamIndices OpenCMISS::Iron::FiniteElasticity::AnalyticParamIndices - !> \brief Indices for EQUATIONS_SET_ANALYTIC_TYPE%ANALYTIC_USER_PARAMS - !> \see OpenCMISS::Iron::FiniteElasticity::AnalyticParamIndices,OpenCMISS - !>@{ - INTEGER(INTG), PARAMETER :: CMFE_FINITE_ELASTICITY_ANALYTIC_CYLINDER_PARAM_PIN_IDX = & - & FINITE_ELASTICITY_ANALYTIC_CYLINDER_PARAM_PIN_IDX !@} - - !Module types - - !Module variables - - !Interfaces - - PUBLIC CMFE_EQUATIONS_SET_NO_CLASS,CMFE_EQUATIONS_SET_ELASTICITY_CLASS,CMFE_EQUATIONS_SET_FLUID_MECHANICS_CLASS, & - & CMFE_EQUATIONS_SET_ELECTROMAGNETICS_CLASS,CMFE_EQUATIONS_SET_CLASSICAL_FIELD_CLASS,CMFE_EQUATIONS_SET_BIOELECTRICS_CLASS, & - & CMFE_EQUATIONS_SET_MODAL_CLASS,CMFE_EQUATIONS_SET_FITTING_CLASS,CMFE_EQUATIONS_SET_OPTIMISATION_CLASS, & - & CMFE_EQUATIONS_SET_MULTI_PHYSICS_CLASS - - PUBLIC CMFE_EQUATIONS_SET_NO_TYPE,CMFE_EQUATIONS_SET_LINEAR_ELASTICITY_TYPE,CMFE_EQUATIONS_SET_FINITE_ELASTICITY_TYPE, & - & CMFE_EQUATIONS_SET_STOKES_EQUATION_TYPE,CMFE_EQUATIONS_SET_NAVIER_STOKES_EQUATION_TYPE, & - & CMFE_EQUATIONS_SET_DARCY_EQUATION_TYPE, & - & CMFE_EQUATIONS_SET_DARCY_PRESSURE_EQUATION_TYPE,CMFE_EQUATIONS_SET_BURGERS_EQUATION_TYPE, & - & CMFE_EQUATIONS_SET_STATIC_POISEUILLE_SUBTYPE, & - & CMFE_EQUATIONS_SET_DYNAMIC_POISEUILLE_SUBTYPE, & - & CMFE_EQUATIONS_SET_CHARACTERISTIC_EQUATION_TYPE, & - & CMFE_EQUATIONS_SET_STREE_EQUATION_TYPE, & - & CMFE_EQUATIONS_SET_ELECTROSTATIC_TYPE,CMFE_EQUATIONS_SET_MAGNETOSTATIC_TYPE,CMFE_EQUATIONS_SET_MAXWELLS_EQUATIONS_TYPE, & - & CMFE_EQUATIONS_SET_LAPLACE_EQUATION_TYPE,CMFE_EQUATIONS_SET_POISEUILLE_EQUATION_TYPE, & - & CMFE_EQUATIONS_SET_POISSON_EQUATION_TYPE, & - & CMFE_EQUATIONS_SET_HELMHOLTZ_EQUATION_TYPE,CMFE_EQUATIONS_SET_WAVE_EQUATION_TYPE, & - & CMFE_EQUATIONS_SET_DIFFUSION_EQUATION_TYPE,CMFE_EQUATIONS_SET_ADVECTION_EQUATION_TYPE, & - & CMFE_EQUATIONS_SET_ADVECTION_DIFFUSION_EQUATION_TYPE,CMFE_EQUATIONS_SET_REACTION_DIFFUSION_EQUATION_TYPE, & - & CMFE_EQUATIONS_SET_BIHARMONIC_EQUATION_TYPE,CMFE_EQUATIONS_SET_MONODOMAIN_EQUATION_TYPE, & - & CMFE_EQUATIONS_SET_BIDOMAIN_EQUATION_TYPE, & - & CMFE_EQUATIONS_SET_LINEAR_ELASTIC_MODAL_TYPE, & - & CMFE_EQUATIONS_SET_DATA_FITTING_EQUATION_TYPE,CMFE_EQUATIONS_SET_GAUSS_FITTING_EQUATION_TYPE, & - & CMFE_EQUATIONS_SET_MONODOMAIN_STRANG_SPLITTING_EQUATION_TYPE - - PUBLIC CMFE_EQUATIONS_SET_FINITE_ELASTICITY_DARCY_TYPE, & - & CMFE_EQUATIONS_SET_FINITE_ELASTICITY_STOKES_TYPE, CMFE_EQUATIONS_SET_FINITE_ELASTICITY_NAVIER_STOKES_TYPE, & - & CMFE_EQUATIONS_SET_DIFFUSION_DIFFUSION_TYPE, CMFE_EQUATIONS_SET_DIFFUSION_ADVECTION_DIFFUSION_TYPE - - PUBLIC CMFE_EQUATIONS_SET_NO_SUBTYPE,CMFE_EQUATIONS_SET_THREE_DIMENSIONAL_SUBTYPE, & - & CMFE_EQUATIONS_SET_TWO_DIMENSIONAL_PLANE_STRESS_SUBTYPE, & - & CMFE_EQUATIONS_SET_TWO_DIMENSIONAL_PLANE_STRAIN_SUBTYPE,CMFE_EQUATIONS_SET_ONE_DIMENSIONAL_SUBTYPE, & - & CMFE_EQUATIONS_SET_PLATE_SUBTYPE, & - & CMFE_EQUATIONS_SET_SHELL_SUBTYPE, & - & CMFE_EQUATIONS_SET_INCOMPRESSIBLE_MOONEY_RIVLIN_SUBTYPE,CMFE_EQUATIONS_SET_NEARLY_INCOMPRESSIBLE_MOONEY_RIVLIN_SUBTYPE, & - & CMFE_EQUATIONS_SET_MOONEY_RIVLIN_SUBTYPE, & - & CMFE_EQUATIONS_SET_REFERENCE_STATE_MOONEY_RIVLIN_SUBTYPE, CMFE_EQUATIONS_SET_ISOTROPIC_EXPONENTIAL_SUBTYPE, & - & CMFE_EQUATIONS_SET_ACTIVECONTRACTION_SUBTYPE,CMFE_EQUATIONS_SET_MOONEY_RIVLIN_ACTIVECONTRACTION_SUBTYPE, & - & CMFE_EQUATIONS_SET_COMPRESSIBLE_ACTIVECONTRACTION_SUBTYPE,CMFE_EQUATIONS_SET_TRANSVERSE_ISOTROPIC_ACTIVE_SUBTYPE, & - & CMFE_EQUATIONS_SET_TRANS_ISOTROPIC_ACTIVE_TRANSITION_SUBTYPE, & - & CMFE_EQUATIONS_SET_TRANSVERSE_ISOTROPIC_POLYNOMIAL_SUBTYPE,CMFE_EQUATIONS_SET_STVENANT_KIRCHOFF_ACTIVECONTRACTION_SUBTYPE, & - & CMFE_EQUATIONS_SET_ANISOTROPIC_POLYNOMIAL_SUBTYPE,CMFE_EQUATIONS_SET_ANISOTROPIC_POLYNOMIAL_ACTIVE_SUBTYPE, & - & CMFE_EQUATIONS_SET_TRANSVERSE_ISOTROPIC_EXPONENTIAL_SUBTYPE,CMFE_EQUATIONS_SET_ORTHOTROPIC_MATERIAL_COSTA_SUBTYPE, & - & CMFE_EQUATIONS_SET_COMPRESSIBLE_FINITE_ELASTICITY_SUBTYPE,CMFE_EQUATIONS_SET_INCOMPRESS_FINITE_ELASTICITY_DARCY_SUBTYPE, & - & CMFE_EQUATIONS_SET_ELASTICITY_DARCY_INRIA_MODEL_SUBTYPE,CMFE_EQUATIONS_SET_ELASTICITY_MULTI_COMP_DARCY_INRIA_SUBTYPE, & - & CMFE_EQUATIONS_SET_INCOMPRESS_ELASTICITY_DRIVEN_DARCY_SUBTYPE, & - & CMFE_EQUATIONS_SET_INCOMPRESSIBLE_ELASTICITY_DRIVEN_MR_SUBTYPE, & - & CMFE_EQUATIONS_SET_INCOMPRESS_ELAST_MULTI_COMP_DARCY_SUBTYPE,CMFE_EQUATIONS_SET_TRANSVERSE_ISOTROPIC_GUCCIONE_SUBTYPE, & - & CMFE_EQUATIONS_SET_GUCCIONE_ACTIVECONTRACTION_SUBTYPE, & - & CMFE_EQUATIONS_SET_ACTIVE_STRAIN_SUBTYPE, & - & CMFE_EQUATIONS_SET_MULTISCALE_ACTIVE_STRAIN_SUBTYPE, & - & CMFE_EQUATIONS_SET_REFERENCE_STATE_TRANSVERSE_GUCCIONE_SUBTYPE, & - & CMFE_EQUATIONS_SET_MEMBRANE_SUBTYPE, CMFE_EQUATIONS_SET_ORTHOTROPIC_HOLZAPFEL_OGDEN_SUBTYPE, & - & CMFE_EQUATIONS_SET_HOLZAPFEL_OGDEN_ACTIVECONTRACTION_SUBTYPE, & - & CMFE_EQUATIONS_SET_ELASTICITY_FLUID_PRES_STATIC_INRIA_SUBTYPE, & - & CMFE_EQUATIONS_SET_ELASTICITY_FLUID_PRES_HOLMES_MOW_SUBTYPE, & - & CMFE_EQUATIONS_SET_ELASTI_FLUID_PRES_HOLMES_MOW_ACTIVE_SUBTYPE, & - & CMFE_EQUATIONS_SET_TRANSVERSE_ISOTROPIC_HUMPHREY_YIN_SUBTYPE, & - & CMFE_EQUATIONS_SET_STATIC_STOKES_SUBTYPE, CMFE_EQUATIONS_SET_LAPLACE_STOKES_SUBTYPE, & - & CMFE_EQUATIONS_SET_TRANSIENT_STOKES_SUBTYPE,CMFE_EQUATIONS_SET_ALE_STOKES_SUBTYPE, & - & CMFE_EQUATIONS_SET_ALE_NAVIER_STOKES_SUBTYPE, CMFE_EQUATIONS_SET_ALE_RBS_NAVIER_STOKES_SUBTYPE, & - & CMFE_EQUATIONS_SET_OPTIMISED_STOKES_SUBTYPE,CMFE_EQUATIONS_SET_STATIC_NAVIER_STOKES_SUBTYPE, & - & CMFE_EQUATIONS_SET_LAPLACE_NAVIER_STOKES_SUBTYPE,CMFE_EQUATIONS_SET_TRANSIENT_NAVIER_STOKES_SUBTYPE, & - & CMFE_EQUATIONS_SET_TRANSIENT1D_NAVIER_STOKES_SUBTYPE, CMFE_EQUATIONS_SET_TRANSIENT_RBS_NAVIER_STOKES_SUBTYPE, & - & CMFE_EQUATIONS_SET_STATIC_RBS_NAVIER_STOKES_SUBTYPE, & - & CMFE_EQUATIONS_SET_CHARACTERISTIC_SUBTYPE, & - & CMFE_EQUATIONS_SET_TRANSIENT1D_ADV_NAVIER_STOKES_SUBTYPE, CMFE_EQUATIONS_SET_COUPLED1D0D_ADV_NAVIER_STOKES_SUBTYPE, & - & CMFE_EQUATIONS_SET_STREE1D0D_SUBTYPE, CMFE_EQUATIONS_SET_STREE1D0D_ADV_SUBTYPE, & - & CMFE_EQUATIONS_SET_MULTISCALE3D_NAVIER_STOKES_SUBTYPE, & - & CMFE_EQUATIONS_SET_CONSTITUTIVE_MU_NAVIER_STOKES_SUBTYPE, & - & CMFE_EQUATIONS_SET_COUPLED1D0D_NAVIER_STOKES_SUBTYPE, & - & CMFE_EQUATIONS_SET_OPTIMISED_NAVIER_STOKES_SUBTYPE,CMFE_EQUATIONS_SET_STANDARD_DARCY_SUBTYPE, & - & CMFE_EQUATIONS_SET_QUASISTATIC_DARCY_SUBTYPE,CMFE_EQUATIONS_SET_ALE_DARCY_SUBTYPE, & - & CMFE_EQUATIONS_SET_TRANSIENT_DARCY_SUBTYPE, & - & CMFE_EQUATIONS_SET_TRANSIENT_ALE_DARCY_SUBTYPE,CMFE_EQUATIONS_SET_MULTI_COMPARTMENT_DARCY_SUBTYPE, & - & CMFE_EQUATIONS_SET_STANDARD_LAPLACE_SUBTYPE,CMFE_EQUATIONS_SET_MOVING_MESH_LAPLACE_SUBTYPE, & - & CMFE_EQUATIONS_SET_GENERALISED_LAPLACE_SUBTYPE,CMFE_EQUATIONS_SET_CONSTANT_SOURCE_POISSON_SUBTYPE, & - & CMFE_EQUATIONS_SET_EXTRACELLULAR_BIDOMAIN_POISSON_SUBTYPE, & - & CMFE_EQUATIONS_SET_LINEAR_PRESSURE_POISSON_SUBTYPE, CMFE_EQUATIONS_SET_NONLINEAR_PRESSURE_POISSON_SUBTYPE, & - & CMFE_EQUATIONS_SET_ALE_PRESSURE_POISSON_SUBTYPE, CMFE_EQUATIONS_SET_FITTED_PRESSURE_POISSON_SUBTYPE,& - & CMFE_EQUATIONS_SET_LINEAR_SOURCE_POISSON_SUBTYPE,CMFE_EQUATIONS_SET_QUADRATIC_SOURCE_POISSON_SUBTYPE, & - & CMFE_EQUATIONS_SET_EXPONENTIAL_SOURCE_POISSON_SUBTYPE,CMFE_EQUATIONS_SET_STANDARD_HELMHOLTZ_SUBTYPE, & - & CMFE_EQUATIONS_SET_GENERALISED_HELMHOLTZ_SUBTYPE, & - & CMFE_EQUATIONS_SET_NO_SOURCE_DIFFUSION_SUBTYPE,CMFE_EQUATIONS_SET_CONSTANT_SOURCE_DIFFUSION_SUBTYPE, & - & CMFE_EQUATIONS_SET_LINEAR_SOURCE_DIFFUSION_SUBTYPE,CMFE_EQUATIONS_SET_QUADRATIC_SOURCE_DIFFUSION_SUBTYPE, & - & CMFE_EQUATIONS_SET_EXPONENTIAL_SOURCE_DIFFUSION_SUBTYPE,CMFE_EQUATIONS_SET_MULTI_COMP_TRANSPORT_DIFFUSION_SUBTYPE, & - & CMFE_EQUATIONS_SET_NO_SOURCE_ALE_DIFFUSION_SUBTYPE,CMFE_EQUATIONS_SET_CONSTANT_SOURCE_ALE_DIFFUSION_SUBTYPE, & - & CMFE_EQUATIONS_SET_LINEAR_SOURCE_ALE_DIFFUSION_SUBTYPE,CMFE_EQUATIONS_SET_QUADRATIC_SOURCE_ALE_DIFFUSION_SUBTYPE, & - & CMFE_EQUATIONS_SET_EXPONENTIAL_SOURCE_ALE_DIFFUSION_SUBTYPE, & - & CMFE_EQUATIONS_SET_ADVECTION_SUBTYPE, & - & CMFE_EQUATIONS_SET_NO_SOURCE_ADVECTION_DIFFUSION_SUBTYPE, & - & CMFE_EQUATIONS_SET_CONSTANT_SOURCE_ADVECTION_DIFFUSION_SUBTYPE, & - & CMFE_EQUATIONS_SET_LINEAR_SOURCE_ADVECTION_DIFFUSION_SUBTYPE, & - & CMFE_EQUATIONS_SET_QUADRATIC_SOURCE_ADVEC_DIFF_SUBTYPE,CMFE_EQUATIONS_SET_EXPONENTIAL_SOURCE_ADVEC_DIFF_SUBTYPE, & - & CMFE_EQUATIONS_SET_NO_SOURCE_ALE_ADVECTION_DIFFUSION_SUBTYPE, & - & CMFE_EQUATIONS_SET_CONSTANT_SOURCE_ALE_ADVEC_DIFF_SUBTYPE,CMFE_EQUATIONS_SET_LINEAR_SOURCE_ALE_ADVEC_DIFF_SUBTYPE, & - & CMFE_EQUATIONS_SET_QUADRATIC_SOURCE_ALE_ADVEC_DIFF_SUBTYPE,CMFE_EQUATIONS_SET_EXP_SOURCE_ALE_ADVECTION_DIFFUSION_SUBTYPE, & - & CMFE_EQUATIONS_SET_NO_SOURCE_STATIC_ADVEC_DIFF_SUBTYPE, CMFE_EQUATIONS_SET_CONSTANT_SOURCE_STATIC_ADVEC_DIFF_SUBTYPE, & - & CMFE_EQUATIONS_SET_LINEAR_SOURCE_STATIC_ADVEC_DIFF_SUBTYPE, & - & CMFE_EQUATIONS_SET_NO_SOURCE_ADVECTION_DIFF_SUPG_SUBTYPE, CMFE_EQUATIONS_SET_CONSTANT_SOURCE_ADVECTION_DIFF_SUPG_SUBTYPE, & - & CMFE_EQUATIONS_SET_LINEAR_SOURCE_ADVECTION_DIFF_SUPG_SUBTYPE, CMFE_EQUATIONS_SET_QUAD_SOURCE_ADVECTION_DIFF_SUPG_SUBTYPE, & - & CMFE_EQUATIONS_SET_EXP_SOURCE_ADVECTION_DIFF_SUPG_SUBTYPE, & - & CMFE_EQUATIONS_SET_NO_SOURCE_ALE_ADVECTION_DIFF_SUPG_SUBTYPE, & - & CMFE_EQUATIONS_SET_CONSTANT_SOURCE_ALE_ADVEC_DIFF_SUPG_SUBTYPE, & - & CMFE_EQUATIONS_SET_LINEAR_SOURCE_ALE_ADVEC_DIFF_SUPG_SUBTYPE, & - & CMFE_EQUATIONS_SET_QUAD_SOURCE_ALE_ADVECTION_DIFF_SUPG_SUBTYPE, & - & CMFE_EQUATIONS_SET_EXP_SOURCE_ALE_ADVECTION_DIFF_SUPG_SUBTYPE, & - & CMFE_EQUATIONS_SET_NO_SOURCE_STATIC_ADVEC_DIFF_SUPG_SUBTYPE, & - & CMFE_EQUATIONS_SET_CONST_SOURCE_STATIC_ADVEC_DIFF_SUPG_SUBTYPE, & - & CMFE_EQUATIONS_SET_LIN_SOURCE_STATIC_ADVEC_DIFF_SUPG_SUBTYPE, & - & CMFE_EQUATIONS_SET_MULTI_COMP_TRANSPORT_ADVEC_DIFF_SUBTYPE,CMFE_EQUATIONS_SET_MULT_COMP_TRANSPORT_ADVEC_DIFF_SUPG_SUBTYPE, & - & CMFE_EQUATIONS_SET_PGM_STOKES_SUBTYPE, & - & CMFE_EQUATIONS_SET_FIRST_BIDOMAIN_SUBTYPE,CMFE_EQUATIONS_SET_SECOND_BIDOMAIN_SUBTYPE, & - & CMFE_EQUATIONS_SET_MONODOMAIN_BUENOOROVIO_SUBTYPE,& - & CMFE_EQUATIONS_SET_MONODOMAIN_TENTUSSCHER06_SUBTYPE ,& - & CMFE_EQUATIONS_SET_DATA_POINT_FITTING_SUBTYPE,CMFE_EQUATIONS_SET_GENERALISED_DATA_FITTING_SUBTYPE, & - & CMFE_EQUATIONS_SET_VECTOR_DATA_FITTING_SUBTYPE,CMFE_EQUATIONS_SET_DIVFREE_VECTOR_DATA_FITTING_SUBTYPE, & - & CMFE_EQUATIONS_SET_VECTOR_DATA_PRE_FITTING_SUBTYPE,CMFE_EQUATIONS_SET_DIVFREE_VECTOR_DATA_PRE_FITTING_SUBTYPE, & - & CMFE_EQUATIONS_SET_MAT_PROPERTIES_DATA_FITTING_SUBTYPE,CMFE_EQUATIONS_SET_MAT_PROP_INRIA_MODEL_DATA_FITTING_SUBTYPE, & - & CMFE_EQUATIONS_SET_DATA_POINT_VECTOR_STATIC_FITTING_SUBTYPE, & - & CMFE_EQUATIONS_SET_DATA_PT_VECTOR_QUASISTATIC_FITTING_SUBTYPE, & - & CMFE_EQUATIONS_SET_GAUSS_POINT_FITTING_SUBTYPE, & - & CMFE_EQUATIONS_SET_PGM_NAVIER_STOKES_SUBTYPE, & - & CMFE_EQUATIONS_SET_CONSTITUTIVE_LAW_IN_CELLML_EVALUATE_SUBTYPE, & - & CMFE_EQUATIONS_SET_COUPLED_SOURCE_DIFFUSION_DIFFUSION_SUBTYPE, & - & CMFE_EQUATIONS_SET_COUPLED_SOURCE_DIFFUSION_ADVEC_DIFF_SUBTYPE, & - & CMFE_EQUATIONS_SET_BURGERS_SUBTYPE,CMFE_EQUATIONS_SET_GENERALISED_BURGERS_SUBTYPE, & - & CMFE_EQUATIONS_SET_STATIC_BURGERS_SUBTYPE, & - & CMFE_EQUATIONS_SET_INVISCID_BURGERS_SUBTYPE,CMFE_EQUATIONS_SET_STANDARD_MONODOMAIN_ELASTICITY_SUBTYPE, & - & CMFE_EQUATIONS_SET_1D3D_MONODOMAIN_ELASTICITY_SUBTYPE,CMFE_EQUATIONS_SET_MONODOMAIN_ELASTICITY_W_TITIN_SUBTYPE, & - & CMFE_EQUATIONS_SET_1D3D_MONODOMAIN_ACTIVE_STRAIN_SUBTYPE, & - & CMFE_EQUATIONS_SET_CONSTIT_AND_GROWTH_LAW_IN_CELLML_SUBTYPE, & - & CMFE_EQUATIONS_SET_GROWTH_LAW_IN_CELLML_SUBTYPE, & - & CMFE_EQUATIONS_SET_MR_AND_GROWTH_LAW_IN_CELLML_SUBTYPE, & - & CMFE_EQUATIONS_SET_MONODOMAIN_ELASTICITY_VELOCITY_SUBTYPE, & - & CMFE_EQUATIONS_SET_FINITE_ELASTICITY_NAVIER_STOKES_ALE_SUBTYPE, & - & CMFE_EQUATIONS_SET_RATE_BASED_SMOOTH_MODEL_SUBTYPE,CMFE_EQUATIONS_SET_COMPRESSIBLE_RATE_BASED_SMOOTH_MODEL_SUBTYPE, & - & CMFE_EQUATIONS_SET_RATE_BASED_GROWTH_MODEL_SUBTYPE,CMFE_EQUATIONS_SET_COMPRESSIBLE_RATE_BASED_GROWTH_MODEL_SUBTYPE - - PUBLIC CMFE_EQUATIONS_SET_FITTING_NO_SMOOTHING,CMFE_EQUATIONS_SET_FITTING_SOBOLEV_VALUE_SMOOTHING, & - & CMFE_EQUATIONS_SET_FITTING_SOBOLEV_DIFFERENCE_SMOOTHING,CMFE_EQUATIONS_SET_FITTING_STRAIN_ENERGY_SMOOTHING - - PUBLIC CMFE_EQUATIONS_SET_CELLML_REAC_SPLIT_REAC_DIFF_SUBTYPE, CMFE_EQUATIONS_SET_CELLML_REAC_NO_SPLIT_REAC_DIFF_SUBTYPE, & - & CMFE_EQUATIONS_SET_CONSTANT_REAC_DIFF_SUBTYPE - - PUBLIC CMFE_EQUATIONS_SET_FEM_SOLUTION_METHOD,CMFE_EQUATIONS_SET_BEM_SOLUTION_METHOD,CMFE_EQUATIONS_SET_FD_SOLUTION_METHOD, & - & CMFE_EQUATIONS_SET_FV_SOLUTION_METHOD,CMFE_EQUATIONS_SET_GFEM_SOLUTION_METHOD,CMFE_EQUATIONS_SET_GFD_SOLUTION_METHOD, & - & CMFE_EQUATIONS_SET_GFV_SOLUTION_METHOD - - PUBLIC CMFE_EQUATIONS_SET_DERIVED_DEFORMATION_GRADIENT,CMFE_EQUATIONS_SET_DERIVED_R_CAUCHY_GREEN_DEFORMATION, & - & CMFE_EQUATIONS_SET_DERIVED_L_CAUCHY_GREEN_DEFORMATION,CMFE_EQUATIONS_SET_DERIVED_GREEN_LAGRANGE_STRAIN, & - & CMFE_EQUATIONS_SET_DERIVED_CAUCHY_STRESS,CMFE_EQUATIONS_SET_DERIVED_FIRST_PK_STRESS, & - & CMFE_EQUATIONS_SET_DERIVED_SECOND_PK_STRESS +!================================================================================================================================== +! +! EquationsSetConstants +! +!================================================================================================================================== + + !Module parameters + + !> \addtogroup OpenCMISS_EquationsSetConstants OpenCMISS::Iron::EquationsSet::Constants + !> \brief Equations set constants. + !>@{ + !> \addtogroup OpenCMISS_EquationsSetClasses OpenCMISS::Iron::EquationsSet::Classes + !> \brief Equations set classes. + !> \see OpenCMISS::Iron::EquationsSet,OpenCMISS + !>@{ + INTEGER(INTG), PARAMETER :: CMFE_EQUATIONS_SET_NO_CLASS = EQUATIONS_SET_NO_CLASS !@} + !> \addtogroup OpenCMISS_EquationsSetTypes OpenCMISS::Iron::EquationsSet::Types + !> \brief Equations set Types. + !> \see OpenCMISS::Iron::EquationsSet,OpenCMISS + !>@{ + INTEGER(INTG), PARAMETER :: CMFE_EQUATIONS_SET_NO_TYPE = EQUATIONS_SET_NO_TYPE !@} + !> \addtogroup OpenCMISS_EquationsSetSubtypes OpenCMISS::Iron::EquationsSet::Subtypes + !> \brief Equations set subtypes. + !> \see OpenCMISS::Iron::EquationsSet,OpenCMISS + !>@{ + INTEGER(INTG), PARAMETER :: CMFE_EQUATIONS_SET_NO_SUBTYPE = EQUATIONS_SET_NO_SUBTYPE !@} + !> \addtogroup OpenCMISS_EquationsSetFittingSmoothingTypes OpenCMISS::Iron::EquationsSet::Fitting::SmoothingTypes + !> \brief The smoothing types for fitting equations sets. + !> \see OpenCMISS::Iron::EquationsSet,OpenCMISS + !>@{ + INTEGER(INTG), PARAMETER :: CMFE_EQUATIONS_SET_FITTING_NO_SMOOTHING = & + & EQUATIONS_SET_FITTING_NO_SMOOTHING !@} + + !>@} + !> \addtogroup OpenCMISS_EquationsSetSolutionMethods OpenCMISS::Iron::EquationsSet::SolutionMethods + !> \brief The solution method parameters + !> \see OpenCMISS::Iron::EquationsSet,OpenCMISS + !>@{ + INTEGER(INTG), PARAMETER :: CMFE_EQUATIONS_SET_FEM_SOLUTION_METHOD = EQUATIONS_SET_FEM_SOLUTION_METHOD !@} + + !> \addtogroup OpenCMISS_EquationsSetDerivedTensorTypes OpenCMISS::Iron::EquationsSet::DerivedTensorTypes + !> \brief EquationsSet derived tensor type parameters + !> \see OpenCMISS::Iron::EquationsSet,OpenCMISS + !>@{ + INTEGER(INTG), PARAMETER :: CMFE_EQUATIONS_SET_DERIVED_DEFORMATION_GRADIENT = EQUATIONS_SET_DEFORMATION_GRADIENT_TENSOR !@} + + !> \addtogroup OpenCMISS_EquationsSetDynamicMatrixTypes OpenCMISS::Iron::EquationsSet::DynamicMatrixTypes + !> \brief Type of matrix in a dynamic equations set + !>@{ + INTEGER(INTG), PARAMETER :: CMFE_EQUATIONS_MATRIX_STIFFNESS=EQUATIONS_MATRIX_STIFFNESS !@} + !> \addtogroup OpenCMISS_EquationsSetOutputTypes OpenCMISS::Iron::EquationsSet::OutputTypes + !> \brief Equations set output types + !> \see OpenCMISS::Iron::EquationsSet,OpenCMISS + !>@{ + INTEGER(INTG), PARAMETER :: CMFE_EQUATIONS_SET_NO_OUTPUT = EQUATIONS_SET_NO_OUTPUT!@} + + !> \addtogroup OpenCMISS_EquationsSetAnalyticFunctionTypes OpenCMISS::Iron::EquationsSet::AnalyticFunctionTypes + !> \brief The analytic function types. + !> \see OpenCMISS::Iron::EquationsSet,OpenCMISS + !>@{ + !> \addtogroup OpenCMISS_EquationsSetLaplaceAnalyticFunctionTypes OpenCMISS::Iron::EquationsSet::AnalyticFunctionTypes::Laplace + !> \brief The analytic function types for a Laplace equation + !> \see OpenCMISS::Iron::EquationsSet::AnalyticFunctionTypes,OpenCMISS + !>@{ + INTEGER(INTG), PARAMETER :: CMFE_EQUATIONS_SET_LAPLACE_EQUATION_TWO_DIM_1 = EQUATIONS_SET_LAPLACE_EQUATION_TWO_DIM_1 !@} + !> \addtogroup OpenCMISS_EquationsSetHelmholtzAnalyticFunctionTypes OpenCMISS::Iron::EquationsSet::AnalyticFunctionTypes::Helmholtz + !> \brief The analytic function types for a Helmholtz equation + !> \see OpenCMISS::Iron::EquationsSet::AnalyticFunctionTypes,OpenCMISS + !>@{ + INTEGER(INTG), PARAMETER :: CMFE_EQUATIONS_SET_HELMHOLTZ_EQUATION_TWO_DIM_1 = EQUATIONS_SET_HELMHOLTZ_EQUATION_TWO_DIM_1 !@} + !> \addtogroup OpenCMISS_PoiseuilleAnalyticFunctionTypes OpenCMISS::Iron::EquationsSet::AnalyticFunctionTypes::Poiseuille + !> \brief The analytic function types for a Poiseuille equation. + !> \see OpenCMISS::Iron::EquationsSet::AnalyticFunctionTypes,OpenCMISS + !>@{ + INTEGER(INTG), PARAMETER :: CMFE_EQUATIONS_SET_POISEUILLE_EQUATION_TWO_DIM_1 = EQUATIONS_SET_POISEUILLE_EQUATION_TWO_DIM_1 !@} + !> \addtogroup OpenCMISS_PoissonAnalyticFunctionTypes OpenCMISS::Iron::EquationsSet::AnalyticFunctionTypes::Poisson + !> \brief The analytic function types for a Poisson equation. + !> \see OpenCMISS::Iron::EquationsSet::AnalyticFunctionTypes,OpenCMISS + !>@{ + INTEGER(INTG), PARAMETER :: CMFE_EQUATIONS_SET_POISSON_EQUATION_TWO_DIM_1 = EQUATIONS_SET_POISSON_EQUATION_TWO_DIM_1 !@} + !> \addtogroup OpenCMISS_DiffusionAnalyticFunctionTypes OpenCMISS::Iron::EquationsSet::AnalyticFunctionTypes::Diffusion + !> \brief The analytic function types for a diffusion equation. + !> \see OpenCMISS::Iron::EquationsSet::AnalyticFunctionTypes,OpenCMISS + !>@{ + INTEGER(INTG), PARAMETER :: CMFE_EQUATIONS_SET_DIFFUSION_EQUATION_ONE_DIM_1 = EQUATIONS_SET_DIFFUSION_EQUATION_ONE_DIM_1 + INTEGER(INTG), PARAMETER :: CMFE_EQUATIONS_SET_DIFFUSION_EQUATION_TWO_DIM_1 = EQUATIONS_SET_DIFFUSION_EQUATION_TWO_DIM_1 !@} + !> \addtogroup OpenCMISS_AdvectionDiffusionAnalyticFunctionTypes OpenCMISS::Iron::EquationsSet::AnalyticFunctionTypes::AdvectionDiffusion + !> \brief The analytic function types for an advection-diffusion equation. + !> \see OpenCMISS::Iron::EquationsSet::AnalyticFunctionTypes,OpenCMISS + !>@{ + INTEGER(INTG), PARAMETER :: CMFE_EQUATIONS_SET_ADVECTION_DIFFUSION_EQUATION_TWO_DIM_1 = & + & EQUATIONS_SET_ADVECTION_DIFFUSION_EQUATION_TWO_DIM_1 ! \addtogroup OpenCMISS_StokesAnalyticFunctionTypes OpenCMISS::Iron::EquationsSet::AnalyticFunctionTypes::Stokes + !> \brief The analytic function types for a Stokes equation. + !> \see OpenCMISS::Iron::EquationsSet::AnalyticFunctionTypes,OpenCMISS + !>@{ + INTEGER(INTG), PARAMETER :: CMFE_EQUATIONS_SET_STOKES_EQUATION_TWO_DIM_1 = EQUATIONS_SET_STOKES_EQUATION_TWO_DIM_1 !@} + !> \addtogroup OpenCMISS_NavierStokesAnalyticFunctionTypes OpenCMISS::Iron::EquationsSet::AnalyticFunctionTypes::NavierStokes + !> \brief The analytic function types for a Navier-Stokes equation. + !> \see OpenCMISS::Iron::EquationsSet::AnalyticFunctionTypes,OpenCMISS + !>@{ + INTEGER(INTG), PARAMETER :: CMFE_EQUATIONS_SET_NAVIER_STOKES_EQUATION_TWO_DIM_POISEUILLE= & + & EQUATIONS_SET_NAVIER_STOKES_EQUATION_TWO_DIM_POISEUILLE !< fully developed 2D channel flow (parabolic) \see OpenCMISS_EquationsSetNavierStokesAnalyticFunctionTypes,OpenCMISS + INTEGER(INTG), PARAMETER :: CMFE_EQUATIONS_SET_NAVIER_STOKES_EQUATION_TWO_DIM_TAYLOR_GREEN= & + & EQUATIONS_SET_NAVIER_STOKES_EQUATION_TWO_DIM_TAYLOR_GREEN !< 2D dynamic nonlinear Taylor-Green vortex decay \see OpenCMISS_EquationsSetNavierStokesAnalyticFunctionTypes,OpenCMISS + INTEGER(INTG), PARAMETER :: CMFE_EQUATIONS_SET_NAVIER_STOKES_EQUATION_FLOWRATE_AORTA= & + & EQUATIONS_SET_NAVIER_STOKES_EQUATION_FLOWRATE_AORTA !< A fourier decomposed flow waveform for boundary conditions + INTEGER(INTG), PARAMETER :: CMFE_EQUATIONS_SET_NAVIER_STOKES_EQUATION_SINUSOID= & + & EQUATIONS_SET_NAVIER_STOKES_EQUATION_SINUSOID !< A sinusoidal flow waveform + INTEGER(INTG), PARAMETER :: CMFE_EQUATIONS_SET_NAVIER_STOKES_EQUATION_SPLINT_FROM_FILE= & + & EQUATIONS_SET_NAVIER_STOKES_EQUATION_SPLINT_FROM_FILE !< Spline integration of dependent values specified in a file + INTEGER(INTG), PARAMETER :: CMFE_EQUATIONS_SET_NAVIER_STOKES_EQUATION_TWO_DIM_1 = EQUATIONS_SET_NAVIER_STOKES_EQUATION_TWO_DIM_1 !@} + !> \addtogroup OpenCMISS_DarcyAnalyticFunctionTypes OpenCMISS::Iron::EquationsSet::AnalyticFunctionTypes::Darcy + !> \brief The analytic function types for a Darcy equation. + !> \see OpenCMISS::Iron::EquationsSet::AnalyticFunctionTypes,OpenCMISS + !>@{ + INTEGER(INTG), PARAMETER :: CMFE_EQUATIONS_SET_DARCY_EQUATION_TWO_DIM_1 = EQUATIONS_SET_DARCY_EQUATION_TWO_DIM_1 !@} + !> \addtogroup OpenCMISS_BurgersAnalyticFunctionTypes OpenCMISS::Iron::EquationsSet::AnalyticFunctionTypes::Burgers + !> \brief The analytic function types for a Burgers equation. + !> \see OpenCMISS::Iron::EquationsSet::AnalyticFunctionTypes,OpenCMISS + !>@{ + INTEGER(INTG), PARAMETER :: CMFE_EQUATIONS_SET_BURGERS_EQUATION_ONE_DIM_1 = EQUATIONS_SET_BURGERS_EQUATION_ONE_DIM_1 + INTEGER(INTG), PARAMETER :: CMFE_EQUATIONS_SET_GENERALISED_BURGERS_EQUATION_ONE_DIM_1 = & + & EQUATIONS_SET_GENERALISED_BURGERS_EQUATION_ONE_DIM_1 + INTEGER(INTG), PARAMETER :: CMFE_EQUATIONS_SET_GENERALISED_BURGERS_EQUATION_ONE_DIM_2 = & + & EQUATIONS_SET_GENERALISED_BURGERS_EQUATION_ONE_DIM_2 + INTEGER(INTG), PARAMETER :: CMFE_EQUATIONS_SET_STATIC_BURGERS_EQUATION_ONE_DIM_1 = & + & EQUATIONS_SET_STATIC_BURGERS_EQUATION_ONE_DIM_1 + !>@} + + !> \addtogroup OpenCMISS_EquationsSetLinearElasticityAnalyticFunctionTypes OpenCMISS::Iron::EquationsSet::AnalyticFunctionTypes::LinearElasticity + !> \brief The analytic function types for a LinearElasticity equation + !> \see OpenCMISS::Iron::EquationsSet::AnalyticFunctionTypes,OpenCMISS + !>@{ + INTEGER(INTG), PARAMETER :: CMFE_EQUATIONS_SET_LINEAR_ELASTICITY_ONE_DIM_1 = EQUATIONS_SET_LINEAR_ELASTICITY_ONE_DIM_1 !@} + !> \addtogroup OpenCMISS_EquationsSetFiniteElasticityAnalyticFunctionTypes OpenCMISS::Iron::EquationsSet::AnalyticFunctionTypes::FiniteElasticity + !> \brief The analytic function types for a FiniteElasticity equation + !> \see OpenCMISS::Iron::EquationsSet::AnalyticFunctionTypes,OpenCMISS + !>@{ + INTEGER(INTG), PARAMETER :: CMFE_EQUATIONS_SET_FINITE_ELASTICITY_CYLINDER = EQUATIONS_SET_FINITE_ELASTICITY_CYLINDER !@} + !>@} + !>@} + + !> \addtogroup OpenCMISS_AnalyticParamIndices OpenCMISS::Iron::FiniteElasticity::AnalyticParamIndices + !> \brief Indices for EQUATIONS_SET_ANALYTIC_TYPE%ANALYTIC_USER_PARAMS + !> \see OpenCMISS::Iron::FiniteElasticity::AnalyticParamIndices,OpenCMISS + !>@{ + INTEGER(INTG), PARAMETER :: CMFE_FINITE_ELASTICITY_ANALYTIC_CYLINDER_PARAM_PIN_IDX = & + & FINITE_ELASTICITY_ANALYTIC_CYLINDER_PARAM_PIN_IDX !@} + + !Module types + + !Module variables + + !Interfaces + + PUBLIC CMFE_EQUATIONS_SET_NO_CLASS,CMFE_EQUATIONS_SET_ELASTICITY_CLASS,CMFE_EQUATIONS_SET_FLUID_MECHANICS_CLASS, & + & CMFE_EQUATIONS_SET_ELECTROMAGNETICS_CLASS,CMFE_EQUATIONS_SET_CLASSICAL_FIELD_CLASS,CMFE_EQUATIONS_SET_BIOELECTRICS_CLASS, & + & CMFE_EQUATIONS_SET_MODAL_CLASS,CMFE_EQUATIONS_SET_FITTING_CLASS,CMFE_EQUATIONS_SET_OPTIMISATION_CLASS, & + & CMFE_EQUATIONS_SET_MULTI_PHYSICS_CLASS + + PUBLIC CMFE_EQUATIONS_SET_NO_TYPE,CMFE_EQUATIONS_SET_LINEAR_ELASTICITY_TYPE,CMFE_EQUATIONS_SET_FINITE_ELASTICITY_TYPE, & + & CMFE_EQUATIONS_SET_STOKES_EQUATION_TYPE,CMFE_EQUATIONS_SET_NAVIER_STOKES_EQUATION_TYPE, & + & CMFE_EQUATIONS_SET_DARCY_EQUATION_TYPE, & + & CMFE_EQUATIONS_SET_DARCY_PRESSURE_EQUATION_TYPE,CMFE_EQUATIONS_SET_BURGERS_EQUATION_TYPE, & + & CMFE_EQUATIONS_SET_STATIC_POISEUILLE_SUBTYPE, & + & CMFE_EQUATIONS_SET_DYNAMIC_POISEUILLE_SUBTYPE, & + & CMFE_EQUATIONS_SET_CHARACTERISTIC_EQUATION_TYPE, & + & CMFE_EQUATIONS_SET_STREE_EQUATION_TYPE, & + & CMFE_EQUATIONS_SET_ELECTROSTATIC_TYPE,CMFE_EQUATIONS_SET_MAGNETOSTATIC_TYPE,CMFE_EQUATIONS_SET_MAXWELLS_EQUATIONS_TYPE, & + & CMFE_EQUATIONS_SET_LAPLACE_EQUATION_TYPE,CMFE_EQUATIONS_SET_POISEUILLE_EQUATION_TYPE, & + & CMFE_EQUATIONS_SET_POISSON_EQUATION_TYPE, & + & CMFE_EQUATIONS_SET_HELMHOLTZ_EQUATION_TYPE,CMFE_EQUATIONS_SET_WAVE_EQUATION_TYPE, & + & CMFE_EQUATIONS_SET_DIFFUSION_EQUATION_TYPE,CMFE_EQUATIONS_SET_ADVECTION_EQUATION_TYPE, & + & CMFE_EQUATIONS_SET_ADVECTION_DIFFUSION_EQUATION_TYPE,CMFE_EQUATIONS_SET_REACTION_DIFFUSION_EQUATION_TYPE, & + & CMFE_EQUATIONS_SET_BIHARMONIC_EQUATION_TYPE,CMFE_EQUATIONS_SET_MONODOMAIN_EQUATION_TYPE, & + & CMFE_EQUATIONS_SET_BIDOMAIN_EQUATION_TYPE, & + & CMFE_EQUATIONS_SET_LINEAR_ELASTIC_MODAL_TYPE, & + & CMFE_EQUATIONS_SET_DATA_FITTING_EQUATION_TYPE,CMFE_EQUATIONS_SET_GAUSS_FITTING_EQUATION_TYPE, & + & CMFE_EQUATIONS_SET_MONODOMAIN_STRANG_SPLITTING_EQUATION_TYPE + + PUBLIC CMFE_EQUATIONS_SET_FINITE_ELASTICITY_DARCY_TYPE, & + & CMFE_EQUATIONS_SET_FINITE_ELASTICITY_STOKES_TYPE, CMFE_EQUATIONS_SET_FINITE_ELASTICITY_NAVIER_STOKES_TYPE, & + & CMFE_EQUATIONS_SET_DIFFUSION_DIFFUSION_TYPE, CMFE_EQUATIONS_SET_DIFFUSION_ADVECTION_DIFFUSION_TYPE + + PUBLIC CMFE_EQUATIONS_SET_NO_SUBTYPE,CMFE_EQUATIONS_SET_THREE_DIMENSIONAL_SUBTYPE, & + & CMFE_EQUATIONS_SET_TWO_DIMENSIONAL_PLANE_STRESS_SUBTYPE, & + & CMFE_EQUATIONS_SET_TWO_DIMENSIONAL_PLANE_STRAIN_SUBTYPE,CMFE_EQUATIONS_SET_ONE_DIMENSIONAL_SUBTYPE, & + & CMFE_EQUATIONS_SET_PLATE_SUBTYPE, & + & CMFE_EQUATIONS_SET_SHELL_SUBTYPE, & + & CMFE_EQUATIONS_SET_INCOMPRESSIBLE_MOONEY_RIVLIN_SUBTYPE,CMFE_EQUATIONS_SET_NEARLY_INCOMPRESSIBLE_MOONEY_RIVLIN_SUBTYPE, & + & CMFE_EQUATIONS_SET_MOONEY_RIVLIN_SUBTYPE, & + & CMFE_EQUATIONS_SET_REFERENCE_STATE_MOONEY_RIVLIN_SUBTYPE, CMFE_EQUATIONS_SET_ISOTROPIC_EXPONENTIAL_SUBTYPE, & + & CMFE_EQUATIONS_SET_ACTIVECONTRACTION_SUBTYPE,CMFE_EQUATIONS_SET_MOONEY_RIVLIN_ACTIVECONTRACTION_SUBTYPE, & + & CMFE_EQUATIONS_SET_COMPRESSIBLE_ACTIVECONTRACTION_SUBTYPE,CMFE_EQUATIONS_SET_TRANSVERSE_ISOTROPIC_ACTIVE_SUBTYPE, & + & CMFE_EQUATIONS_SET_TRANS_ISOTROPIC_ACTIVE_TRANSITION_SUBTYPE, & + & CMFE_EQUATIONS_SET_TRANSVERSE_ISOTROPIC_POLYNOMIAL_SUBTYPE,CMFE_EQUATIONS_SET_STVENANT_KIRCHOFF_ACTIVECONTRACTION_SUBTYPE, & + & CMFE_EQUATIONS_SET_ANISOTROPIC_POLYNOMIAL_SUBTYPE,CMFE_EQUATIONS_SET_ANISOTROPIC_POLYNOMIAL_ACTIVE_SUBTYPE, & + & CMFE_EQUATIONS_SET_TRANSVERSE_ISOTROPIC_EXPONENTIAL_SUBTYPE,CMFE_EQUATIONS_SET_ORTHOTROPIC_MATERIAL_COSTA_SUBTYPE, & + & CMFE_EQUATIONS_SET_COMPRESSIBLE_FINITE_ELASTICITY_SUBTYPE,CMFE_EQUATIONS_SET_INCOMPRESS_FINITE_ELASTICITY_DARCY_SUBTYPE, & + & CMFE_EQUATIONS_SET_ELASTICITY_DARCY_INRIA_MODEL_SUBTYPE,CMFE_EQUATIONS_SET_ELASTICITY_MULTI_COMP_DARCY_INRIA_SUBTYPE, & + & CMFE_EQUATIONS_SET_INCOMPRESS_ELASTICITY_DRIVEN_DARCY_SUBTYPE, & + & CMFE_EQUATIONS_SET_INCOMPRESSIBLE_ELASTICITY_DRIVEN_MR_SUBTYPE, & + & CMFE_EQUATIONS_SET_INCOMPRESS_ELAST_MULTI_COMP_DARCY_SUBTYPE,CMFE_EQUATIONS_SET_TRANSVERSE_ISOTROPIC_GUCCIONE_SUBTYPE, & + & CMFE_EQUATIONS_SET_GUCCIONE_ACTIVECONTRACTION_SUBTYPE, & + & CMFE_EQUATIONS_SET_ACTIVE_STRAIN_SUBTYPE, & + & CMFE_EQUATIONS_SET_MULTISCALE_ACTIVE_STRAIN_SUBTYPE, & + & CMFE_EQUATIONS_SET_REFERENCE_STATE_TRANSVERSE_GUCCIONE_SUBTYPE, & + & CMFE_EQUATIONS_SET_MEMBRANE_SUBTYPE, CMFE_EQUATIONS_SET_ORTHOTROPIC_HOLZAPFEL_OGDEN_SUBTYPE, & + & CMFE_EQUATIONS_SET_HOLZAPFEL_OGDEN_ACTIVECONTRACTION_SUBTYPE, & + & CMFE_EQUATIONS_SET_ELASTICITY_FLUID_PRES_STATIC_INRIA_SUBTYPE, & + & CMFE_EQUATIONS_SET_ELASTICITY_FLUID_PRES_HOLMES_MOW_SUBTYPE, & + & CMFE_EQUATIONS_SET_ELASTI_FLUID_PRES_HOLMES_MOW_ACTIVE_SUBTYPE, & + & CMFE_EQUATIONS_SET_TRANSVERSE_ISOTROPIC_HUMPHREY_YIN_SUBTYPE, & + & CMFE_EQUATIONS_SET_STATIC_STOKES_SUBTYPE, CMFE_EQUATIONS_SET_LAPLACE_STOKES_SUBTYPE, & + & CMFE_EQUATIONS_SET_TRANSIENT_STOKES_SUBTYPE,CMFE_EQUATIONS_SET_ALE_STOKES_SUBTYPE, & + & CMFE_EQUATIONS_SET_ALE_NAVIER_STOKES_SUBTYPE, CMFE_EQUATIONS_SET_ALE_RBS_NAVIER_STOKES_SUBTYPE, & + & CMFE_EQUATIONS_SET_OPTIMISED_STOKES_SUBTYPE,CMFE_EQUATIONS_SET_STATIC_NAVIER_STOKES_SUBTYPE, & + & CMFE_EQUATIONS_SET_LAPLACE_NAVIER_STOKES_SUBTYPE,CMFE_EQUATIONS_SET_TRANSIENT_NAVIER_STOKES_SUBTYPE, & + & CMFE_EQUATIONS_SET_TRANSIENT1D_NAVIER_STOKES_SUBTYPE, CMFE_EQUATIONS_SET_TRANSIENT_RBS_NAVIER_STOKES_SUBTYPE, & + & CMFE_EQUATIONS_SET_STATIC_RBS_NAVIER_STOKES_SUBTYPE, & + & CMFE_EQUATIONS_SET_CHARACTERISTIC_SUBTYPE, & + & CMFE_EQUATIONS_SET_TRANSIENT1D_ADV_NAVIER_STOKES_SUBTYPE, CMFE_EQUATIONS_SET_COUPLED1D0D_ADV_NAVIER_STOKES_SUBTYPE, & + & CMFE_EQUATIONS_SET_STREE1D0D_SUBTYPE, CMFE_EQUATIONS_SET_STREE1D0D_ADV_SUBTYPE, & + & CMFE_EQUATIONS_SET_MULTISCALE3D_NAVIER_STOKES_SUBTYPE, & + & CMFE_EQUATIONS_SET_CONSTITUTIVE_MU_NAVIER_STOKES_SUBTYPE, & + & CMFE_EQUATIONS_SET_COUPLED1D0D_NAVIER_STOKES_SUBTYPE, & + & CMFE_EQUATIONS_SET_OPTIMISED_NAVIER_STOKES_SUBTYPE,CMFE_EQUATIONS_SET_STANDARD_DARCY_SUBTYPE, & + & CMFE_EQUATIONS_SET_QUASISTATIC_DARCY_SUBTYPE,CMFE_EQUATIONS_SET_ALE_DARCY_SUBTYPE, & + & CMFE_EQUATIONS_SET_TRANSIENT_DARCY_SUBTYPE, & + & CMFE_EQUATIONS_SET_TRANSIENT_ALE_DARCY_SUBTYPE,CMFE_EQUATIONS_SET_MULTI_COMPARTMENT_DARCY_SUBTYPE, & + & CMFE_EQUATIONS_SET_STANDARD_LAPLACE_SUBTYPE,CMFE_EQUATIONS_SET_MOVING_MESH_LAPLACE_SUBTYPE, & + & CMFE_EQUATIONS_SET_GENERALISED_LAPLACE_SUBTYPE,CMFE_EQUATIONS_SET_CONSTANT_SOURCE_POISSON_SUBTYPE, & + & CMFE_EQUATIONS_SET_EXTRACELLULAR_BIDOMAIN_POISSON_SUBTYPE, & + & CMFE_EQUATIONS_SET_LINEAR_PRESSURE_POISSON_SUBTYPE, CMFE_EQUATIONS_SET_NONLINEAR_PRESSURE_POISSON_SUBTYPE, & + & CMFE_EQUATIONS_SET_ALE_PRESSURE_POISSON_SUBTYPE, CMFE_EQUATIONS_SET_FITTED_PRESSURE_POISSON_SUBTYPE,& + & CMFE_EQUATIONS_SET_LINEAR_SOURCE_POISSON_SUBTYPE,CMFE_EQUATIONS_SET_QUADRATIC_SOURCE_POISSON_SUBTYPE, & + & CMFE_EQUATIONS_SET_EXPONENTIAL_SOURCE_POISSON_SUBTYPE,CMFE_EQUATIONS_SET_STANDARD_HELMHOLTZ_SUBTYPE, & + & CMFE_EQUATIONS_SET_GENERALISED_HELMHOLTZ_SUBTYPE, & + & CMFE_EQUATIONS_SET_NO_SOURCE_DIFFUSION_SUBTYPE,CMFE_EQUATIONS_SET_CONSTANT_SOURCE_DIFFUSION_SUBTYPE, & + & CMFE_EQUATIONS_SET_LINEAR_SOURCE_DIFFUSION_SUBTYPE,CMFE_EQUATIONS_SET_QUADRATIC_SOURCE_DIFFUSION_SUBTYPE, & + & CMFE_EQUATIONS_SET_EXPONENTIAL_SOURCE_DIFFUSION_SUBTYPE,CMFE_EQUATIONS_SET_MULTI_COMP_TRANSPORT_DIFFUSION_SUBTYPE, & + & CMFE_EQUATIONS_SET_NO_SOURCE_ALE_DIFFUSION_SUBTYPE,CMFE_EQUATIONS_SET_CONSTANT_SOURCE_ALE_DIFFUSION_SUBTYPE, & + & CMFE_EQUATIONS_SET_LINEAR_SOURCE_ALE_DIFFUSION_SUBTYPE,CMFE_EQUATIONS_SET_QUADRATIC_SOURCE_ALE_DIFFUSION_SUBTYPE, & + & CMFE_EQUATIONS_SET_EXPONENTIAL_SOURCE_ALE_DIFFUSION_SUBTYPE, & + & CMFE_EQUATIONS_SET_ADVECTION_SUBTYPE, & + & CMFE_EQUATIONS_SET_NO_SOURCE_ADVECTION_DIFFUSION_SUBTYPE, & + & CMFE_EQUATIONS_SET_CONSTANT_SOURCE_ADVECTION_DIFFUSION_SUBTYPE, & + & CMFE_EQUATIONS_SET_LINEAR_SOURCE_ADVECTION_DIFFUSION_SUBTYPE, & + & CMFE_EQUATIONS_SET_QUADRATIC_SOURCE_ADVEC_DIFF_SUBTYPE,CMFE_EQUATIONS_SET_EXPONENTIAL_SOURCE_ADVEC_DIFF_SUBTYPE, & + & CMFE_EQUATIONS_SET_NO_SOURCE_ALE_ADVECTION_DIFFUSION_SUBTYPE, & + & CMFE_EQUATIONS_SET_CONSTANT_SOURCE_ALE_ADVEC_DIFF_SUBTYPE,CMFE_EQUATIONS_SET_LINEAR_SOURCE_ALE_ADVEC_DIFF_SUBTYPE, & + & CMFE_EQUATIONS_SET_QUADRATIC_SOURCE_ALE_ADVEC_DIFF_SUBTYPE,CMFE_EQUATIONS_SET_EXP_SOURCE_ALE_ADVECTION_DIFFUSION_SUBTYPE, & + & CMFE_EQUATIONS_SET_NO_SOURCE_STATIC_ADVEC_DIFF_SUBTYPE, CMFE_EQUATIONS_SET_CONSTANT_SOURCE_STATIC_ADVEC_DIFF_SUBTYPE, & + & CMFE_EQUATIONS_SET_LINEAR_SOURCE_STATIC_ADVEC_DIFF_SUBTYPE, & + & CMFE_EQUATIONS_SET_NO_SOURCE_ADVECTION_DIFF_SUPG_SUBTYPE, CMFE_EQUATIONS_SET_CONSTANT_SOURCE_ADVECTION_DIFF_SUPG_SUBTYPE, & + & CMFE_EQUATIONS_SET_LINEAR_SOURCE_ADVECTION_DIFF_SUPG_SUBTYPE, CMFE_EQUATIONS_SET_QUAD_SOURCE_ADVECTION_DIFF_SUPG_SUBTYPE, & + & CMFE_EQUATIONS_SET_EXP_SOURCE_ADVECTION_DIFF_SUPG_SUBTYPE, & + & CMFE_EQUATIONS_SET_NO_SOURCE_ALE_ADVECTION_DIFF_SUPG_SUBTYPE, & + & CMFE_EQUATIONS_SET_CONSTANT_SOURCE_ALE_ADVEC_DIFF_SUPG_SUBTYPE, & + & CMFE_EQUATIONS_SET_LINEAR_SOURCE_ALE_ADVEC_DIFF_SUPG_SUBTYPE, & + & CMFE_EQUATIONS_SET_QUAD_SOURCE_ALE_ADVECTION_DIFF_SUPG_SUBTYPE, & + & CMFE_EQUATIONS_SET_EXP_SOURCE_ALE_ADVECTION_DIFF_SUPG_SUBTYPE, & + & CMFE_EQUATIONS_SET_NO_SOURCE_STATIC_ADVEC_DIFF_SUPG_SUBTYPE, & + & CMFE_EQUATIONS_SET_CONST_SOURCE_STATIC_ADVEC_DIFF_SUPG_SUBTYPE, & + & CMFE_EQUATIONS_SET_LIN_SOURCE_STATIC_ADVEC_DIFF_SUPG_SUBTYPE, & + & CMFE_EQUATIONS_SET_MULTI_COMP_TRANSPORT_ADVEC_DIFF_SUBTYPE,CMFE_EQUATIONS_SET_MULT_COMP_TRANSPORT_ADVEC_DIFF_SUPG_SUBTYPE, & + & CMFE_EQUATIONS_SET_PGM_STOKES_SUBTYPE, & + & CMFE_EQUATIONS_SET_FIRST_BIDOMAIN_SUBTYPE,CMFE_EQUATIONS_SET_SECOND_BIDOMAIN_SUBTYPE, & + & CMFE_EQUATIONS_SET_MONODOMAIN_BUENOOROVIO_SUBTYPE,& + & CMFE_EQUATIONS_SET_MONODOMAIN_TENTUSSCHER06_SUBTYPE ,& + & CMFE_EQUATIONS_SET_DATA_POINT_FITTING_SUBTYPE,CMFE_EQUATIONS_SET_GENERALISED_DATA_FITTING_SUBTYPE, & + & CMFE_EQUATIONS_SET_VECTOR_DATA_FITTING_SUBTYPE,CMFE_EQUATIONS_SET_DIVFREE_VECTOR_DATA_FITTING_SUBTYPE, & + & CMFE_EQUATIONS_SET_VECTOR_DATA_PRE_FITTING_SUBTYPE,CMFE_EQUATIONS_SET_DIVFREE_VECTOR_DATA_PRE_FITTING_SUBTYPE, & + & CMFE_EQUATIONS_SET_MAT_PROPERTIES_DATA_FITTING_SUBTYPE,CMFE_EQUATIONS_SET_MAT_PROP_INRIA_MODEL_DATA_FITTING_SUBTYPE, & + & CMFE_EQUATIONS_SET_DATA_POINT_VECTOR_STATIC_FITTING_SUBTYPE, & + & CMFE_EQUATIONS_SET_DATA_PT_VECTOR_QUASISTATIC_FITTING_SUBTYPE, & + & CMFE_EQUATIONS_SET_GAUSS_POINT_FITTING_SUBTYPE, & + & CMFE_EQUATIONS_SET_PGM_NAVIER_STOKES_SUBTYPE, & + & CMFE_EQUATIONS_SET_CONSTITUTIVE_LAW_IN_CELLML_EVALUATE_SUBTYPE, & + & CMFE_EQUATIONS_SET_COUPLED_SOURCE_DIFFUSION_DIFFUSION_SUBTYPE, & + & CMFE_EQUATIONS_SET_COUPLED_SOURCE_DIFFUSION_ADVEC_DIFF_SUBTYPE, & + & CMFE_EQUATIONS_SET_BURGERS_SUBTYPE,CMFE_EQUATIONS_SET_GENERALISED_BURGERS_SUBTYPE, & + & CMFE_EQUATIONS_SET_STATIC_BURGERS_SUBTYPE, & + & CMFE_EQUATIONS_SET_INVISCID_BURGERS_SUBTYPE,CMFE_EQUATIONS_SET_STANDARD_MONODOMAIN_ELASTICITY_SUBTYPE, & + & CMFE_EQUATIONS_SET_1D3D_MONODOMAIN_ELASTICITY_SUBTYPE,CMFE_EQUATIONS_SET_MONODOMAIN_ELASTICITY_W_TITIN_SUBTYPE, & + & CMFE_EQUATIONS_SET_1D3D_MONODOMAIN_ACTIVE_STRAIN_SUBTYPE, & + & CMFE_EQUATIONS_SET_CONSTIT_AND_GROWTH_LAW_IN_CELLML_SUBTYPE, & + & CMFE_EQUATIONS_SET_GROWTH_LAW_IN_CELLML_SUBTYPE, & + & CMFE_EQUATIONS_SET_MR_AND_GROWTH_LAW_IN_CELLML_SUBTYPE, & + & CMFE_EQUATIONS_SET_MONODOMAIN_ELASTICITY_VELOCITY_SUBTYPE, & + & CMFE_EQUATIONS_SET_FINITE_ELASTICITY_NAVIER_STOKES_ALE_SUBTYPE, & + & CMFE_EQUATIONS_SET_RATE_BASED_SMOOTH_MODEL_SUBTYPE,CMFE_EQUATIONS_SET_COMPRESSIBLE_RATE_BASED_SMOOTH_MODEL_SUBTYPE, & + & CMFE_EQUATIONS_SET_RATE_BASED_GROWTH_MODEL_SUBTYPE,CMFE_EQUATIONS_SET_COMPRESSIBLE_RATE_BASED_GROWTH_MODEL_SUBTYPE + + PUBLIC CMFE_EQUATIONS_SET_FITTING_NO_SMOOTHING,CMFE_EQUATIONS_SET_FITTING_SOBOLEV_VALUE_SMOOTHING, & + & CMFE_EQUATIONS_SET_FITTING_SOBOLEV_DIFFERENCE_SMOOTHING,CMFE_EQUATIONS_SET_FITTING_STRAIN_ENERGY_SMOOTHING + + PUBLIC CMFE_EQUATIONS_SET_CELLML_REAC_SPLIT_REAC_DIFF_SUBTYPE, CMFE_EQUATIONS_SET_CELLML_REAC_NO_SPLIT_REAC_DIFF_SUBTYPE, & + & CMFE_EQUATIONS_SET_CONSTANT_REAC_DIFF_SUBTYPE + + PUBLIC CMFE_EQUATIONS_SET_FEM_SOLUTION_METHOD,CMFE_EQUATIONS_SET_BEM_SOLUTION_METHOD,CMFE_EQUATIONS_SET_FD_SOLUTION_METHOD, & + & CMFE_EQUATIONS_SET_FV_SOLUTION_METHOD,CMFE_EQUATIONS_SET_GFEM_SOLUTION_METHOD,CMFE_EQUATIONS_SET_GFD_SOLUTION_METHOD, & + & CMFE_EQUATIONS_SET_GFV_SOLUTION_METHOD + + PUBLIC CMFE_EQUATIONS_SET_DERIVED_DEFORMATION_GRADIENT,CMFE_EQUATIONS_SET_DERIVED_R_CAUCHY_GREEN_DEFORMATION, & + & CMFE_EQUATIONS_SET_DERIVED_L_CAUCHY_GREEN_DEFORMATION,CMFE_EQUATIONS_SET_DERIVED_GREEN_LAGRANGE_STRAIN, & + & CMFE_EQUATIONS_SET_DERIVED_CAUCHY_STRESS,CMFE_EQUATIONS_SET_DERIVED_FIRST_PK_STRESS, & + & CMFE_EQUATIONS_SET_DERIVED_SECOND_PK_STRESS + + PUBLIC CMFE_EQUATIONS_MATRIX_STIFFNESS,CMFE_EQUATIONS_MATRIX_DAMPING,CMFE_EQUATIONS_MATRIX_MASS + + PUBLIC CMFE_EQUATIONS_SET_NO_OUTPUT,CMFE_EQUATIONS_SET_PROGRESS_OUTPUT + + PUBLIC CMFE_EQUATIONS_SET_LAPLACE_EQUATION_TWO_DIM_1,CMFE_EQUATIONS_SET_LAPLACE_EQUATION_TWO_DIM_2, & + & CMFE_EQUATIONS_SET_LAPLACE_EQUATION_THREE_DIM_1,CMFE_EQUATIONS_SET_LAPLACE_EQUATION_THREE_DIM_2 + + PUBLIC CMFE_EQUATIONS_SET_HELMHOLTZ_EQUATION_TWO_DIM_1 + + PUBLIC CMFE_EQUATIONS_SET_LINEAR_ELASTICITY_ONE_DIM_1,CMFE_EQUATIONS_SET_LINEAR_ELASTICITY_TWO_DIM_1, & + & CMFE_EQUATIONS_SET_LINEAR_ELASTICITY_TWO_DIM_2,CMFE_EQUATIONS_SET_LINEAR_ELASTICITY_THREE_DIM_1, & + & CMFE_EQUATIONS_SET_LINEAR_ELASTICITY_THREE_DIM_2 + + PUBLIC CMFE_EQUATIONS_SET_DIFFUSION_EQUATION_ONE_DIM_1,CMFE_EQUATIONS_SET_DIFFUSION_EQUATION_TWO_DIM_1, & + & CMFE_EQUATIONS_SET_DIFFUSION_EQUATION_THREE_DIM_1, & + & CMFE_EQUATIONS_SET_LINEAR_SOURCE_DIFFUSION_THREE_DIM_1,CMFE_EQUATIONS_SET_QUADRATIC_SOURCE_DIFFUSION_ONE_DIM_1, & + & CMFE_EQUATIONS_SET_EXPONENTIAL_SOURCE_DIFFUSION_ONE_DIM_1,CMFE_EQUATIONS_SET_MULTI_COMP_DIFFUSION_TWO_COMP_TWO_DIM, & + & CMFE_EQUATIONS_SET_MULTI_COMP_DIFFUSION_TWO_COMP_THREE_DIM,CMFE_EQUATIONS_SET_MULTI_COMP_DIFFUSION_THREE_COMP_THREE_DIM, & + & CMFE_EQUATIONS_SET_MULTI_COMP_DIFFUSION_FOUR_COMP_THREE_DIM + + PUBLIC CMFE_EQUATIONS_SET_ADVECTION_DIFFUSION_EQUATION_TWO_DIM_1 + + PUBLIC CMFE_EQUATIONS_SET_POISEUILLE_EQUATION_TWO_DIM_1 + + PUBLIC CMFE_EQUATIONS_SET_BURGERS_EQUATION_ONE_DIM_1,CMFE_EQUATIONS_SET_GENERALISED_BURGERS_EQUATION_ONE_DIM_1, & + & CMFE_EQUATIONS_SET_GENERALISED_BURGERS_EQUATION_ONE_DIM_2, & + & CMFE_EQUATIONS_SET_STATIC_BURGERS_EQUATION_ONE_DIM_1 + + PUBLIC CMFE_EQUATIONS_SET_POISSON_EQUATION_TWO_DIM_1,CMFE_EQUATIONS_SET_POISSON_EQUATION_TWO_DIM_2, & + & CMFE_EQUATIONS_SET_POISSON_EQUATION_TWO_DIM_3 + PUBLIC CMFE_EQUATIONS_SET_POISSON_EQUATION_THREE_DIM_1,CMFE_EQUATIONS_SET_POISSON_EQUATION_THREE_DIM_2, & + & CMFE_EQUATIONS_SET_POISSON_EQUATION_THREE_DIM_3 + PUBLIC CMFE_EQUATIONS_SET_PRESSURE_POISSON_THREE_DIM_1, & + & CMFE_EQUATIONS_SET_PRESSURE_POISSON_THREE_DIM_2 + + PUBLIC CMFE_EQUATIONS_SET_STOKES_EQUATION_TWO_DIM_1,CMFE_EQUATIONS_SET_STOKES_EQUATION_TWO_DIM_2, & + & CMFE_EQUATIONS_SET_STOKES_EQUATION_TWO_DIM_3 + PUBLIC CMFE_EQUATIONS_SET_STOKES_EQUATION_TWO_DIM_4,CMFE_EQUATIONS_SET_STOKES_EQUATION_TWO_DIM_5 + PUBLIC CMFE_EQUATIONS_SET_STOKES_EQUATION_THREE_DIM_1,CMFE_EQUATIONS_SET_STOKES_EQUATION_THREE_DIM_2, & + & CMFE_EQUATIONS_SET_STOKES_EQUATION_THREE_DIM_3 + PUBLIC CMFE_EQUATIONS_SET_STOKES_EQUATION_THREE_DIM_4,CMFE_EQUATIONS_SET_STOKES_EQUATION_THREE_DIM_5 + + PUBLIC CMFE_EQUATIONS_SET_NAVIER_STOKES_EQUATION_TWO_DIM_POISEUILLE, & + & CMFE_EQUATIONS_SET_NAVIER_STOKES_EQUATION_TWO_DIM_TAYLOR_GREEN + PUBLIC CMFE_EQUATIONS_SET_NAVIER_STOKES_EQUATION_FLOWRATE_AORTA, & + & CMFE_EQUATIONS_SET_NAVIER_STOKES_EQUATION_SINUSOID, & + & CMFE_EQUATIONS_SET_NAVIER_STOKES_EQUATION_SPLINT_FROM_FILE + PUBLIC CMFE_EQUATIONS_SET_NAVIER_STOKES_EQUATION_TWO_DIM_1,CMFE_EQUATIONS_SET_NAVIER_STOKES_EQUATION_TWO_DIM_2, & + & CMFE_EQUATIONS_SET_NAVIER_STOKES_EQUATION_TWO_DIM_3 + PUBLIC CMFE_EQUATIONS_SET_NAVIER_STOKES_EQUATION_TWO_DIM_4,CMFE_EQUATIONS_SET_NAVIER_STOKES_EQUATION_TWO_DIM_5 + PUBLIC CMFE_EQUATIONS_SET_NAVIER_STOKES_EQUATION_THREE_DIM_1,CMFE_EQUATIONS_SET_NAVIER_STOKES_EQUATION_THREE_DIM_2, & + & CMFE_EQUATIONS_SET_NAVIER_STOKES_EQUATION_THREE_DIM_3 + PUBLIC CMFE_EQUATIONS_SET_NAVIER_STOKES_EQUATION_THREE_DIM_4,CMFE_EQUATIONS_SET_NAVIER_STOKES_EQUATION_THREE_DIM_5 + + PUBLIC CMFE_EQUATIONS_SET_DARCY_EQUATION_TWO_DIM_1,CMFE_EQUATIONS_SET_DARCY_EQUATION_TWO_DIM_2, & + & CMFE_EQUATIONS_SET_DARCY_EQUATION_TWO_DIM_3 + PUBLIC CMFE_EQUATIONS_SET_DARCY_EQUATION_THREE_DIM_1,CMFE_EQUATIONS_SET_DARCY_EQUATION_THREE_DIM_2, & + & CMFE_EQUATIONS_SET_DARCY_EQUATION_THREE_DIM_3 + PUBLIC CMFE_EQUATIONS_SET_INCOMP_ELAST_DARCY_ANALYTIC_DARCY + + PUBLIC CMFE_EQUATIONS_SET_FINITE_ELASTICITY_CYLINDER + PUBLIC CMFE_FINITE_ELASTICITY_ANALYTIC_CYLINDER_PARAM_PIN_IDX,CMFE_FINITE_ELASTICITY_ANALYTIC_CYLINDER_PARAM_POUT_IDX + PUBLIC CMFE_FINITE_ELASTICITY_ANALYTIC_CYLINDER_PARAM_LAMBDA_IDX,CMFE_FINITE_ELASTICITY_ANALYTIC_CYLINDER_PARAM_TSI_IDX + PUBLIC CMFE_FINITE_ELASTICITY_ANALYTIC_CYLINDER_PARAM_RIN_IDX,CMFE_FINITE_ELASTICITY_ANALYTIC_CYLINDER_PARAM_ROUT_IDX + PUBLIC CMFE_FINITE_ELASTICITY_ANALYTIC_CYLINDER_PARAM_C1_IDX,CMFE_FINITE_ELASTICITY_ANALYTIC_CYLINDER_PARAM_C2_IDX + +!================================================================================================================================== +! +! EQUATIONS_SET_ROUTINES +! +!================================================================================================================================== + + !Module parameters + + !Module types + + !Module variables + + !Interfaces + + !>Finish the creation of a analytic solution for an equations set. \see OpenCMISS::Iron::cmfe_EquationsSet_AnalyticCreateStart + INTERFACE cmfe_EquationsSet_AnalyticCreateFinish + MODULE PROCEDURE cmfe_EquationsSet_AnalyticCreateFinishNumber + MODULE PROCEDURE cmfe_EquationsSet_AnalyticCreateFinishObj + END INTERFACE cmfe_EquationsSet_AnalyticCreateFinish + + !>Start the creation of a analytic solution for an equations set. \see OpenCMISS::Iron::cmfe_EquationsSet_AnalyticCreateFinish + INTERFACE cmfe_EquationsSet_AnalyticCreateStart + MODULE PROCEDURE cmfe_EquationsSet_AnalyticCreateStartNumber + MODULE PROCEDURE cmfe_EquationsSet_AnalyticCreateStartObj + END INTERFACE cmfe_EquationsSet_AnalyticCreateStart + + !>Destroy the analytic solution for an equations set. + INTERFACE cmfe_EquationsSet_AnalyticDestroy + MODULE PROCEDURE cmfe_EquationsSet_AnalyticDestroyNumber + MODULE PROCEDURE cmfe_EquationsSet_AnalyticDestroyObj + END INTERFACE cmfe_EquationsSet_AnalyticDestroy + + !>Evaluates the current analytic solution for an equations set. + INTERFACE cmfe_EquationsSet_AnalyticEvaluate + MODULE PROCEDURE cmfe_EquationsSet_AnalyticEvaluateNumber + MODULE PROCEDURE cmfe_EquationsSet_AnalyticEvaluateObj + END INTERFACE cmfe_EquationsSet_AnalyticEvaluate + + !>Returns the analytic time for an equations set. + INTERFACE cmfe_EquationsSet_AnalyticTimeGet + MODULE PROCEDURE cmfe_EquationsSet_AnalyticTimeGetNumber + MODULE PROCEDURE cmfe_EquationsSet_AnalyticTimeGetObj + END INTERFACE cmfe_EquationsSet_AnalyticTimeGet + + !>Sets/changes the analytic time for an equations set. + INTERFACE cmfe_EquationsSet_AnalyticTimeSet + MODULE PROCEDURE cmfe_EquationsSet_AnalyticTimeSetNumber + MODULE PROCEDURE cmfe_EquationsSet_AnalyticTimeSetObj + END INTERFACE cmfe_EquationsSet_AnalyticTimeSet + + !>Finish the creation of an equations set. \see OpenCMISS::Iron::cmfe_EquationsSet_CreateStart + INTERFACE cmfe_EquationsSet_CreateFinish + MODULE PROCEDURE cmfe_EquationsSet_CreateFinishNumber + MODULE PROCEDURE cmfe_EquationsSet_CreateFinishObj + END INTERFACE cmfe_EquationsSet_CreateFinish + + !>Start the creation of an equations set on a region. \see OpenCMISS::Iron::cmfe_EquationsSet_CreateFinish + INTERFACE cmfe_EquationsSet_CreateStart + MODULE PROCEDURE cmfe_EquationsSet_CreateStartNumber + MODULE PROCEDURE cmfe_EquationsSet_CreateStartObj + END INTERFACE cmfe_EquationsSet_CreateStart + + !>Destroy an equations set. + INTERFACE cmfe_EquationsSet_Destroy + MODULE PROCEDURE cmfe_EquationsSet_DestroyNumber + MODULE PROCEDURE cmfe_EquationsSet_DestroyObj + END INTERFACE cmfe_EquationsSet_Destroy + + !>Finish the creation of dependent variables for an equations set. \see OpenCMISS::Iron::cmfe_EquationsSet_DependentCreateStart + INTERFACE cmfe_EquationsSet_DependentCreateFinish + MODULE PROCEDURE cmfe_EquationsSet_DependentCreateFinishNumber + MODULE PROCEDURE cmfe_EquationsSet_DependentCreateFinishObj + END INTERFACE cmfe_EquationsSet_DependentCreateFinish + + !>Start the creation of dependent variables for an equations set. \see OpenCMISS::Iron::cmfe_EquationsSet_DependentCreateFinish + INTERFACE cmfe_EquationsSet_DependentCreateStart + MODULE PROCEDURE cmfe_EquationsSet_DependentCreateStartNumber + MODULE PROCEDURE cmfe_EquationsSet_DependentCreateStartObj + END INTERFACE cmfe_EquationsSet_DependentCreateStart + + !>Destroy the dependent variables for an equations set. + INTERFACE cmfe_EquationsSet_DependentDestroy + MODULE PROCEDURE cmfe_EquationsSet_DependentDestroyNumber + MODULE PROCEDURE cmfe_EquationsSet_DependentDestroyObj + END INTERFACE cmfe_EquationsSet_DependentDestroy + + !>Finish the creation of derived variables for an equations set. \see OpenCMISS::Iron::cmfe_EquationsSet_DerivedCreateStart + INTERFACE cmfe_EquationsSet_DerivedCreateFinish + MODULE PROCEDURE cmfe_EquationsSet_DerivedCreateFinishNumber + MODULE PROCEDURE cmfe_EquationsSet_DerivedCreateFinishObj + END INTERFACE cmfe_EquationsSet_DerivedCreateFinish + + !>Start the creation of derived variables for an equations set. These are used to store any intermediate + !>calculated values, for example stress and strain fields in an elasticity problem. \see OpenCMISS::Iron::cmfe_EquationsSet_DerivedCreateFinish + INTERFACE cmfe_EquationsSet_DerivedCreateStart + MODULE PROCEDURE cmfe_EquationsSet_DerivedCreateStartNumber + MODULE PROCEDURE cmfe_EquationsSet_DerivedCreateStartObj + END INTERFACE cmfe_EquationsSet_DerivedCreateStart + + !>Destroy the derived variables for an equations set. + INTERFACE cmfe_EquationsSet_DerivedDestroy + MODULE PROCEDURE cmfe_EquationsSet_DerivedDestroyNumber + MODULE PROCEDURE cmfe_EquationsSet_DerivedDestroyObj + END INTERFACE cmfe_EquationsSet_DerivedDestroy + + !>Finish the creation of equations for an equations set. \see OpenCMISS::Iron::cmfe_EquationsSet_EquationsCreateStart + INTERFACE cmfe_EquationsSet_EquationsCreateFinish + MODULE PROCEDURE cmfe_EquationsSet_EquationsCreateFinishNumber + MODULE PROCEDURE cmfe_EquationsSet_EquationsCreateFinishObj + END INTERFACE cmfe_EquationsSet_EquationsCreateFinish + + !>Start the creation of equations for an equations set. \see OpenCMISS::Iron::cmfe_EquationsSet_EquationsCreateFinish + INTERFACE cmfe_EquationsSet_EquationsCreateStart + MODULE PROCEDURE cmfe_EquationsSet_EquationsCreateStartNumber + MODULE PROCEDURE cmfe_EquationsSet_EquationsCreateStartObj + END INTERFACE cmfe_EquationsSet_EquationsCreateStart + + !>Destroy the equations for an equations set. + INTERFACE cmfe_EquationsSet_EquationsDestroy + MODULE PROCEDURE cmfe_EquationsSet_EquationsDestroyNumber + MODULE PROCEDURE cmfe_EquationsSet_EquationsDestroyObj + END INTERFACE cmfe_EquationsSet_EquationsDestroy + + !>Finish the creation of independent fields for an equations set. \see OpenCMISS::Iron::cmfe_EquationsSet_IndependentCreateStart + INTERFACE cmfe_EquationsSet_IndependentCreateFinish + MODULE PROCEDURE cmfe_EquationsSet_IndependentCreateFinishNumber + MODULE PROCEDURE cmfe_EquationsSet_IndependentCreateFinishObj + END INTERFACE cmfe_EquationsSet_IndependentCreateFinish + + !>Start the creation of independent fields for an equations set. \see OpenCMISS::Iron::cmfe_EquationsSet_MaterialsCreateFinish + INTERFACE cmfe_EquationsSet_IndependentCreateStart + MODULE PROCEDURE cmfe_EquationsSet_IndependentCreateStartNumber + MODULE PROCEDURE cmfe_EquationsSet_IndependentCreateStartObj + END INTERFACE cmfe_EquationsSet_IndependentCreateStart + + !>Destroy the independent fields for an equations set. + INTERFACE cmfe_EquationsSet_IndependentDestroy + MODULE PROCEDURE cmfe_EquationsSet_IndependentDestroyNumber + MODULE PROCEDURE cmfe_EquationsSet_IndependentDestroyObj + END INTERFACE cmfe_EquationsSet_IndependentDestroy + + !>Returns the label for an equations set. + INTERFACE cmfe_EquationsSet_LabelGet + MODULE PROCEDURE cmfe_EquationsSet_LabelGetCNumber + MODULE PROCEDURE cmfe_EquationsSet_LabelGetCObj + MODULE PROCEDURE cmfe_EquationsSet_LabelGetVSNumber + MODULE PROCEDURE cmfe_EquationsSet_LabelGetVSObj + END INTERFACE cmfe_EquationsSet_LabelGet + + !>Sets/changes the label for an equations set. + INTERFACE cmfe_EquationsSet_LabelSet + MODULE PROCEDURE cmfe_EquationsSet_LabelSetCNumber + MODULE PROCEDURE cmfe_EquationsSet_LabelSetCObj + MODULE PROCEDURE cmfe_EquationsSet_LabelSetVSNumber + MODULE PROCEDURE cmfe_EquationsSet_LabelSetVSObj + END INTERFACE cmfe_EquationsSet_LabelSet + + !>Finish the creation of materials for an equations set. \see OpenCMISS::Iron::cmfe_EquationsSet_MaterialsCreateStart + INTERFACE cmfe_EquationsSet_MaterialsCreateFinish + MODULE PROCEDURE cmfe_EquationsSet_MaterialsCreateFinishNumber + MODULE PROCEDURE cmfe_EquationsSet_MaterialsCreateFinishObj + END INTERFACE cmfe_EquationsSet_MaterialsCreateFinish + + !>Start the creation of materials for an equations set. \see OpenCMISS::Iron::cmfe_EquationsSet_MaterialsCreateFinish + INTERFACE cmfe_EquationsSet_MaterialsCreateStart + MODULE PROCEDURE cmfe_EquationsSet_MaterialsCreateStartNumber + MODULE PROCEDURE cmfe_EquationsSet_MaterialsCreateStartObj + END INTERFACE cmfe_EquationsSet_MaterialsCreateStart + + !>Destroy the materials for an equations set. + INTERFACE cmfe_EquationsSet_MaterialsDestroy + MODULE PROCEDURE cmfe_EquationsSet_MaterialsDestroyNumber + MODULE PROCEDURE cmfe_EquationsSet_MaterialsDestroyObj + END INTERFACE cmfe_EquationsSet_MaterialsDestroy + + !>Gets the output type for an equations set. + INTERFACE cmfe_EquationsSet_OutputTypeGet + MODULE PROCEDURE cmfe_EquationsSet_OutputTypeGetNumber + MODULE PROCEDURE cmfe_EquationsSet_OutputTypeGetObj + END INTERFACE cmfe_EquationsSet_OutputTypeGet + + !>Sets/changes the output type an equations set. + INTERFACE cmfe_EquationsSet_OutputTypeSet + MODULE PROCEDURE cmfe_EquationsSet_OutputTypeSetNumber + MODULE PROCEDURE cmfe_EquationsSet_OutputTypeSetObj + END INTERFACE cmfe_EquationsSet_OutputTypeSet + + !>Returns the solution method for an equations set. + INTERFACE cmfe_EquationsSet_SolutionMethodGet + MODULE PROCEDURE cmfe_EquationsSet_SolutionMethodGetNumber + MODULE PROCEDURE cmfe_EquationsSet_SolutionMethodGetObj + END INTERFACE cmfe_EquationsSet_SolutionMethodGet + + !>Sets/changes the solution method for an equations set. + INTERFACE cmfe_EquationsSet_SolutionMethodSet + MODULE PROCEDURE cmfe_EquationsSet_SolutionMethodSetNumber + MODULE PROCEDURE cmfe_EquationsSet_SolutionMethodSetObj + END INTERFACE cmfe_EquationsSet_SolutionMethodSet + + !>Finish the creation of a source for an equations set. \see OpenCMISS::Iron::cmfe_EquationsSet_SourceCreateStart + INTERFACE cmfe_EquationsSet_SourceCreateFinish + MODULE PROCEDURE cmfe_EquationsSet_SourceCreateFinishNumber + MODULE PROCEDURE cmfe_EquationsSet_SourceCreateFinishObj + END INTERFACE cmfe_EquationsSet_SourceCreateFinish + + !>Start the creation of a source for an equations set. \see OpenCMISS::Iron::cmfe_EquationsSet_SourceCreateFinish + INTERFACE cmfe_EquationsSet_SourceCreateStart + MODULE PROCEDURE cmfe_EquationsSet_SourceCreateStartNumber + MODULE PROCEDURE cmfe_EquationsSet_SourceCreateStartObj + END INTERFACE cmfe_EquationsSet_SourceCreateStart + + !>Destroy the source for an equations set. + INTERFACE cmfe_EquationsSet_SourceDestroy + MODULE PROCEDURE cmfe_EquationsSet_SourceDestroyNumber + MODULE PROCEDURE cmfe_EquationsSet_SourceDestroyObj + END INTERFACE cmfe_EquationsSet_SourceDestroy + + !>Returns the equations set specification array + INTERFACE cmfe_EquationsSet_SpecificationGet + MODULE PROCEDURE cmfe_EquationsSet_SpecificationGetNumber + MODULE PROCEDURE cmfe_EquationsSet_SpecificationGetObj + END INTERFACE cmfe_EquationsSet_SpecificationGet + + !>Returns the size of the equations set specification array. + INTERFACE cmfe_EquationsSet_SpecificationSizeGet + MODULE PROCEDURE cmfe_EquationsSet_SpecificationSizeGetNumber + MODULE PROCEDURE cmfe_EquationsSet_SpecificationSizeGetObj + END INTERFACE cmfe_EquationsSet_SpecificationSizeGet + + !>Calculates an output field for the equations set. + INTERFACE cmfe_EquationsSet_DerivedVariableCalculate + MODULE PROCEDURE cmfe_EquationsSet_DerivedVariableCalculateNumber + MODULE PROCEDURE cmfe_EquationsSet_DerivedVariableCalculateObj + END INTERFACE cmfe_EquationsSet_DerivedVariableCalculate + + !>Set the derived field variable type to be used by a derived variable + INTERFACE cmfe_EquationsSet_DerivedVariableSet + MODULE PROCEDURE cmfe_EquationsSet_DerivedVariableSetNumber + MODULE PROCEDURE cmfe_EquationsSet_DerivedVariableSetObj + END INTERFACE cmfe_EquationsSet_DerivedVariableSet - PUBLIC CMFE_EQUATIONS_MATRIX_STIFFNESS,CMFE_EQUATIONS_MATRIX_DAMPING,CMFE_EQUATIONS_MATRIX_MASS - - PUBLIC CMFE_EQUATIONS_SET_NO_OUTPUT,CMFE_EQUATIONS_SET_PROGRESS_OUTPUT - - PUBLIC CMFE_EQUATIONS_SET_LAPLACE_EQUATION_TWO_DIM_1,CMFE_EQUATIONS_SET_LAPLACE_EQUATION_TWO_DIM_2, & - & CMFE_EQUATIONS_SET_LAPLACE_EQUATION_THREE_DIM_1,CMFE_EQUATIONS_SET_LAPLACE_EQUATION_THREE_DIM_2 - - PUBLIC CMFE_EQUATIONS_SET_HELMHOLTZ_EQUATION_TWO_DIM_1 - - PUBLIC CMFE_EQUATIONS_SET_LINEAR_ELASTICITY_ONE_DIM_1,CMFE_EQUATIONS_SET_LINEAR_ELASTICITY_TWO_DIM_1, & - & CMFE_EQUATIONS_SET_LINEAR_ELASTICITY_TWO_DIM_2,CMFE_EQUATIONS_SET_LINEAR_ELASTICITY_THREE_DIM_1, & - & CMFE_EQUATIONS_SET_LINEAR_ELASTICITY_THREE_DIM_2 - - PUBLIC CMFE_EQUATIONS_SET_DIFFUSION_EQUATION_ONE_DIM_1,CMFE_EQUATIONS_SET_DIFFUSION_EQUATION_TWO_DIM_1, & - & CMFE_EQUATIONS_SET_DIFFUSION_EQUATION_THREE_DIM_1, & - & CMFE_EQUATIONS_SET_LINEAR_SOURCE_DIFFUSION_THREE_DIM_1,CMFE_EQUATIONS_SET_QUADRATIC_SOURCE_DIFFUSION_ONE_DIM_1, & - & CMFE_EQUATIONS_SET_EXPONENTIAL_SOURCE_DIFFUSION_ONE_DIM_1,CMFE_EQUATIONS_SET_MULTI_COMP_DIFFUSION_TWO_COMP_TWO_DIM, & - & CMFE_EQUATIONS_SET_MULTI_COMP_DIFFUSION_TWO_COMP_THREE_DIM,CMFE_EQUATIONS_SET_MULTI_COMP_DIFFUSION_THREE_COMP_THREE_DIM, & - & CMFE_EQUATIONS_SET_MULTI_COMP_DIFFUSION_FOUR_COMP_THREE_DIM - - PUBLIC CMFE_EQUATIONS_SET_ADVECTION_DIFFUSION_EQUATION_TWO_DIM_1 - - PUBLIC CMFE_EQUATIONS_SET_POISEUILLE_EQUATION_TWO_DIM_1 - - PUBLIC CMFE_EQUATIONS_SET_BURGERS_EQUATION_ONE_DIM_1,CMFE_EQUATIONS_SET_GENERALISED_BURGERS_EQUATION_ONE_DIM_1, & - & CMFE_EQUATIONS_SET_GENERALISED_BURGERS_EQUATION_ONE_DIM_2, & - & CMFE_EQUATIONS_SET_STATIC_BURGERS_EQUATION_ONE_DIM_1 - - PUBLIC CMFE_EQUATIONS_SET_POISSON_EQUATION_TWO_DIM_1,CMFE_EQUATIONS_SET_POISSON_EQUATION_TWO_DIM_2, & - & CMFE_EQUATIONS_SET_POISSON_EQUATION_TWO_DIM_3 - PUBLIC CMFE_EQUATIONS_SET_POISSON_EQUATION_THREE_DIM_1,CMFE_EQUATIONS_SET_POISSON_EQUATION_THREE_DIM_2, & - & CMFE_EQUATIONS_SET_POISSON_EQUATION_THREE_DIM_3 - PUBLIC CMFE_EQUATIONS_SET_PRESSURE_POISSON_THREE_DIM_1, & - & CMFE_EQUATIONS_SET_PRESSURE_POISSON_THREE_DIM_2 - - PUBLIC CMFE_EQUATIONS_SET_STOKES_EQUATION_TWO_DIM_1,CMFE_EQUATIONS_SET_STOKES_EQUATION_TWO_DIM_2, & - & CMFE_EQUATIONS_SET_STOKES_EQUATION_TWO_DIM_3 - PUBLIC CMFE_EQUATIONS_SET_STOKES_EQUATION_TWO_DIM_4,CMFE_EQUATIONS_SET_STOKES_EQUATION_TWO_DIM_5 - PUBLIC CMFE_EQUATIONS_SET_STOKES_EQUATION_THREE_DIM_1,CMFE_EQUATIONS_SET_STOKES_EQUATION_THREE_DIM_2, & - & CMFE_EQUATIONS_SET_STOKES_EQUATION_THREE_DIM_3 - PUBLIC CMFE_EQUATIONS_SET_STOKES_EQUATION_THREE_DIM_4,CMFE_EQUATIONS_SET_STOKES_EQUATION_THREE_DIM_5 - - PUBLIC CMFE_EQUATIONS_SET_NAVIER_STOKES_EQUATION_TWO_DIM_POISEUILLE, & - & CMFE_EQUATIONS_SET_NAVIER_STOKES_EQUATION_TWO_DIM_TAYLOR_GREEN - PUBLIC CMFE_EQUATIONS_SET_NAVIER_STOKES_EQUATION_FLOWRATE_AORTA, & - & CMFE_EQUATIONS_SET_NAVIER_STOKES_EQUATION_SINUSOID, & - & CMFE_EQUATIONS_SET_NAVIER_STOKES_EQUATION_SPLINT_FROM_FILE - PUBLIC CMFE_EQUATIONS_SET_NAVIER_STOKES_EQUATION_TWO_DIM_1,CMFE_EQUATIONS_SET_NAVIER_STOKES_EQUATION_TWO_DIM_2, & - & CMFE_EQUATIONS_SET_NAVIER_STOKES_EQUATION_TWO_DIM_3 - PUBLIC CMFE_EQUATIONS_SET_NAVIER_STOKES_EQUATION_TWO_DIM_4,CMFE_EQUATIONS_SET_NAVIER_STOKES_EQUATION_TWO_DIM_5 - PUBLIC CMFE_EQUATIONS_SET_NAVIER_STOKES_EQUATION_THREE_DIM_1,CMFE_EQUATIONS_SET_NAVIER_STOKES_EQUATION_THREE_DIM_2, & - & CMFE_EQUATIONS_SET_NAVIER_STOKES_EQUATION_THREE_DIM_3 - PUBLIC CMFE_EQUATIONS_SET_NAVIER_STOKES_EQUATION_THREE_DIM_4,CMFE_EQUATIONS_SET_NAVIER_STOKES_EQUATION_THREE_DIM_5 - - PUBLIC CMFE_EQUATIONS_SET_DARCY_EQUATION_TWO_DIM_1,CMFE_EQUATIONS_SET_DARCY_EQUATION_TWO_DIM_2, & - & CMFE_EQUATIONS_SET_DARCY_EQUATION_TWO_DIM_3 - PUBLIC CMFE_EQUATIONS_SET_DARCY_EQUATION_THREE_DIM_1,CMFE_EQUATIONS_SET_DARCY_EQUATION_THREE_DIM_2, & - & CMFE_EQUATIONS_SET_DARCY_EQUATION_THREE_DIM_3 - PUBLIC CMFE_EQUATIONS_SET_INCOMP_ELAST_DARCY_ANALYTIC_DARCY - - PUBLIC CMFE_EQUATIONS_SET_FINITE_ELASTICITY_CYLINDER - PUBLIC CMFE_FINITE_ELASTICITY_ANALYTIC_CYLINDER_PARAM_PIN_IDX,CMFE_FINITE_ELASTICITY_ANALYTIC_CYLINDER_PARAM_POUT_IDX - PUBLIC CMFE_FINITE_ELASTICITY_ANALYTIC_CYLINDER_PARAM_LAMBDA_IDX,CMFE_FINITE_ELASTICITY_ANALYTIC_CYLINDER_PARAM_TSI_IDX - PUBLIC CMFE_FINITE_ELASTICITY_ANALYTIC_CYLINDER_PARAM_RIN_IDX,CMFE_FINITE_ELASTICITY_ANALYTIC_CYLINDER_PARAM_ROUT_IDX - PUBLIC CMFE_FINITE_ELASTICITY_ANALYTIC_CYLINDER_PARAM_C1_IDX,CMFE_FINITE_ELASTICITY_ANALYTIC_CYLINDER_PARAM_C2_IDX - -!!================================================================================================================================== -!! -!! EQUATIONS_SET_ROUTINES -!! -!!================================================================================================================================== - - !Module parameters - - !Module types - - !Module variables - - !Interfaces - - !>Finish the creation of a analytic solution for an equations set. \see OpenCMISS::Iron::cmfe_EquationsSet_AnalyticCreateStart - INTERFACE cmfe_EquationsSet_AnalyticCreateFinish - MODULE PROCEDURE cmfe_EquationsSet_AnalyticCreateFinishNumber - MODULE PROCEDURE cmfe_EquationsSet_AnalyticCreateFinishObj - END INTERFACE cmfe_EquationsSet_AnalyticCreateFinish - - !>Start the creation of a analytic solution for an equations set. \see OpenCMISS::Iron::cmfe_EquationsSet_AnalyticCreateFinish - INTERFACE cmfe_EquationsSet_AnalyticCreateStart - MODULE PROCEDURE cmfe_EquationsSet_AnalyticCreateStartNumber - MODULE PROCEDURE cmfe_EquationsSet_AnalyticCreateStartObj - END INTERFACE cmfe_EquationsSet_AnalyticCreateStart - - !>Destroy the analytic solution for an equations set. - INTERFACE cmfe_EquationsSet_AnalyticDestroy - MODULE PROCEDURE cmfe_EquationsSet_AnalyticDestroyNumber - MODULE PROCEDURE cmfe_EquationsSet_AnalyticDestroyObj - END INTERFACE cmfe_EquationsSet_AnalyticDestroy - - !>Evaluates the current analytic solution for an equations set. - INTERFACE cmfe_EquationsSet_AnalyticEvaluate - MODULE PROCEDURE cmfe_EquationsSet_AnalyticEvaluateNumber - MODULE PROCEDURE cmfe_EquationsSet_AnalyticEvaluateObj - END INTERFACE cmfe_EquationsSet_AnalyticEvaluate - - !>Returns the analytic time for an equations set. - INTERFACE cmfe_EquationsSet_AnalyticTimeGet - MODULE PROCEDURE cmfe_EquationsSet_AnalyticTimeGetNumber - MODULE PROCEDURE cmfe_EquationsSet_AnalyticTimeGetObj - END INTERFACE cmfe_EquationsSet_AnalyticTimeGet - - !>Sets/changes the analytic time for an equations set. - INTERFACE cmfe_EquationsSet_AnalyticTimeSet - MODULE PROCEDURE cmfe_EquationsSet_AnalyticTimeSetNumber - MODULE PROCEDURE cmfe_EquationsSet_AnalyticTimeSetObj - END INTERFACE cmfe_EquationsSet_AnalyticTimeSet - - !>Finish the creation of an equations set. \see OpenCMISS::Iron::cmfe_EquationsSet_CreateStart - INTERFACE cmfe_EquationsSet_CreateFinish - MODULE PROCEDURE cmfe_EquationsSet_CreateFinishNumber - MODULE PROCEDURE cmfe_EquationsSet_CreateFinishObj - END INTERFACE cmfe_EquationsSet_CreateFinish - - !>Start the creation of an equations set on a region. \see OpenCMISS::Iron::cmfe_EquationsSet_CreateFinish - INTERFACE cmfe_EquationsSet_CreateStart - MODULE PROCEDURE cmfe_EquationsSet_CreateStartNumber - MODULE PROCEDURE cmfe_EquationsSet_CreateStartObj - END INTERFACE cmfe_EquationsSet_CreateStart - - !>Destroy an equations set. - INTERFACE cmfe_EquationsSet_Destroy - MODULE PROCEDURE cmfe_EquationsSet_DestroyNumber - MODULE PROCEDURE cmfe_EquationsSet_DestroyObj - END INTERFACE cmfe_EquationsSet_Destroy - - !>Finish the creation of dependent variables for an equations set. \see OpenCMISS::Iron::cmfe_EquationsSet_DependentCreateStart - INTERFACE cmfe_EquationsSet_DependentCreateFinish - MODULE PROCEDURE cmfe_EquationsSet_DependentCreateFinishNumber - MODULE PROCEDURE cmfe_EquationsSet_DependentCreateFinishObj - END INTERFACE cmfe_EquationsSet_DependentCreateFinish - - !>Start the creation of dependent variables for an equations set. \see OpenCMISS::Iron::cmfe_EquationsSet_DependentCreateFinish - INTERFACE cmfe_EquationsSet_DependentCreateStart - MODULE PROCEDURE cmfe_EquationsSet_DependentCreateStartNumber - MODULE PROCEDURE cmfe_EquationsSet_DependentCreateStartObj - END INTERFACE cmfe_EquationsSet_DependentCreateStart - - !>Destroy the dependent variables for an equations set. - INTERFACE cmfe_EquationsSet_DependentDestroy - MODULE PROCEDURE cmfe_EquationsSet_DependentDestroyNumber - MODULE PROCEDURE cmfe_EquationsSet_DependentDestroyObj - END INTERFACE cmfe_EquationsSet_DependentDestroy - - !>Finish the creation of derived variables for an equations set. \see OpenCMISS::Iron::cmfe_EquationsSet_DerivedCreateStart - INTERFACE cmfe_EquationsSet_DerivedCreateFinish - MODULE PROCEDURE cmfe_EquationsSet_DerivedCreateFinishNumber - MODULE PROCEDURE cmfe_EquationsSet_DerivedCreateFinishObj - END INTERFACE cmfe_EquationsSet_DerivedCreateFinish - - !>Start the creation of derived variables for an equations set. These are used to store any intermediate - !>calculated values, for example stress and strain fields in an elasticity problem. \see OpenCMISS::Iron::cmfe_EquationsSet_DerivedCreateFinish - INTERFACE cmfe_EquationsSet_DerivedCreateStart - MODULE PROCEDURE cmfe_EquationsSet_DerivedCreateStartNumber - MODULE PROCEDURE cmfe_EquationsSet_DerivedCreateStartObj - END INTERFACE cmfe_EquationsSet_DerivedCreateStart - - !>Destroy the derived variables for an equations set. - INTERFACE cmfe_EquationsSet_DerivedDestroy - MODULE PROCEDURE cmfe_EquationsSet_DerivedDestroyNumber - MODULE PROCEDURE cmfe_EquationsSet_DerivedDestroyObj - END INTERFACE cmfe_EquationsSet_DerivedDestroy - - !>Finish the creation of equations for an equations set. \see OpenCMISS::Iron::cmfe_EquationsSet_EquationsCreateStart - INTERFACE cmfe_EquationsSet_EquationsCreateFinish - MODULE PROCEDURE cmfe_EquationsSet_EquationsCreateFinishNumber - MODULE PROCEDURE cmfe_EquationsSet_EquationsCreateFinishObj - END INTERFACE cmfe_EquationsSet_EquationsCreateFinish - - !>Start the creation of equations for an equations set. \see OpenCMISS::Iron::cmfe_EquationsSet_EquationsCreateFinish - INTERFACE cmfe_EquationsSet_EquationsCreateStart - MODULE PROCEDURE cmfe_EquationsSet_EquationsCreateStartNumber - MODULE PROCEDURE cmfe_EquationsSet_EquationsCreateStartObj - END INTERFACE cmfe_EquationsSet_EquationsCreateStart - - !>Destroy the equations for an equations set. - INTERFACE cmfe_EquationsSet_EquationsDestroy - MODULE PROCEDURE cmfe_EquationsSet_EquationsDestroyNumber - MODULE PROCEDURE cmfe_EquationsSet_EquationsDestroyObj - END INTERFACE cmfe_EquationsSet_EquationsDestroy - - !>Finish the creation of independent fields for an equations set. \see OpenCMISS::Iron::cmfe_EquationsSet_IndependentCreateStart - INTERFACE cmfe_EquationsSet_IndependentCreateFinish - MODULE PROCEDURE cmfe_EquationsSet_IndependentCreateFinishNumber - MODULE PROCEDURE cmfe_EquationsSet_IndependentCreateFinishObj - END INTERFACE cmfe_EquationsSet_IndependentCreateFinish - - !>Start the creation of independent fields for an equations set. \see OpenCMISS::Iron::cmfe_EquationsSet_MaterialsCreateFinish - INTERFACE cmfe_EquationsSet_IndependentCreateStart - MODULE PROCEDURE cmfe_EquationsSet_IndependentCreateStartNumber - MODULE PROCEDURE cmfe_EquationsSet_IndependentCreateStartObj - END INTERFACE cmfe_EquationsSet_IndependentCreateStart - - !>Destroy the independent fields for an equations set. - INTERFACE cmfe_EquationsSet_IndependentDestroy - MODULE PROCEDURE cmfe_EquationsSet_IndependentDestroyNumber - MODULE PROCEDURE cmfe_EquationsSet_IndependentDestroyObj - END INTERFACE cmfe_EquationsSet_IndependentDestroy - - !>Returns the label for an equations set. - INTERFACE cmfe_EquationsSet_LabelGet - MODULE PROCEDURE cmfe_EquationsSet_LabelGetCNumber - MODULE PROCEDURE cmfe_EquationsSet_LabelGetCObj - MODULE PROCEDURE cmfe_EquationsSet_LabelGetVSNumber - MODULE PROCEDURE cmfe_EquationsSet_LabelGetVSObj - END INTERFACE cmfe_EquationsSet_LabelGet - - !>Sets/changes the label for an equations set. - INTERFACE cmfe_EquationsSet_LabelSet - MODULE PROCEDURE cmfe_EquationsSet_LabelSetCNumber - MODULE PROCEDURE cmfe_EquationsSet_LabelSetCObj - MODULE PROCEDURE cmfe_EquationsSet_LabelSetVSNumber - MODULE PROCEDURE cmfe_EquationsSet_LabelSetVSObj - END INTERFACE cmfe_EquationsSet_LabelSet - - !>Finish the creation of materials for an equations set. \see OpenCMISS::Iron::cmfe_EquationsSet_MaterialsCreateStart - INTERFACE cmfe_EquationsSet_MaterialsCreateFinish - MODULE PROCEDURE cmfe_EquationsSet_MaterialsCreateFinishNumber - MODULE PROCEDURE cmfe_EquationsSet_MaterialsCreateFinishObj - END INTERFACE cmfe_EquationsSet_MaterialsCreateFinish - - !>Start the creation of materials for an equations set. \see OpenCMISS::Iron::cmfe_EquationsSet_MaterialsCreateFinish - INTERFACE cmfe_EquationsSet_MaterialsCreateStart - MODULE PROCEDURE cmfe_EquationsSet_MaterialsCreateStartNumber - MODULE PROCEDURE cmfe_EquationsSet_MaterialsCreateStartObj - END INTERFACE cmfe_EquationsSet_MaterialsCreateStart - - !>Destroy the materials for an equations set. - INTERFACE cmfe_EquationsSet_MaterialsDestroy - MODULE PROCEDURE cmfe_EquationsSet_MaterialsDestroyNumber - MODULE PROCEDURE cmfe_EquationsSet_MaterialsDestroyObj - END INTERFACE cmfe_EquationsSet_MaterialsDestroy - - !>Gets the output type for an equations set. - INTERFACE cmfe_EquationsSet_OutputTypeGet - MODULE PROCEDURE cmfe_EquationsSet_OutputTypeGetNumber - MODULE PROCEDURE cmfe_EquationsSet_OutputTypeGetObj - END INTERFACE cmfe_EquationsSet_OutputTypeGet - - !>Sets/changes the output type an equations set. - INTERFACE cmfe_EquationsSet_OutputTypeSet - MODULE PROCEDURE cmfe_EquationsSet_OutputTypeSetNumber - MODULE PROCEDURE cmfe_EquationsSet_OutputTypeSetObj - END INTERFACE cmfe_EquationsSet_OutputTypeSet - - !>Returns the solution method for an equations set. - INTERFACE cmfe_EquationsSet_SolutionMethodGet - MODULE PROCEDURE cmfe_EquationsSet_SolutionMethodGetNumber - MODULE PROCEDURE cmfe_EquationsSet_SolutionMethodGetObj - END INTERFACE cmfe_EquationsSet_SolutionMethodGet - - !>Sets/changes the solution method for an equations set. - INTERFACE cmfe_EquationsSet_SolutionMethodSet - MODULE PROCEDURE cmfe_EquationsSet_SolutionMethodSetNumber - MODULE PROCEDURE cmfe_EquationsSet_SolutionMethodSetObj - END INTERFACE cmfe_EquationsSet_SolutionMethodSet - - !>Finish the creation of a source for an equations set. \see OpenCMISS::Iron::cmfe_EquationsSet_SourceCreateStart - INTERFACE cmfe_EquationsSet_SourceCreateFinish - MODULE PROCEDURE cmfe_EquationsSet_SourceCreateFinishNumber - MODULE PROCEDURE cmfe_EquationsSet_SourceCreateFinishObj - END INTERFACE cmfe_EquationsSet_SourceCreateFinish - - !>Start the creation of a source for an equations set. \see OpenCMISS::Iron::cmfe_EquationsSet_SourceCreateFinish - INTERFACE cmfe_EquationsSet_SourceCreateStart - MODULE PROCEDURE cmfe_EquationsSet_SourceCreateStartNumber - MODULE PROCEDURE cmfe_EquationsSet_SourceCreateStartObj - END INTERFACE cmfe_EquationsSet_SourceCreateStart - - !>Destroy the source for an equations set. - INTERFACE cmfe_EquationsSet_SourceDestroy - MODULE PROCEDURE cmfe_EquationsSet_SourceDestroyNumber - MODULE PROCEDURE cmfe_EquationsSet_SourceDestroyObj - END INTERFACE cmfe_EquationsSet_SourceDestroy - - !>Returns the equations set specification array - INTERFACE cmfe_EquationsSet_SpecificationGet - MODULE PROCEDURE cmfe_EquationsSet_SpecificationGetNumber - MODULE PROCEDURE cmfe_EquationsSet_SpecificationGetObj - END INTERFACE cmfe_EquationsSet_SpecificationGet - - !>Returns the size of the equations set specification array. - INTERFACE cmfe_EquationsSet_SpecificationSizeGet - MODULE PROCEDURE cmfe_EquationsSet_SpecificationSizeGetNumber - MODULE PROCEDURE cmfe_EquationsSet_SpecificationSizeGetObj - END INTERFACE cmfe_EquationsSet_SpecificationSizeGet - - !>Calculates an output field for the equations set. - INTERFACE cmfe_EquationsSet_DerivedVariableCalculate - MODULE PROCEDURE cmfe_EquationsSet_DerivedVariableCalculateNumber - MODULE PROCEDURE cmfe_EquationsSet_DerivedVariableCalculateObj - END INTERFACE cmfe_EquationsSet_DerivedVariableCalculate - - !>Set the derived field variable type to be used by a derived variable - INTERFACE cmfe_EquationsSet_DerivedVariableSet - MODULE PROCEDURE cmfe_EquationsSet_DerivedVariableSetNumber - MODULE PROCEDURE cmfe_EquationsSet_DerivedVariableSetObj - END INTERFACE cmfe_EquationsSet_DerivedVariableSet - - !>Evaluate a tensor at a given element Gauss location. - INTERFACE cmfe_EquationsSet_TensorInterpolateGaussPoint - MODULE PROCEDURE cmfe_EquationsSet_TensorInterpolateGaussPointNumber - MODULE PROCEDURE cmfe_EquationsSet_TensorInterpolateGaussPointObj - END INTERFACE cmfe_EquationsSet_TensorInterpolateGaussPoint - - !>Evaluate a tensor at a given element xi location. - INTERFACE cmfe_EquationsSet_TensorInterpolateXi - MODULE PROCEDURE cmfe_EquationsSet_TensorInterpolateXiNumber - MODULE PROCEDURE cmfe_EquationsSet_TensorInterpolateXiObj - END INTERFACE cmfe_EquationsSet_TensorInterpolateXi - - !>Returns the equations set current times - INTERFACE cmfe_EquationsSet_TimesGet - MODULE PROCEDURE cmfe_EquationsSet_TimesGetNumber - MODULE PROCEDURE cmfe_EquationsSet_TimesGetObj - END INTERFACE cmfe_EquationsSet_TimesGet - - !>Sets/changes the equations set current times - INTERFACE cmfe_EquationsSet_TimesSet - MODULE PROCEDURE cmfe_EquationsSet_TimesSetNumber - MODULE PROCEDURE cmfe_EquationsSet_TimesSetObj - END INTERFACE cmfe_EquationsSet_TimesSet - - !>Gets the equations set analytic user parameter - INTERFACE cmfe_EquationsSet_AnalyticUserParamGet - MODULE PROCEDURE cmfe_EquationsSet_AnalyticUserParamGetNumber - MODULE PROCEDURE cmfe_EquationsSet_AnalyticUserParamGetObj - END INTERFACE cmfe_EquationsSet_AnalyticUserParamGet + !>Evaluate a tensor at a given element Gauss location. + INTERFACE cmfe_EquationsSet_TensorInterpolateGaussPoint + MODULE PROCEDURE cmfe_EquationsSet_TensorInterpolateGaussPointNumber + MODULE PROCEDURE cmfe_EquationsSet_TensorInterpolateGaussPointObj + END INTERFACE cmfe_EquationsSet_TensorInterpolateGaussPoint - !>Sets/changes the equations set analytic user parameter - INTERFACE cmfe_EquationsSet_AnalyticUserParamSet - MODULE PROCEDURE cmfe_EquationsSet_AnalyticUserParamSetNumber - MODULE PROCEDURE cmfe_EquationsSet_AnalyticUserParamSetObj - END INTERFACE cmfe_EquationsSet_AnalyticUserParamSet + !>Evaluate a tensor at a given element xi location. + INTERFACE cmfe_EquationsSet_TensorInterpolateXi + MODULE PROCEDURE cmfe_EquationsSet_TensorInterpolateXiNumber + MODULE PROCEDURE cmfe_EquationsSet_TensorInterpolateXiObj + END INTERFACE cmfe_EquationsSet_TensorInterpolateXi - PUBLIC cmfe_EquationsSet_AnalyticCreateFinish,cmfe_EquationsSet_AnalyticCreateStart + !>Returns the equations set current times + INTERFACE cmfe_EquationsSet_TimesGet + MODULE PROCEDURE cmfe_EquationsSet_TimesGetNumber + MODULE PROCEDURE cmfe_EquationsSet_TimesGetObj + END INTERFACE cmfe_EquationsSet_TimesGet - PUBLIC cmfe_EquationsSet_AnalyticDestroy + !>Sets/changes the equations set current times + INTERFACE cmfe_EquationsSet_TimesSet + MODULE PROCEDURE cmfe_EquationsSet_TimesSetNumber + MODULE PROCEDURE cmfe_EquationsSet_TimesSetObj + END INTERFACE cmfe_EquationsSet_TimesSet - PUBLIC cmfe_EquationsSet_AnalyticEvaluate + !>Gets the equations set analytic user parameter + INTERFACE cmfe_EquationsSet_AnalyticUserParamGet + MODULE PROCEDURE cmfe_EquationsSet_AnalyticUserParamGetNumber + MODULE PROCEDURE cmfe_EquationsSet_AnalyticUserParamGetObj + END INTERFACE cmfe_EquationsSet_AnalyticUserParamGet - PUBLIC cmfe_EquationsSet_AnalyticTimeGet,cmfe_EquationsSet_AnalyticTimeSet + !>Sets/changes the equations set analytic user parameter + INTERFACE cmfe_EquationsSet_AnalyticUserParamSet + MODULE PROCEDURE cmfe_EquationsSet_AnalyticUserParamSetNumber + MODULE PROCEDURE cmfe_EquationsSet_AnalyticUserParamSetObj + END INTERFACE cmfe_EquationsSet_AnalyticUserParamSet - PUBLIC cmfe_EquationsSet_CreateFinish,cmfe_EquationsSet_CreateStart + PUBLIC cmfe_EquationsSet_AnalyticCreateFinish,cmfe_EquationsSet_AnalyticCreateStart - PUBLIC cmfe_EquationsSet_Destroy + PUBLIC cmfe_EquationsSet_AnalyticDestroy - PUBLIC cmfe_EquationsSet_DependentCreateFinish,cmfe_EquationsSet_DependentCreateStart + PUBLIC cmfe_EquationsSet_AnalyticEvaluate - PUBLIC cmfe_EquationsSet_DependentDestroy + PUBLIC cmfe_EquationsSet_AnalyticTimeGet,cmfe_EquationsSet_AnalyticTimeSet - PUBLIC cmfe_EquationsSet_DerivedCreateFinish,cmfe_EquationsSet_DerivedCreateStart + PUBLIC cmfe_EquationsSet_CreateFinish,cmfe_EquationsSet_CreateStart - PUBLIC cmfe_EquationsSet_DerivedDestroy + PUBLIC cmfe_EquationsSet_Destroy - PUBLIC cmfe_EquationsSet_DerivedVariableCalculate,cmfe_EquationsSet_DerivedVariableSet + PUBLIC cmfe_EquationsSet_DependentCreateFinish,cmfe_EquationsSet_DependentCreateStart - PUBLIC cmfe_EquationsSet_EquationsCreateFinish,cmfe_EquationsSet_EquationsCreateStart + PUBLIC cmfe_EquationsSet_DependentDestroy - PUBLIC cmfe_EquationsSet_EquationsDestroy + PUBLIC cmfe_EquationsSet_DerivedCreateFinish,cmfe_EquationsSet_DerivedCreateStart - PUBLIC cmfe_EquationsSet_IndependentCreateFinish,cmfe_EquationsSet_IndependentCreateStart - - PUBLIC cmfe_EquationsSet_IndependentDestroy - - PUBLIC cmfe_EquationsSet_LabelGet,cmfe_EquationsSet_LabelSet - - PUBLIC cmfe_EquationsSet_MaterialsCreateFinish,cmfe_EquationsSet_MaterialsCreateStart - - PUBLIC cmfe_EquationsSet_MaterialsDestroy - - PUBLIC cmfe_Equationsset_OutputTypeGet,cmfe_EquationsSet_OutputTypeSet - - PUBLIC cmfe_EquationsSet_SolutionMethodGet,cmfe_EquationsSet_SolutionMethodSet - - PUBLIC cmfe_EquationsSet_SourceCreateFinish,cmfe_EquationsSet_SourceCreateStart - - PUBLIC cmfe_EquationsSet_SourceDestroy - - PUBLIC cmfe_EquationsSet_SpecificationGet,cmfe_EquationsSet_SpecificationSizeGet - - PUBLIC cmfe_EquationsSet_TensorInterpolateGaussPoint - - PUBLIC cmfe_EquationsSet_TensorInterpolateXi - - PUBLIC cmfe_EquationsSet_TimesGet,cmfe_EquationsSet_TimesSet - - PUBLIC cmfe_EquationsSet_AnalyticUserParamSet,cmfe_EquationsSet_AnalyticUserParamGet - -!!================================================================================================================================== -!! -!! FIELD_ROUTINES -!! -!!================================================================================================================================== + PUBLIC cmfe_EquationsSet_DerivedDestroy - !Module parameters + PUBLIC cmfe_EquationsSet_DerivedVariableCalculate,cmfe_EquationsSet_DerivedVariableSet - !> \addtogroup OpenCMISS_FieldConstants OpenCMISS::Iron::Field::Constants - !> \brief Field constants. - !>@{ - !> \addtogroup OpenCMISS_FieldDependentTypes OpenCMISS::Iron::Field::DependentTypes - !> \brief Depedent field parameter types. - !> \see OpenCMISS::Iron::Field,OpenCMISS - !>@{ - INTEGER(INTG), PARAMETER :: CMFE_FIELD_INDEPENDENT_TYPE = FIELD_INDEPENDENT_TYPE !@} - !> \addtogroup OpenCMISS_FieldDimensionTypes OpenCMISS::Iron::Field::DimensionTypes - !> \brief Field dimension parameter types. - !> \see OpenCMISS::Iron::Field,OpenCMISS - !>@{ - INTEGER(INTG), PARAMETER :: CMFE_FIELD_SCALAR_DIMENSION_TYPE = FIELD_SCALAR_DIMENSION_TYPE !@} - !> \addtogroup OpenCMISS_FieldTypes OpenCMISS::Iron::Field::Types - !> \brief Field type parameters. - !> \see OpenCMISS::Iron::Field,OpenCMISS - !>@{ - INTEGER(INTG), PARAMETER :: CMFE_FIELD_GEOMETRIC_TYPE = FIELD_GEOMETRIC_TYPE !@} - !> \addtogroup OpenCMISS_FieldInterpolationTypes OpenCMISS::Iron::Field::InterpolationTypes - !> \brief Field interpolation parameters. - !> \see OpenCMISS::Iron::Field,OpenCMISS - !>@{ - INTEGER(INTG), PARAMETER :: CMFE_FIELD_CONSTANT_INTERPOLATION = FIELD_CONSTANT_INTERPOLATION !@} - !> \addtogroup OpenCMISS_FieldVariableTypes OpenCMISS::Iron::Field::VariableTypes - !> \brief Field variable type parameters. - !> \see OpenCMISS::Iron::Field,OpenCMISS - !>@{ - INTEGER(INTG), PARAMETER :: CMFE_FIELD_NUMBER_OF_VARIABLE_SUBTYPES = FIELD_NUMBER_OF_VARIABLE_SUBTYPES !@} - !> \addtogroup OpenCMISS_FieldDataTypes OpenCMISS::Iron::Field::DataTypes - !> \brief Field data types - !> \see OpenCMISS::Iron::Field,OpenCMISS - !>@{ - INTEGER(INTG), PARAMETER :: CMFE_FIELD_INTG_TYPE = FIELD_INTG_TYPE !@} - !> \addtogroup OpenCMISS_FieldDOFOrderTypes OpenCMISS::Iron::Field::DOFOrderTypes - !> \brief Field DOF order types - !> \see OpenCMISS::Iron::Field,OpenCMISS - !>@{ - INTEGER(INTG), PARAMETER :: CMFE_FIELD_SEPARATED_COMPONENT_DOF_ORDER = FIELD_SEPARATED_COMPONENT_DOF_ORDER !@} - !> \addtogroup OpenCMISS_FieldParameterSetTypes OpenCMISS::Iron::Field::ParameterSetTypes - !> \brief Field parameter set type parameters - !> \see OpenCMISS::Iron::Field,OpenCMISS - !>@{ - INTEGER(INTG), PARAMETER :: CMFE_FIELD_VALUES_SET_TYPE = FIELD_VALUES_SET_TYPE !@} - !> \addtogroup OpenCMISS_FieldScalingTypes OpenCMISS::Iron::Field::ScalingTypes - !> \brief Field scaling type parameters - !> \see OpenCMISS::Iron::Field,OpenCMISS - !>@{ - INTEGER(INTG), PARAMETER :: CMFE_FIELD_NO_SCALING = FIELD_NO_SCALING !@} - !>@} - - !Module types - - !Module variables - - !Interfaces - - !>Returns the interpolation type for a field variable component. - INTERFACE cmfe_Field_ComponentInterpolationGet - MODULE PROCEDURE cmfe_Field_ComponentInterpolationGetNumber - MODULE PROCEDURE cmfe_Field_ComponentInterpolationGetObj - END INTERFACE cmfe_Field_ComponentInterpolationGet - - !>Sets/changes the interpolation type for a field variable component. - INTERFACE cmfe_Field_ComponentInterpolationSet - MODULE PROCEDURE cmfe_Field_ComponentInterpolationSetNumber - MODULE PROCEDURE cmfe_Field_ComponentInterpolationSetObj - END INTERFACE cmfe_Field_ComponentInterpolationSet - - !>Returns the label for a field variable component. - INTERFACE cmfe_Field_ComponentLabelGet - MODULE PROCEDURE cmfe_Field_ComponentLabelGetCNumber - MODULE PROCEDURE cmfe_Field_ComponentLabelGetCObj - MODULE PROCEDURE cmfe_Field_ComponentLabelGetVSNumber - MODULE PROCEDURE cmfe_Field_ComponentLabelGetVSObj - END INTERFACE cmfe_Field_ComponentLabelGet - - !>Sets/changes the label for a field variable component. - INTERFACE cmfe_Field_ComponentLabelSet - MODULE PROCEDURE cmfe_Field_ComponentLabelSetCNumber - MODULE PROCEDURE cmfe_Field_ComponentLabelSetCObj - MODULE PROCEDURE cmfe_Field_ComponentLabelSetVSNumber - MODULE PROCEDURE cmfe_Field_ComponentLabelSetVSObj - END INTERFACE cmfe_Field_ComponentLabelSet - - !>Returns the mesh component number for a field variable component. - INTERFACE cmfe_Field_ComponentMeshComponentGet - MODULE PROCEDURE cmfe_Field_ComponentMeshComponentGetNumber - MODULE PROCEDURE cmfe_Field_ComponentMeshComponentGetObj - END INTERFACE cmfe_Field_ComponentMeshComponentGet - - !>Sets/changes the mesh component number for a field variable component. - INTERFACE cmfe_Field_ComponentMeshComponentSet - MODULE PROCEDURE cmfe_Field_ComponentMeshComponentSetNumber - MODULE PROCEDURE cmfe_Field_ComponentMeshComponentSetObj - END INTERFACE cmfe_Field_ComponentMeshComponentSet - - !>Initialises the values of a parameter set of a field variable component to a constant value. - INTERFACE cmfe_Field_ComponentValuesInitialise - MODULE PROCEDURE cmfe_Field_ComponentValuesInitialiseIntgNumber - MODULE PROCEDURE cmfe_Field_ComponentValuesInitialiseIntgObj - MODULE PROCEDURE cmfe_Field_ComponentValuesInitialiseSPNumber - MODULE PROCEDURE cmfe_Field_ComponentValuesInitialiseSPObj - MODULE PROCEDURE cmfe_Field_ComponentValuesInitialiseDPNumber - MODULE PROCEDURE cmfe_Field_ComponentValuesInitialiseDPObj - MODULE PROCEDURE cmfe_Field_ComponentValuesInitialiseLNumber - MODULE PROCEDURE cmfe_Field_ComponentValuesInitialiseLObj - END INTERFACE cmfe_Field_ComponentValuesInitialise - - !>Returns the data type for a field variable. - INTERFACE cmfe_Field_DataTypeGet - MODULE PROCEDURE cmfe_Field_DataTypeGetNumber - MODULE PROCEDURE cmfe_Field_DataTypeGetObj - END INTERFACE cmfe_Field_DataTypeGet - - !>Sets/changes the data type for a field variable. - INTERFACE cmfe_Field_DataTypeSet - MODULE PROCEDURE cmfe_Field_DataTypeSetNumber - MODULE PROCEDURE cmfe_Field_DataTypeSetObj - END INTERFACE cmfe_Field_DataTypeSet - - !>Returns the DOF order type for a field variable. - INTERFACE cmfe_Field_DOFOrderTypeGet - MODULE PROCEDURE cmfe_Field_DOFOrderTypeGetNumber - MODULE PROCEDURE cmfe_Field_DOFOrderTypeGetObj - END INTERFACE cmfe_Field_DOFOrderTypeGet - - !>Sets/changes the DOF order type for a field variable. Note: for contiguous coponent DOF ordering all the components of the field variable must have the same interpolation type. - INTERFACE cmfe_Field_DOFOrderTypeSet - MODULE PROCEDURE cmfe_Field_DOFOrderTypeSetNumber - MODULE PROCEDURE cmfe_Field_DOFOrderTypeSetObj - END INTERFACE cmfe_Field_DOFOrderTypeSet - - !>Finishes the creation of a field. \see OpenCMISS::Iron::cmfe_Field_CreateStart - INTERFACE cmfe_Field_CreateFinish - MODULE PROCEDURE cmfe_Field_CreateFinishNumber - MODULE PROCEDURE cmfe_Field_CreateFinishObj - END INTERFACE cmfe_Field_CreateFinish - - !>Starts the creation of a field. \see OpenCMISS::Iron::cmfe_Field_CreateFinish - INTERFACE cmfe_Field_CreateStart - MODULE PROCEDURE cmfe_Field_CreateStartNumber - MODULE PROCEDURE cmfe_Field_CreateStartInterfaceObj - MODULE PROCEDURE cmfe_Field_CreateStartRegionObj - END INTERFACE cmfe_Field_CreateStart - - !>Returns the dependent type for a field. - INTERFACE cmfe_Field_DependentTypeGet - MODULE PROCEDURE cmfe_Field_DependentTypeGetNumber - MODULE PROCEDURE cmfe_Field_DependentTypeGetObj - END INTERFACE cmfe_Field_DependentTypeGet - - !>Sets/changes the dependent type for a field. - INTERFACE cmfe_Field_DependentTypeSet - MODULE PROCEDURE cmfe_Field_DependentTypeSetNumber - MODULE PROCEDURE cmfe_Field_DependentTypeSetObj - END INTERFACE cmfe_Field_DependentTypeSet - - !>Destroys a field. - INTERFACE cmfe_Field_Destroy - MODULE PROCEDURE cmfe_Field_DestroyNumber - MODULE PROCEDURE cmfe_Field_DestroyObj - END INTERFACE cmfe_Field_Destroy - - !>Returns the field dimension for a field variable. - INTERFACE cmfe_Field_DimensionGet - MODULE PROCEDURE cmfe_Field_DimensionGetNumber - MODULE PROCEDURE cmfe_Field_DimensionGetObj - END INTERFACE cmfe_Field_DimensionGet - - !>Sets/changes the field dimension for a field variable. - INTERFACE cmfe_Field_DimensionSet - MODULE PROCEDURE cmfe_Field_DimensionSetNumber - MODULE PROCEDURE cmfe_Field_DimensionSetObj - END INTERFACE cmfe_Field_DimensionSet - - !>Returns the geometric field for a field. - INTERFACE cmfe_Field_GeometricFieldGet - MODULE PROCEDURE cmfe_Field_GeometricFieldGetNumber - MODULE PROCEDURE cmfe_Field_GeometricFieldGetObj - END INTERFACE cmfe_Field_GeometricFieldGet - - !>Sets/changes the geometric field for a field. - INTERFACE cmfe_Field_GeometricFieldSet - MODULE PROCEDURE cmfe_Field_GeometricFieldSetNumber - MODULE PROCEDURE cmfe_Field_GeometricFieldSetObj - END INTERFACE cmfe_Field_GeometricFieldSet - - !>Gets line lengths from a geometric field given an element number and element basis line number. - INTERFACE cmfe_Field_GeometricParametersElementLineLengthGet - MODULE PROCEDURE cmfe_Field_GeometricParametersElementLineLengthGetNumber - MODULE PROCEDURE cmfe_Field_GeometricParametersElementLineLengthGetObj - END INTERFACE cmfe_Field_GeometricParametersElementLineLengthGet - - !>Gets volumes from a geometric field given an element number. - INTERFACE cmfe_Field_GeometricParametersElementVolumeGet - MODULE PROCEDURE cmfe_Field_GeometricParametersElementVolumeGetNumber - MODULE PROCEDURE cmfe_Field_GeometricParametersElementVolumeGetObj - END INTERFACE cmfe_Field_GeometricParametersElementVolumeGet - - !>Returns the label for a field. - INTERFACE cmfe_Field_LabelGet - MODULE PROCEDURE cmfe_Field_LabelGetCNumber - MODULE PROCEDURE cmfe_Field_LabelGetCObj - MODULE PROCEDURE cmfe_Field_LabelGetVSNumber - MODULE PROCEDURE cmfe_Field_LabelGetVSObj - END INTERFACE cmfe_Field_LabelGet - - !>Sets/changes the label for a field. - INTERFACE cmfe_Field_LabelSet - MODULE PROCEDURE cmfe_Field_LabelSetCNumber - MODULE PROCEDURE cmfe_Field_LabelSetCObj - MODULE PROCEDURE cmfe_Field_LabelSetVSNumber - MODULE PROCEDURE cmfe_Field_LabelSetVSObj - END INTERFACE cmfe_Field_LabelSet - - INTERFACE cmfe_Field_PositionNormalTangentCalculateNode - MODULE PROCEDURE cmfe_Field_PositionNormalTangentCalculateNodeNumber - MODULE PROCEDURE cmfe_Field_PositionNormalTangentCalculateNodeObj - END INTERFACE + PUBLIC cmfe_EquationsSet_EquationsCreateFinish,cmfe_EquationsSet_EquationsCreateStart - !>Returns the mesh decomposition for a field. - INTERFACE cmfe_Field_MeshDecompositionGet - MODULE PROCEDURE cmfe_Field_MeshDecompositionGetNumber - MODULE PROCEDURE cmfe_Field_MeshDecompositionGetObj - END INTERFACE cmfe_Field_MeshDecompositionGet - - !>Sets/changes the mesh decomposition for a field. \todo remove when fields take decomposition argument on creation??? - INTERFACE cmfe_Field_MeshDecompositionSet - MODULE PROCEDURE cmfe_Field_MeshDecompositionSetNumber - MODULE PROCEDURE cmfe_Field_MeshDecompositionSetObj - END INTERFACE cmfe_Field_MeshDecompositionSet - - !>Sets/changes the data projection for a field. - INTERFACE cmfe_Field_DataProjectionSet - MODULE PROCEDURE cmfe_Field_DataProjectionSetNumber - MODULE PROCEDURE cmfe_Field_DataProjectionSetObj - END INTERFACE cmfe_Field_DataProjectionSet - - !>Returns the number of field components for a field variable. - INTERFACE cmfe_Field_NumberOfComponentsGet - MODULE PROCEDURE cmfe_Field_NumberOfComponentsGetNumber - MODULE PROCEDURE cmfe_Field_NumberOfComponentsGetObj - END INTERFACE cmfe_Field_NumberOfComponentsGet - - !>Sets/changes the number of field components for a field variable. - INTERFACE cmfe_Field_NumberOfComponentsSet - MODULE PROCEDURE cmfe_Field_NumberOfComponentsSetNumber - MODULE PROCEDURE cmfe_Field_NumberOfComponentsSetObj - END INTERFACE cmfe_Field_NumberOfComponentsSet - - !>Returns the number of field variables for a field. - INTERFACE cmfe_Field_NumberOfVariablesGet - MODULE PROCEDURE cmfe_Field_NumberOfVariablesGetNumber - MODULE PROCEDURE cmfe_Field_NumberOfVariablesGetObj - END INTERFACE cmfe_Field_NumberOfVariablesGet - - !>Sets/changes the number of field variables for a field. - INTERFACE cmfe_Field_NumberOfVariablesSet - MODULE PROCEDURE cmfe_Field_NumberOfVariablesSetNumber - MODULE PROCEDURE cmfe_Field_NumberOfVariablesSetObj - END INTERFACE cmfe_Field_NumberOfVariablesSet - - !>Adds the given value to the given parameter set for the constant of the field variable component. - INTERFACE cmfe_Field_ParameterSetAddConstant - MODULE PROCEDURE cmfe_Field_ParameterSetAddConstantIntgNumber - MODULE PROCEDURE cmfe_Field_ParameterSetAddConstantIntgObj - MODULE PROCEDURE cmfe_Field_ParameterSetAddConstantSPNumber - MODULE PROCEDURE cmfe_Field_ParameterSetAddConstantSPObj - MODULE PROCEDURE cmfe_Field_ParameterSetAddConstantDPNumber - MODULE PROCEDURE cmfe_Field_ParameterSetAddConstantDPObj - MODULE PROCEDURE cmfe_Field_ParameterSetAddConstantLNumber - MODULE PROCEDURE cmfe_Field_ParameterSetAddConstantLObj - END INTERFACE cmfe_Field_ParameterSetAddConstant - - !>Adds the given value to the given parameter set for a particular user element of the field variable component. - INTERFACE cmfe_Field_ParameterSetAddElement - MODULE PROCEDURE cmfe_Field_ParameterSetAddElementIntgNumber - MODULE PROCEDURE cmfe_Field_ParameterSetAddElementIntgObj - MODULE PROCEDURE cmfe_Field_ParameterSetAddElementSPNumber - MODULE PROCEDURE cmfe_Field_ParameterSetAddElementSPObj - MODULE PROCEDURE cmfe_Field_ParameterSetAddElementDPNumber - MODULE PROCEDURE cmfe_Field_ParameterSetAddElementDPObj - MODULE PROCEDURE cmfe_Field_ParameterSetAddElementLNumber - MODULE PROCEDURE cmfe_Field_ParameterSetAddElementLObj - END INTERFACE cmfe_Field_ParameterSetAddElement - - !>Adds the given value to the given parameter set for a particular Gauss point of a user element of the field variable component. - INTERFACE cmfe_Field_ParameterSetAddGaussPoint - MODULE PROCEDURE cmfe_Field_ParameterSetAddGaussPointIntgNumber - MODULE PROCEDURE cmfe_Field_ParameterSetAddGaussPointIntgObj - MODULE PROCEDURE cmfe_Field_ParameterSetAddGaussPointSPNumber - MODULE PROCEDURE cmfe_Field_ParameterSetAddGaussPointSPObj - MODULE PROCEDURE cmfe_Field_ParameterSetAddGaussPointDPNumber - MODULE PROCEDURE cmfe_Field_ParameterSetAddGaussPointDPObj - MODULE PROCEDURE cmfe_Field_ParameterSetAddGaussPointLNumber - MODULE PROCEDURE cmfe_Field_ParameterSetAddGaussPointLObj - END INTERFACE cmfe_Field_ParameterSetAddGaussPoint - - !>Adds the given value to the given parameter set for a particular user node of the field variable component. - INTERFACE cmfe_Field_ParameterSetAddNode - MODULE PROCEDURE cmfe_Field_ParameterSetAddNodeIntgNumber - MODULE PROCEDURE cmfe_Field_ParameterSetAddNodeIntgObj - MODULE PROCEDURE cmfe_Field_ParameterSetAddNodeSPNumber - MODULE PROCEDURE cmfe_Field_ParameterSetAddNodeSPObj - MODULE PROCEDURE cmfe_Field_ParameterSetAddNodeDPNumber - MODULE PROCEDURE cmfe_Field_ParameterSetAddNodeDPObj - MODULE PROCEDURE cmfe_Field_ParameterSetAddNodeLNumber - MODULE PROCEDURE cmfe_Field_ParameterSetAddNodeLObj - END INTERFACE cmfe_Field_ParameterSetAddNode - - !>Creates a new parameter set of type set type for a field variable. - INTERFACE cmfe_Field_ParameterSetCreate - MODULE PROCEDURE cmfe_Field_ParameterSetCreateNumber - MODULE PROCEDURE cmfe_Field_ParameterSetCreateObj - END INTERFACE cmfe_Field_ParameterSetCreate - - !>Destroy a parameter set of type set type for a field variable. - INTERFACE cmfe_Field_ParameterSetDestroy - MODULE PROCEDURE cmfe_Field_ParameterSetDestroyNumber - MODULE PROCEDURE cmfe_Field_ParameterSetDestroyObj - END INTERFACE cmfe_Field_ParameterSetDestroy - - !>Returns a pointer to the specified field parameter set local data array. The pointer must be restored with a call to OpenCMISS::Iron::cmfe_Field_ParameterSetDataRestore call. Note: the values can be used for read operations but a field parameter set update or add calls must be used to change any values. - INTERFACE cmfe_Field_ParameterSetDataGet - MODULE PROCEDURE cmfe_Field_ParameterSetDataGetIntgNumber - MODULE PROCEDURE cmfe_Field_ParameterSetDataGetIntgObj - MODULE PROCEDURE cmfe_Field_ParameterSetDataGetSPNumber - MODULE PROCEDURE cmfe_Field_ParameterSetDataGetSPObj - MODULE PROCEDURE cmfe_Field_ParameterSetDataGetDPNumber - MODULE PROCEDURE cmfe_Field_ParameterSetDataGetDPObj - MODULE PROCEDURE cmfe_Field_ParameterSetDataGetLNumber - MODULE PROCEDURE cmfe_Field_ParameterSetDataGetLObj - END INTERFACE cmfe_Field_ParameterSetDataGet - - !>Restores the specified field variable parameter set local array that was obtained with an OpenCMISS::Iron::cmfe_Field_ParameterSetDataGet call. - INTERFACE cmfe_Field_ParameterSetDataRestore - MODULE PROCEDURE cmfe_Field_ParameterSetDataRestoreIntgNumber - MODULE PROCEDURE cmfe_Field_ParameterSetDataRestoreIntgObj - MODULE PROCEDURE cmfe_Field_ParameterSetDataRestoreSPNumber - MODULE PROCEDURE cmfe_Field_ParameterSetDataRestoreSPObj - MODULE PROCEDURE cmfe_Field_ParameterSetDataRestoreDPNumber - MODULE PROCEDURE cmfe_Field_ParameterSetDataRestoreDPObj - MODULE PROCEDURE cmfe_Field_ParameterSetDataRestoreLNumber - MODULE PROCEDURE cmfe_Field_ParameterSetDataRestoreLObj - END INTERFACE cmfe_Field_ParameterSetDataRestore - - !>Returns from the given parameter set a value for the specified constant of a field variable component. - INTERFACE cmfe_Field_ParameterSetGetConstant - MODULE PROCEDURE cmfe_Field_ParameterSetGetConstantIntgNumber - MODULE PROCEDURE cmfe_Field_ParameterSetGetConstantIntgObj - MODULE PROCEDURE cmfe_Field_ParameterSetGetConstantSPNumber - MODULE PROCEDURE cmfe_Field_ParameterSetGetConstantSPObj - MODULE PROCEDURE cmfe_Field_ParameterSetGetConstantDPNumber - MODULE PROCEDURE cmfe_Field_ParameterSetGetConstantDPObj - MODULE PROCEDURE cmfe_Field_ParameterSetGetConstantLNumber - MODULE PROCEDURE cmfe_Field_ParameterSetGetConstantLObj - END INTERFACE cmfe_Field_ParameterSetGetConstant - - !>Returns from the given parameter set a value for the specified data pont of a field variable component. - INTERFACE cmfe_Field_ParameterSetGetDataPoint - MODULE PROCEDURE cmfe_Field_ParameterSetGetDataPointIntgNumberI !Interface - MODULE PROCEDURE cmfe_Field_ParameterSetGetDataPointIntgNumberR !Region - MODULE PROCEDURE cmfe_Field_ParameterSetGetDataPointIntgObj - MODULE PROCEDURE cmfe_Field_ParameterSetGetDataPointSPNumberI !Interface - MODULE PROCEDURE cmfe_Field_ParameterSetGetDataPointSPNumberR !Region - MODULE PROCEDURE cmfe_Field_ParameterSetGetDataPointSPObj - MODULE PROCEDURE cmfe_Field_ParameterSetGetDataPointDPNumberI !Interface - MODULE PROCEDURE cmfe_Field_ParameterSetGetDataPointDPNumberR !Region - MODULE PROCEDURE cmfe_Field_ParameterSetGetDataPointDPObj - MODULE PROCEDURE cmfe_Field_ParameterSetGetDataPointLNumberI !Interface - MODULE PROCEDURE cmfe_Field_ParameterSetGetDataPointLNumberR !Region - MODULE PROCEDURE cmfe_Field_ParameterSetGetDataPointLObj - END INTERFACE cmfe_Field_ParameterSetGetDataPoint - - !>Returns from the given parameter set a value for the specified element of a field variable component. - INTERFACE cmfe_Field_ParameterSetGetElement - MODULE PROCEDURE cmfe_Field_ParameterSetGetElementIntgNumber - MODULE PROCEDURE cmfe_Field_ParameterSetGetElementIntgObj - MODULE PROCEDURE cmfe_Field_ParameterSetGetElementSPNumber - MODULE PROCEDURE cmfe_Field_ParameterSetGetElementSPObj - MODULE PROCEDURE cmfe_Field_ParameterSetGetElementDPNumber - MODULE PROCEDURE cmfe_Field_ParameterSetGetElementDPObj - MODULE PROCEDURE cmfe_Field_ParameterSetGetElementLNumber - MODULE PROCEDURE cmfe_Field_ParameterSetGetElementLObj - END INTERFACE cmfe_Field_ParameterSetGetElement - - !>Returns from the given parameter set a value for the specified node and derivative of a field variable component. - INTERFACE cmfe_Field_ParameterSetGetNode - MODULE PROCEDURE cmfe_Field_ParameterSetGetNodeIntgNumber - MODULE PROCEDURE cmfe_Field_ParameterSetGetNodeIntgObj - MODULE PROCEDURE cmfe_Field_ParameterSetGetNodeSPNumber - MODULE PROCEDURE cmfe_Field_ParameterSetGetNodeSPObj - MODULE PROCEDURE cmfe_Field_ParameterSetGetNodeDPNumber - MODULE PROCEDURE cmfe_Field_ParameterSetGetNodeDPObj - MODULE PROCEDURE cmfe_Field_ParameterSetGetNodeLNumber - MODULE PROCEDURE cmfe_Field_ParameterSetGetNodeLObj - END INTERFACE cmfe_Field_ParameterSetGetNode - - !>Returns from the given parameter set a value for the specified element and Gauss point of a field variable component. - INTERFACE cmfe_Field_ParameterSetGetGaussPoint ! TODO: other versions - MODULE PROCEDURE cmfe_Field_ParameterSetGetGaussPointDPObj - END INTERFACE cmfe_Field_ParameterSetGetGaussPoint - - !>Updates the given parameter set with the given value for the constant of a field variable component. - INTERFACE cmfe_Field_ParameterSetUpdateConstant - MODULE PROCEDURE cmfe_Field_ParameterSetUpdateConstantIntgNumber - MODULE PROCEDURE cmfe_Field_ParameterSetUpdateConstantIntgObj - MODULE PROCEDURE cmfe_Field_ParameterSetUpdateConstantSPNumber - MODULE PROCEDURE cmfe_Field_ParameterSetUpdateConstantSPObj - MODULE PROCEDURE cmfe_Field_ParameterSetUpdateConstantDPNumber - MODULE PROCEDURE cmfe_Field_ParameterSetUpdateConstantDPObj - MODULE PROCEDURE cmfe_Field_ParameterSetUpdateConstantLNumber - MODULE PROCEDURE cmfe_Field_ParameterSetUpdateConstantLObj - END INTERFACE cmfe_Field_ParameterSetUpdateConstant - - !>Update the given parameter set a value for the specified data pont of a field variable component. - INTERFACE cmfe_Field_ParameterSetUpdateDataPoint - MODULE PROCEDURE cmfe_Field_ParameterSetUpdateDataPointIntgNumberI !Interface - MODULE PROCEDURE cmfe_Field_ParameterSetUpdateDataPointIntgNumberR !Region - MODULE PROCEDURE cmfe_Field_ParameterSetUpdateDataPointIntgObj - MODULE PROCEDURE cmfe_Field_ParameterSetUpdateDataPointSPNumberI !Interface - MODULE PROCEDURE cmfe_Field_ParameterSetUpdateDataPointSPNumberR !Region - MODULE PROCEDURE cmfe_Field_ParameterSetUpdateDataPointSPObj - MODULE PROCEDURE cmfe_Field_ParameterSetUpdateDataPointDPNumberI !Interface - MODULE PROCEDURE cmfe_Field_ParameterSetUpdateDataPointDPNumberR !Region - MODULE PROCEDURE cmfe_Field_ParameterSetUpdateDataPointDPObj - MODULE PROCEDURE cmfe_Field_ParameterSetUpdateDataPointLNumberI !Interface - MODULE PROCEDURE cmfe_Field_ParameterSetUpdateDataPointLNumberR !Region - MODULE PROCEDURE cmfe_Field_ParameterSetUpdateDataPointLObj - END INTERFACE cmfe_Field_ParameterSetUpdateDataPoint - - !>Updates the given parameter set with the given value for a particular user element of a field variable component. - INTERFACE cmfe_Field_ParameterSetUpdateElement - MODULE PROCEDURE cmfe_Field_ParameterSetUpdateElementIntgNumber - MODULE PROCEDURE cmfe_Field_ParameterSetUpdateElementIntgObj - MODULE PROCEDURE cmfe_Field_ParameterSetUpdateElementSPNumber - MODULE PROCEDURE cmfe_Field_ParameterSetUpdateElementSPObj - MODULE PROCEDURE cmfe_Field_ParameterSetUpdateElementDPNumber - MODULE PROCEDURE cmfe_Field_ParameterSetUpdateElementDPObj - MODULE PROCEDURE cmfe_Field_ParameterSetUpdateElementLNumber - MODULE PROCEDURE cmfe_Field_ParameterSetUpdateElementLObj - END INTERFACE cmfe_Field_ParameterSetUpdateElement - - !>Finishes the parameter set update for a field variable. \see OpenCMISS::Iron::cmfe_Field_ParameterSetUpdateStart - INTERFACE cmfe_Field_ParameterSetUpdateFinish - MODULE PROCEDURE cmfe_Field_ParameterSetUpdateFinishNumber - MODULE PROCEDURE cmfe_Field_ParameterSetUpdateFinishObj - END INTERFACE cmfe_Field_ParameterSetUpdateFinish - - !>Updates the given parameter set with the given value for a particular user node of a field variable component. - INTERFACE cmfe_Field_ParameterSetUpdateNode - MODULE PROCEDURE cmfe_Field_ParameterSetUpdateNodeIntgNumber - MODULE PROCEDURE cmfe_Field_ParameterSetUpdateNodeIntgObj - MODULE PROCEDURE cmfe_Field_ParameterSetUpdateNodeSPNumber - MODULE PROCEDURE cmfe_Field_ParameterSetUpdateNodeSPObj - MODULE PROCEDURE cmfe_Field_ParameterSetUpdateNodeDPNumber - MODULE PROCEDURE cmfe_Field_ParameterSetUpdateNodeDPObj - MODULE PROCEDURE cmfe_Field_ParameterSetUpdateNodeLNumber - MODULE PROCEDURE cmfe_Field_ParameterSetUpdateNodeLObj - END INTERFACE cmfe_Field_ParameterSetUpdateNode - - !\todo: merge the two types of routines for getting scalefactors under the same interface declaration? - !>Gets a scale factor for a particular node. - INTERFACE cmfe_Field_ParameterSetNodeScaleFactorGet - MODULE PROCEDURE cmfe_Field_ParameterSetNodeScaleFactorGetNumber - MODULE PROCEDURE cmfe_Field_ParameterSetNodeScaleFactorGetObj - END INTERFACE cmfe_Field_ParameterSetNodeScaleFactorGet - - !>Gets the scale factors for all nodes - INTERFACE cmfe_Field_ParameterSetNodeScaleFactorsGet - MODULE PROCEDURE cmfe_Field_ParameterSetNodeScaleFactorsGetNumber - MODULE PROCEDURE cmfe_Field_ParameterSetNodeScaleFactorsGetObj - END INTERFACE cmfe_Field_ParameterSetNodeScaleFactorsGet - - !>Sets a scale factor for a particular node. - INTERFACE cmfe_Field_ParameterSetNodeScaleFactorSet - MODULE PROCEDURE cmfe_Field_ParameterSetNodeScaleFactorSetNumber - MODULE PROCEDURE cmfe_Field_ParameterSetNodeScaleFactorSetObj - END INTERFACE cmfe_Field_ParameterSetNodeScaleFactorSet - - !>Sets the scale factors for all nodes - INTERFACE cmfe_Field_ParameterSetNodeScaleFactorsSet - MODULE PROCEDURE cmfe_Field_ParameterSetNodeScaleFactorsSetNumber - MODULE PROCEDURE cmfe_Field_ParameterSetNodeScaleFactorsSetObj - END INTERFACE cmfe_Field_ParameterSetNodeScaleFactorsSet - - !>Gets the number of scalefactor dofs - INTERFACE cmfe_Field_ParameterSetNodeNumberOfScaleFactorDofsGet - MODULE PROCEDURE cmfe_Field_ParameterSetNodeNumberOfScaleFactorDofsGetNumber - MODULE PROCEDURE cmfe_Field_ParameterSetNodeNumberOfScaleFactorDofsGetObj - END INTERFACE cmfe_Field_ParameterSetNodeNumberOfScaleFactorDofsGet - - !>Updates the given parameter set with the given values for all local dofs of the field variable. - INTERFACE cmfe_Field_ParameterSetUpdateLocalDofs - MODULE PROCEDURE cmfe_Field_ParameterSetUpdateLocalDofsDPObj - !\todo: add Intg/SP/L routines, both indexed by Number and Obj - END INTERFACE cmfe_Field_ParameterSetUpdateLocalDofs - - !>Updates the given parameter set with the given value for a particular Gauss point of a field variable component. - INTERFACE cmfe_Field_ParameterSetUpdateGaussPoint - MODULE PROCEDURE cmfe_Field_ParameterSetUpdateGaussPointIntgNumber - MODULE PROCEDURE cmfe_Field_ParameterSetUpdateGaussPointIntgObj - MODULE PROCEDURE cmfe_Field_ParameterSetUpdateGaussPointSPNumber - MODULE PROCEDURE cmfe_Field_ParameterSetUpdateGaussPointSPObj - MODULE PROCEDURE cmfe_Field_ParameterSetUpdateGaussPointDPNumber - MODULE PROCEDURE cmfe_Field_ParameterSetUpdateGaussPointDPObj - MODULE PROCEDURE cmfe_Field_ParameterSetUpdateGaussPointLNumber - MODULE PROCEDURE cmfe_Field_ParameterSetUpdateGaussPointLObj - END INTERFACE cmfe_Field_ParameterSetUpdateGaussPoint - - !>Interpolates the given parameter set at a specified xi/set of xi locations for specified element and derviative. - INTERFACE cmfe_Field_ParameterSetInterpolateXi - MODULE PROCEDURE cmfe_Field_ParameterSetInterpolateSingleXiDPNumber - MODULE PROCEDURE cmfe_Field_ParameterSetInterpolateSingleXiDPObj - MODULE PROCEDURE cmfe_Field_ParameterSetInterpolateMultipleXiDPNumber - MODULE PROCEDURE cmfe_Field_ParameterSetInterpolateMultipleXiDPObj - END INTERFACE cmfe_Field_ParameterSetInterpolateXi - - !>Interpolates the given parameter set at a specified set of Gauss points for specified element and derviative. When interpolating at multiple Gauss points, if no Gauss points are specified then all Gauss points are interpolated. - INTERFACE cmfe_Field_ParameterSetInterpolateGauss - MODULE PROCEDURE cmfe_Field_ParameterSetInterpolateSingleGaussDPNumber - MODULE PROCEDURE cmfe_Field_ParameterSetInterpolateSingleGaussDPObj - MODULE PROCEDURE cmfe_Field_ParameterSetInterpolateMultipleGaussDPNumber - MODULE PROCEDURE cmfe_Field_ParameterSetInterpolateMultipleGaussDPObj - END INTERFACE cmfe_Field_ParameterSetInterpolateGauss - - !>Updates the given parameter set with the given value for a particular data point of a field variable component. - INTERFACE cmfe_Field_ParameterSetUpdateElementDataPoint - MODULE PROCEDURE cmfe_Field_ParameterSetUpdateElementDataPointDPObj - END INTERFACE cmfe_Field_ParameterSetUpdateElementDataPoint - - !>Starts the parameter set update for a field variable. \see OpenCMISS::Iron::cmfe_Field_ParameterSetUpdateFinish - INTERFACE cmfe_Field_ParameterSetUpdateStart - MODULE PROCEDURE cmfe_Field_ParameterSetUpdateStartNumber - MODULE PROCEDURE cmfe_Field_ParameterSetUpdateStartObj - END INTERFACE cmfe_Field_ParameterSetUpdateStart + PUBLIC cmfe_EquationsSet_EquationsDestroy - !>Copy the parameters from the parameter set of a component of a field variable to the paramters of a parameter set of - !>a component of another field variable. - INTERFACE cmfe_Field_ParametersToFieldParametersComponentCopy - MODULE PROCEDURE cmfe_Field_ParametersToFieldParametersComponentCopyNumber - MODULE PROCEDURE cmfe_Field_ParametersToFieldParametersComponentCopyObj - END INTERFACE cmfe_Field_ParametersToFieldParametersComponentCopy - - !>Returns the scaling type for a field. - INTERFACE cmfe_Field_ScalingTypeGet - MODULE PROCEDURE cmfe_Field_ScalingTypeGetNumber - MODULE PROCEDURE cmfe_Field_ScalingTypeGetObj - END INTERFACE cmfe_Field_ScalingTypeGet - - !>Sets/changes the scaling type for a field. - INTERFACE cmfe_Field_ScalingTypeSet - MODULE PROCEDURE cmfe_Field_ScalingTypeSetNumber - MODULE PROCEDURE cmfe_Field_ScalingTypeSetObj - END INTERFACE cmfe_Field_ScalingTypeSet - - !>Returns the type for a field. - INTERFACE cmfe_Field_TypeGet - MODULE PROCEDURE cmfe_Field_TypeGetNumber - MODULE PROCEDURE cmfe_Field_TypeGetObj - END INTERFACE cmfe_Field_TypeGet - - !>Sets/changes the type for a field. - INTERFACE cmfe_Field_TypeSet - MODULE PROCEDURE cmfe_Field_TypeSetNumber - MODULE PROCEDURE cmfe_Field_TypeSetObj - END INTERFACE cmfe_Field_TypeSet - - !>Returns the label for a field variable. - INTERFACE cmfe_Field_VariableLabelGet - MODULE PROCEDURE cmfe_Field_VariableLabelGetCNumber - MODULE PROCEDURE cmfe_Field_VariableLabelGetCObj - MODULE PROCEDURE cmfe_Field_VariableLabelGetVSNumber - MODULE PROCEDURE cmfe_Field_VariableLabelGetVSObj - END INTERFACE cmfe_Field_VariableLabelGet - - !>Sets/changes the label for a field variable. - INTERFACE cmfe_Field_VariableLabelSet - MODULE PROCEDURE cmfe_Field_VariableLabelSetCNumber - MODULE PROCEDURE cmfe_Field_VariableLabelSetCObj - MODULE PROCEDURE cmfe_Field_VariableLabelSetVSNumber - MODULE PROCEDURE cmfe_Field_VariableLabelSetVSObj - END INTERFACE cmfe_Field_VariableLabelSet - - !>Returns the field variable types for a field. - INTERFACE cmfe_Field_VariableTypesGet - MODULE PROCEDURE cmfe_Field_VariableTypesGetNumber - MODULE PROCEDURE cmfe_Field_VariableTypesGetObj - END INTERFACE cmfe_Field_VariableTypesGet - - !>Sets/changes the field variable types for a field. - INTERFACE cmfe_Field_VariableTypesSet - MODULE PROCEDURE cmfe_Field_VariableTypesSetNumber - MODULE PROCEDURE cmfe_Field_VariableTypesSetObj - END INTERFACE cmfe_Field_VariableTypesSet + PUBLIC cmfe_EquationsSet_IndependentCreateFinish,cmfe_EquationsSet_IndependentCreateStart + PUBLIC cmfe_EquationsSet_IndependentDestroy - PUBLIC CMFE_FIELD_DEPENDENT_TYPE,CMFE_FIELD_INDEPENDENT_TYPE + PUBLIC cmfe_EquationsSet_LabelGet,cmfe_EquationsSet_LabelSet - PUBLIC CMFE_FIELD_SCALAR_DIMENSION_TYPE,CMFE_FIELD_VECTOR_DIMENSION_TYPE,CMFE_FIELD_TENSOR_DIMENSION_TYPE + PUBLIC cmfe_EquationsSet_MaterialsCreateFinish,cmfe_EquationsSet_MaterialsCreateStart - PUBLIC CMFE_FIELD_GEOMETRIC_TYPE,CMFE_FIELD_FIBRE_TYPE,CMFE_FIELD_GENERAL_TYPE,CMFE_FIELD_MATERIAL_TYPE, & - & CMFE_FIELD_GEOMETRIC_GENERAL_TYPE + PUBLIC cmfe_EquationsSet_MaterialsDestroy - PUBLIC CMFE_FIELD_CONSTANT_INTERPOLATION,CMFE_FIELD_ELEMENT_BASED_INTERPOLATION,CMFE_FIELD_NODE_BASED_INTERPOLATION, & - & CMFE_FIELD_GRID_POINT_BASED_INTERPOLATION,CMFE_FIELD_GAUSS_POINT_BASED_INTERPOLATION, & - & CMFE_FIELD_DATA_POINT_BASED_INTERPOLATION + PUBLIC cmfe_Equationsset_OutputTypeGet,cmfe_EquationsSet_OutputTypeSet - PUBLIC CMFE_FIELD_NUMBER_OF_VARIABLE_SUBTYPES + PUBLIC cmfe_EquationsSet_SolutionMethodGet,cmfe_EquationsSet_SolutionMethodSet - PUBLIC CMFE_FIELD_U_VARIABLE_TYPE,CMFE_FIELD_DELUDELN_VARIABLE_TYPE,CMFE_FIELD_DELUDELT_VARIABLE_TYPE, & - & CMFE_FIELD_DEL2UDELT2_VARIABLE_TYPE, & - & CMFE_FIELD_V_VARIABLE_TYPE,CMFE_FIELD_DELVDELN_VARIABLE_TYPE,CMFE_FIELD_DELVDELT_VARIABLE_TYPE, & - & CMFE_FIELD_DEL2VDELT2_VARIABLE_TYPE, & - & CMFE_FIELD_W_VARIABLE_TYPE, & - & CMFE_FIELD_U1_VARIABLE_TYPE,CMFE_FIELD_DELU1DELN_VARIABLE_TYPE,CMFE_FIELD_DELU1DELT_VARIABLE_TYPE, & - & CMFE_FIELD_DEL2U1DELT2_VARIABLE_TYPE, & - & CMFE_FIELD_U2_VARIABLE_TYPE,CMFE_FIELD_DELU2DELN_VARIABLE_TYPE,CMFE_FIELD_DELU2DELT_VARIABLE_TYPE, & - & CMFE_FIELD_DEL2U2DELT2_VARIABLE_TYPE, & - & CMFE_FIELD_U3_VARIABLE_TYPE,CMFE_FIELD_DELU3DELN_VARIABLE_TYPE,CMFE_FIELD_DELU3DELT_VARIABLE_TYPE, & - & CMFE_FIELD_DEL2U3DELT2_VARIABLE_TYPE, & - & CMFE_FIELD_U4_VARIABLE_TYPE,CMFE_FIELD_DELU4DELN_VARIABLE_TYPE,CMFE_FIELD_DELU4DELT_VARIABLE_TYPE, & - & CMFE_FIELD_DEL2U4DELT2_VARIABLE_TYPE, & - & CMFE_FIELD_U5_VARIABLE_TYPE,CMFE_FIELD_DELU5DELN_VARIABLE_TYPE,CMFE_FIELD_DELU5DELT_VARIABLE_TYPE, & - & CMFE_FIELD_DEL2U5DELT2_VARIABLE_TYPE, & - & CMFE_FIELD_U6_VARIABLE_TYPE,CMFE_FIELD_DELU6DELN_VARIABLE_TYPE,CMFE_FIELD_DELU6DELT_VARIABLE_TYPE, & - & CMFE_FIELD_DEL2U6DELT2_VARIABLE_TYPE, & - & CMFE_FIELD_U7_VARIABLE_TYPE,CMFE_FIELD_DELU7DELN_VARIABLE_TYPE,CMFE_FIELD_DELU7DELT_VARIABLE_TYPE, & - & CMFE_FIELD_DEL2U7DELT2_VARIABLE_TYPE, & - & CMFE_FIELD_U8_VARIABLE_TYPE,CMFE_FIELD_DELU8DELN_VARIABLE_TYPE,CMFE_FIELD_DELU8DELT_VARIABLE_TYPE, & - & CMFE_FIELD_DEL2U8DELT2_VARIABLE_TYPE, & - & CMFE_FIELD_U9_VARIABLE_TYPE,CMFE_FIELD_DELU9DELN_VARIABLE_TYPE,CMFE_FIELD_DELU9DELT_VARIABLE_TYPE, & - & CMFE_FIELD_DEL2U9DELT2_VARIABLE_TYPE, & - & CMFE_FIELD_U10_VARIABLE_TYPE,CMFE_FIELD_DELU10DELN_VARIABLE_TYPE,CMFE_FIELD_DELU10DELT_VARIABLE_TYPE, & - & CMFE_FIELD_DEL2U10DELT2_VARIABLE_TYPE + PUBLIC cmfe_EquationsSet_SourceCreateFinish,cmfe_EquationsSet_SourceCreateStart - PUBLIC CMFE_FIELD_INTG_TYPE,CMFE_FIELD_SP_TYPE,CMFE_FIELD_DP_TYPE,CMFE_FIELD_L_TYPE + PUBLIC cmfe_EquationsSet_SourceDestroy - PUBLIC CMFE_FIELD_SEPARATED_COMPONENT_DOF_ORDER,CMFE_FIELD_CONTIGUOUS_COMPONENT_DOF_ORDER + PUBLIC cmfe_EquationsSet_SpecificationGet,cmfe_EquationsSet_SpecificationSizeGet - PUBLIC CMFE_FIELD_VALUES_SET_TYPE,CMFE_FIELD_INITIAL_VALUES_SET_TYPE,CMFE_FIELD_INCREMENTAL_VALUES_SET_TYPE, & - & CMFE_FIELD_BOUNDARY_CONDITIONS_SET_TYPE, & - & CMFE_FIELD_ANALYTIC_VALUES_SET_TYPE, & - & CMFE_FIELD_PREVIOUS_VALUES_SET_TYPE,CMFE_FIELD_MEAN_PREDICTED_DISPLACEMENT_SET_TYPE,CMFE_FIELD_VELOCITY_VALUES_SET_TYPE, & - & CMFE_FIELD_INITIAL_VELOCITY_SET_TYPE,CMFE_FIELD_PREVIOUS_VELOCITY_SET_TYPE,CMFE_FIELD_MEAN_PREDICTED_VELOCITY_SET_TYPE, & - & CMFE_FIELD_ACCELERATION_VALUES_SET_TYPE,CMFE_FIELD_INITIAL_ACCELERATION_SET_TYPE, & - & CMFE_FIELD_PREVIOUS_ACCELERATION_SET_TYPE, & - & CMFE_FIELD_MEAN_PREDICTED_ACCELERATION_SET_TYPE, CMFE_FIELD_PRESSURE_VALUES_SET_TYPE, & - & CMFE_FIELD_PREVIOUS_PRESSURE_SET_TYPE, & - & CMFE_FIELD_IMPERMEABLE_FLAG_VALUES_SET_TYPE,CMFE_FIELD_INTEGRATED_NEUMANN_SET_TYPE, & - & CMFE_FIELD_MESH_DISPLACEMENT_SET_TYPE,CMFE_FIELD_MESH_VELOCITY_SET_TYPE + PUBLIC cmfe_EquationsSet_TensorInterpolateGaussPoint - PUBLIC CMFE_FIELD_NO_SCALING,CMFE_FIELD_UNIT_SCALING,CMFE_FIELD_ARC_LENGTH_SCALING,CMFE_FIELD_ARITHMETIC_MEAN_SCALING, & - & CMFE_FIELD_GEOMETRIC_MEAN_SCALING,CMFE_FIELD_HARMONIC_MEAN_SCALING + PUBLIC cmfe_EquationsSet_TensorInterpolateXi - PUBLIC cmfe_Field_ComponentInterpolationGet,cmfe_Field_ComponentInterpolationSet + PUBLIC cmfe_EquationsSet_TimesGet,cmfe_EquationsSet_TimesSet - PUBLIC cmfe_Field_ComponentLabelGet,cmfe_Field_ComponentLabelSet + PUBLIC cmfe_EquationsSet_AnalyticUserParamSet,cmfe_EquationsSet_AnalyticUserParamGet - PUBLIC cmfe_Field_ComponentMeshComponentGet,cmfe_Field_ComponentMeshComponentSet +!================================================================================================================================== +! +! FIELD_ROUTINES +! +!================================================================================================================================== + + !Module parameters + + !> \addtogroup OpenCMISS_FieldConstants OpenCMISS::Iron::Field::Constants + !> \brief Field constants. + !>@{ + !> \addtogroup OpenCMISS_FieldDependentTypes OpenCMISS::Iron::Field::DependentTypes + !> \brief Depedent field parameter types. + !> \see OpenCMISS::Iron::Field,OpenCMISS + !>@{ + INTEGER(INTG), PARAMETER :: CMFE_FIELD_INDEPENDENT_TYPE = FIELD_INDEPENDENT_TYPE !@} + !> \addtogroup OpenCMISS_FieldDimensionTypes OpenCMISS::Iron::Field::DimensionTypes + !> \brief Field dimension parameter types. + !> \see OpenCMISS::Iron::Field,OpenCMISS + !>@{ + INTEGER(INTG), PARAMETER :: CMFE_FIELD_SCALAR_DIMENSION_TYPE = FIELD_SCALAR_DIMENSION_TYPE !@} + !> \addtogroup OpenCMISS_FieldTypes OpenCMISS::Iron::Field::Types + !> \brief Field type parameters. + !> \see OpenCMISS::Iron::Field,OpenCMISS + !>@{ + INTEGER(INTG), PARAMETER :: CMFE_FIELD_GEOMETRIC_TYPE = FIELD_GEOMETRIC_TYPE !@} + !> \addtogroup OpenCMISS_FieldInterpolationTypes OpenCMISS::Iron::Field::InterpolationTypes + !> \brief Field interpolation parameters. + !> \see OpenCMISS::Iron::Field,OpenCMISS + !>@{ + INTEGER(INTG), PARAMETER :: CMFE_FIELD_CONSTANT_INTERPOLATION = FIELD_CONSTANT_INTERPOLATION !@} + !> \addtogroup OpenCMISS_FieldVariableTypes OpenCMISS::Iron::Field::VariableTypes + !> \brief Field variable type parameters. + !> \see OpenCMISS::Iron::Field,OpenCMISS + !>@{ + INTEGER(INTG), PARAMETER :: CMFE_FIELD_NUMBER_OF_VARIABLE_SUBTYPES = FIELD_NUMBER_OF_VARIABLE_SUBTYPES !@} + !> \addtogroup OpenCMISS_FieldDataTypes OpenCMISS::Iron::Field::DataTypes + !> \brief Field data types + !> \see OpenCMISS::Iron::Field,OpenCMISS + !>@{ + INTEGER(INTG), PARAMETER :: CMFE_FIELD_INTG_TYPE = FIELD_INTG_TYPE !@} + !> \addtogroup OpenCMISS_FieldDOFOrderTypes OpenCMISS::Iron::Field::DOFOrderTypes + !> \brief Field DOF order types + !> \see OpenCMISS::Iron::Field,OpenCMISS + !>@{ + INTEGER(INTG), PARAMETER :: CMFE_FIELD_SEPARATED_COMPONENT_DOF_ORDER = FIELD_SEPARATED_COMPONENT_DOF_ORDER !@} + !> \addtogroup OpenCMISS_FieldParameterSetTypes OpenCMISS::Iron::Field::ParameterSetTypes + !> \brief Field parameter set type parameters + !> \see OpenCMISS::Iron::Field,OpenCMISS + !>@{ + INTEGER(INTG), PARAMETER :: CMFE_FIELD_VALUES_SET_TYPE = FIELD_VALUES_SET_TYPE !@} + !> \addtogroup OpenCMISS_FieldScalingTypes OpenCMISS::Iron::Field::ScalingTypes + !> \brief Field scaling type parameters + !> \see OpenCMISS::Iron::Field,OpenCMISS + !>@{ + INTEGER(INTG), PARAMETER :: CMFE_FIELD_NO_SCALING = FIELD_NO_SCALING !@} + !>@} + + !Module types + + !Module variables + + !Interfaces + + !>Returns the interpolation type for a field variable component. + INTERFACE cmfe_Field_ComponentInterpolationGet + MODULE PROCEDURE cmfe_Field_ComponentInterpolationGetNumber + MODULE PROCEDURE cmfe_Field_ComponentInterpolationGetObj + END INTERFACE cmfe_Field_ComponentInterpolationGet + + !>Sets/changes the interpolation type for a field variable component. + INTERFACE cmfe_Field_ComponentInterpolationSet + MODULE PROCEDURE cmfe_Field_ComponentInterpolationSetNumber + MODULE PROCEDURE cmfe_Field_ComponentInterpolationSetObj + END INTERFACE cmfe_Field_ComponentInterpolationSet + + !>Returns the label for a field variable component. + INTERFACE cmfe_Field_ComponentLabelGet + MODULE PROCEDURE cmfe_Field_ComponentLabelGetCNumber + MODULE PROCEDURE cmfe_Field_ComponentLabelGetCObj + MODULE PROCEDURE cmfe_Field_ComponentLabelGetVSNumber + MODULE PROCEDURE cmfe_Field_ComponentLabelGetVSObj + END INTERFACE cmfe_Field_ComponentLabelGet + + !>Sets/changes the label for a field variable component. + INTERFACE cmfe_Field_ComponentLabelSet + MODULE PROCEDURE cmfe_Field_ComponentLabelSetCNumber + MODULE PROCEDURE cmfe_Field_ComponentLabelSetCObj + MODULE PROCEDURE cmfe_Field_ComponentLabelSetVSNumber + MODULE PROCEDURE cmfe_Field_ComponentLabelSetVSObj + END INTERFACE cmfe_Field_ComponentLabelSet + + !>Returns the mesh component number for a field variable component. + INTERFACE cmfe_Field_ComponentMeshComponentGet + MODULE PROCEDURE cmfe_Field_ComponentMeshComponentGetNumber + MODULE PROCEDURE cmfe_Field_ComponentMeshComponentGetObj + END INTERFACE cmfe_Field_ComponentMeshComponentGet + + !>Sets/changes the mesh component number for a field variable component. + INTERFACE cmfe_Field_ComponentMeshComponentSet + MODULE PROCEDURE cmfe_Field_ComponentMeshComponentSetNumber + MODULE PROCEDURE cmfe_Field_ComponentMeshComponentSetObj + END INTERFACE cmfe_Field_ComponentMeshComponentSet + + !>Initialises the values of a parameter set of a field variable component to a constant value. + INTERFACE cmfe_Field_ComponentValuesInitialise + MODULE PROCEDURE cmfe_Field_ComponentValuesInitialiseIntgNumber + MODULE PROCEDURE cmfe_Field_ComponentValuesInitialiseIntgObj + MODULE PROCEDURE cmfe_Field_ComponentValuesInitialiseSPNumber + MODULE PROCEDURE cmfe_Field_ComponentValuesInitialiseSPObj + MODULE PROCEDURE cmfe_Field_ComponentValuesInitialiseDPNumber + MODULE PROCEDURE cmfe_Field_ComponentValuesInitialiseDPObj + MODULE PROCEDURE cmfe_Field_ComponentValuesInitialiseLNumber + MODULE PROCEDURE cmfe_Field_ComponentValuesInitialiseLObj + END INTERFACE cmfe_Field_ComponentValuesInitialise + + !>Returns the data type for a field variable. + INTERFACE cmfe_Field_DataTypeGet + MODULE PROCEDURE cmfe_Field_DataTypeGetNumber + MODULE PROCEDURE cmfe_Field_DataTypeGetObj + END INTERFACE cmfe_Field_DataTypeGet + + !>Sets/changes the data type for a field variable. + INTERFACE cmfe_Field_DataTypeSet + MODULE PROCEDURE cmfe_Field_DataTypeSetNumber + MODULE PROCEDURE cmfe_Field_DataTypeSetObj + END INTERFACE cmfe_Field_DataTypeSet + + !>Returns the DOF order type for a field variable. + INTERFACE cmfe_Field_DOFOrderTypeGet + MODULE PROCEDURE cmfe_Field_DOFOrderTypeGetNumber + MODULE PROCEDURE cmfe_Field_DOFOrderTypeGetObj + END INTERFACE cmfe_Field_DOFOrderTypeGet + + !>Sets/changes the DOF order type for a field variable. Note: for contiguous coponent DOF ordering all the components of the field variable must have the same interpolation type. + INTERFACE cmfe_Field_DOFOrderTypeSet + MODULE PROCEDURE cmfe_Field_DOFOrderTypeSetNumber + MODULE PROCEDURE cmfe_Field_DOFOrderTypeSetObj + END INTERFACE cmfe_Field_DOFOrderTypeSet + + !>Finishes the creation of a field. \see OpenCMISS::Iron::cmfe_Field_CreateStart + INTERFACE cmfe_Field_CreateFinish + MODULE PROCEDURE cmfe_Field_CreateFinishNumber + MODULE PROCEDURE cmfe_Field_CreateFinishObj + END INTERFACE cmfe_Field_CreateFinish + + !>Starts the creation of a field. \see OpenCMISS::Iron::cmfe_Field_CreateFinish + INTERFACE cmfe_Field_CreateStart + MODULE PROCEDURE cmfe_Field_CreateStartNumber + MODULE PROCEDURE cmfe_Field_CreateStartInterfaceObj + MODULE PROCEDURE cmfe_Field_CreateStartRegionObj + END INTERFACE cmfe_Field_CreateStart + + !>Returns the dependent type for a field. + INTERFACE cmfe_Field_DependentTypeGet + MODULE PROCEDURE cmfe_Field_DependentTypeGetNumber + MODULE PROCEDURE cmfe_Field_DependentTypeGetObj + END INTERFACE cmfe_Field_DependentTypeGet + + !>Sets/changes the dependent type for a field. + INTERFACE cmfe_Field_DependentTypeSet + MODULE PROCEDURE cmfe_Field_DependentTypeSetNumber + MODULE PROCEDURE cmfe_Field_DependentTypeSetObj + END INTERFACE cmfe_Field_DependentTypeSet + + !>Destroys a field. + INTERFACE cmfe_Field_Destroy + MODULE PROCEDURE cmfe_Field_DestroyNumber + MODULE PROCEDURE cmfe_Field_DestroyObj + END INTERFACE cmfe_Field_Destroy + + !>Returns the field dimension for a field variable. + INTERFACE cmfe_Field_DimensionGet + MODULE PROCEDURE cmfe_Field_DimensionGetNumber + MODULE PROCEDURE cmfe_Field_DimensionGetObj + END INTERFACE cmfe_Field_DimensionGet + + !>Sets/changes the field dimension for a field variable. + INTERFACE cmfe_Field_DimensionSet + MODULE PROCEDURE cmfe_Field_DimensionSetNumber + MODULE PROCEDURE cmfe_Field_DimensionSetObj + END INTERFACE cmfe_Field_DimensionSet + + !>Returns the geometric field for a field. + INTERFACE cmfe_Field_GeometricFieldGet + MODULE PROCEDURE cmfe_Field_GeometricFieldGetNumber + MODULE PROCEDURE cmfe_Field_GeometricFieldGetObj + END INTERFACE cmfe_Field_GeometricFieldGet + + !>Sets/changes the geometric field for a field. + INTERFACE cmfe_Field_GeometricFieldSet + MODULE PROCEDURE cmfe_Field_GeometricFieldSetNumber + MODULE PROCEDURE cmfe_Field_GeometricFieldSetObj + END INTERFACE cmfe_Field_GeometricFieldSet + + !>Gets line lengths from a geometric field given an element number and element basis line number. + INTERFACE cmfe_Field_GeometricParametersElementLineLengthGet + MODULE PROCEDURE cmfe_Field_GeometricParametersElementLineLengthGetNumber + MODULE PROCEDURE cmfe_Field_GeometricParametersElementLineLengthGetObj + END INTERFACE cmfe_Field_GeometricParametersElementLineLengthGet + + !>Gets volumes from a geometric field given an element number. + INTERFACE cmfe_Field_GeometricParametersElementVolumeGet + MODULE PROCEDURE cmfe_Field_GeometricParametersElementVolumeGetNumber + MODULE PROCEDURE cmfe_Field_GeometricParametersElementVolumeGetObj + END INTERFACE cmfe_Field_GeometricParametersElementVolumeGet + + !>Returns the label for a field. + INTERFACE cmfe_Field_LabelGet + MODULE PROCEDURE cmfe_Field_LabelGetCNumber + MODULE PROCEDURE cmfe_Field_LabelGetCObj + MODULE PROCEDURE cmfe_Field_LabelGetVSNumber + MODULE PROCEDURE cmfe_Field_LabelGetVSObj + END INTERFACE cmfe_Field_LabelGet + + !>Sets/changes the label for a field. + INTERFACE cmfe_Field_LabelSet + MODULE PROCEDURE cmfe_Field_LabelSetCNumber + MODULE PROCEDURE cmfe_Field_LabelSetCObj + MODULE PROCEDURE cmfe_Field_LabelSetVSNumber + MODULE PROCEDURE cmfe_Field_LabelSetVSObj + END INTERFACE cmfe_Field_LabelSet + + INTERFACE cmfe_Field_PositionNormalTangentCalculateNode + MODULE PROCEDURE cmfe_Field_PositionNormalTangentCalculateNodeNumber + MODULE PROCEDURE cmfe_Field_PositionNormalTangentCalculateNodeObj + END INTERFACE + + !>Returns the mesh decomposition for a field. + INTERFACE cmfe_Field_MeshDecompositionGet + MODULE PROCEDURE cmfe_Field_MeshDecompositionGetNumber + MODULE PROCEDURE cmfe_Field_MeshDecompositionGetObj + END INTERFACE cmfe_Field_MeshDecompositionGet + + !>Sets/changes the mesh decomposition for a field. \todo remove when fields take decomposition argument on creation??? + INTERFACE cmfe_Field_MeshDecompositionSet + MODULE PROCEDURE cmfe_Field_MeshDecompositionSetNumber + MODULE PROCEDURE cmfe_Field_MeshDecompositionSetObj + END INTERFACE cmfe_Field_MeshDecompositionSet + + !>Sets/changes the data projection for a field. + INTERFACE cmfe_Field_DataProjectionSet + MODULE PROCEDURE cmfe_Field_DataProjectionSetNumber + MODULE PROCEDURE cmfe_Field_DataProjectionSetObj + END INTERFACE cmfe_Field_DataProjectionSet + + !>Returns the number of field components for a field variable. + INTERFACE cmfe_Field_NumberOfComponentsGet + MODULE PROCEDURE cmfe_Field_NumberOfComponentsGetNumber + MODULE PROCEDURE cmfe_Field_NumberOfComponentsGetObj + END INTERFACE cmfe_Field_NumberOfComponentsGet + + !>Sets/changes the number of field components for a field variable. + INTERFACE cmfe_Field_NumberOfComponentsSet + MODULE PROCEDURE cmfe_Field_NumberOfComponentsSetNumber + MODULE PROCEDURE cmfe_Field_NumberOfComponentsSetObj + END INTERFACE cmfe_Field_NumberOfComponentsSet + + !>Returns the number of field variables for a field. + INTERFACE cmfe_Field_NumberOfVariablesGet + MODULE PROCEDURE cmfe_Field_NumberOfVariablesGetNumber + MODULE PROCEDURE cmfe_Field_NumberOfVariablesGetObj + END INTERFACE cmfe_Field_NumberOfVariablesGet + + !>Sets/changes the number of field variables for a field. + INTERFACE cmfe_Field_NumberOfVariablesSet + MODULE PROCEDURE cmfe_Field_NumberOfVariablesSetNumber + MODULE PROCEDURE cmfe_Field_NumberOfVariablesSetObj + END INTERFACE cmfe_Field_NumberOfVariablesSet + + !>Adds the given value to the given parameter set for the constant of the field variable component. + INTERFACE cmfe_Field_ParameterSetAddConstant + MODULE PROCEDURE cmfe_Field_ParameterSetAddConstantIntgNumber + MODULE PROCEDURE cmfe_Field_ParameterSetAddConstantIntgObj + MODULE PROCEDURE cmfe_Field_ParameterSetAddConstantSPNumber + MODULE PROCEDURE cmfe_Field_ParameterSetAddConstantSPObj + MODULE PROCEDURE cmfe_Field_ParameterSetAddConstantDPNumber + MODULE PROCEDURE cmfe_Field_ParameterSetAddConstantDPObj + MODULE PROCEDURE cmfe_Field_ParameterSetAddConstantLNumber + MODULE PROCEDURE cmfe_Field_ParameterSetAddConstantLObj + END INTERFACE cmfe_Field_ParameterSetAddConstant + + !>Adds the given value to the given parameter set for a particular user element of the field variable component. + INTERFACE cmfe_Field_ParameterSetAddElement + MODULE PROCEDURE cmfe_Field_ParameterSetAddElementIntgNumber + MODULE PROCEDURE cmfe_Field_ParameterSetAddElementIntgObj + MODULE PROCEDURE cmfe_Field_ParameterSetAddElementSPNumber + MODULE PROCEDURE cmfe_Field_ParameterSetAddElementSPObj + MODULE PROCEDURE cmfe_Field_ParameterSetAddElementDPNumber + MODULE PROCEDURE cmfe_Field_ParameterSetAddElementDPObj + MODULE PROCEDURE cmfe_Field_ParameterSetAddElementLNumber + MODULE PROCEDURE cmfe_Field_ParameterSetAddElementLObj + END INTERFACE cmfe_Field_ParameterSetAddElement + + !>Adds the given value to the given parameter set for a particular Gauss point of a user element of the field variable component. + INTERFACE cmfe_Field_ParameterSetAddGaussPoint + MODULE PROCEDURE cmfe_Field_ParameterSetAddGaussPointIntgNumber + MODULE PROCEDURE cmfe_Field_ParameterSetAddGaussPointIntgObj + MODULE PROCEDURE cmfe_Field_ParameterSetAddGaussPointSPNumber + MODULE PROCEDURE cmfe_Field_ParameterSetAddGaussPointSPObj + MODULE PROCEDURE cmfe_Field_ParameterSetAddGaussPointDPNumber + MODULE PROCEDURE cmfe_Field_ParameterSetAddGaussPointDPObj + MODULE PROCEDURE cmfe_Field_ParameterSetAddGaussPointLNumber + MODULE PROCEDURE cmfe_Field_ParameterSetAddGaussPointLObj + END INTERFACE cmfe_Field_ParameterSetAddGaussPoint + + !>Adds the given value to the given parameter set for a particular user node of the field variable component. + INTERFACE cmfe_Field_ParameterSetAddNode + MODULE PROCEDURE cmfe_Field_ParameterSetAddNodeIntgNumber + MODULE PROCEDURE cmfe_Field_ParameterSetAddNodeIntgObj + MODULE PROCEDURE cmfe_Field_ParameterSetAddNodeSPNumber + MODULE PROCEDURE cmfe_Field_ParameterSetAddNodeSPObj + MODULE PROCEDURE cmfe_Field_ParameterSetAddNodeDPNumber + MODULE PROCEDURE cmfe_Field_ParameterSetAddNodeDPObj + MODULE PROCEDURE cmfe_Field_ParameterSetAddNodeLNumber + MODULE PROCEDURE cmfe_Field_ParameterSetAddNodeLObj + END INTERFACE cmfe_Field_ParameterSetAddNode + + !>Creates a new parameter set of type set type for a field variable. + INTERFACE cmfe_Field_ParameterSetCreate + MODULE PROCEDURE cmfe_Field_ParameterSetCreateNumber + MODULE PROCEDURE cmfe_Field_ParameterSetCreateObj + END INTERFACE cmfe_Field_ParameterSetCreate + + !>Destroy a parameter set of type set type for a field variable. + INTERFACE cmfe_Field_ParameterSetDestroy + MODULE PROCEDURE cmfe_Field_ParameterSetDestroyNumber + MODULE PROCEDURE cmfe_Field_ParameterSetDestroyObj + END INTERFACE cmfe_Field_ParameterSetDestroy + + !>Returns a pointer to the specified field parameter set local data array. The pointer must be restored with a call to OpenCMISS::Iron::cmfe_Field_ParameterSetDataRestore call. Note: the values can be used for read operations but a field parameter set update or add calls must be used to change any values. + INTERFACE cmfe_Field_ParameterSetDataGet + MODULE PROCEDURE cmfe_Field_ParameterSetDataGetIntgNumber + MODULE PROCEDURE cmfe_Field_ParameterSetDataGetIntgObj + MODULE PROCEDURE cmfe_Field_ParameterSetDataGetSPNumber + MODULE PROCEDURE cmfe_Field_ParameterSetDataGetSPObj + MODULE PROCEDURE cmfe_Field_ParameterSetDataGetDPNumber + MODULE PROCEDURE cmfe_Field_ParameterSetDataGetDPObj + MODULE PROCEDURE cmfe_Field_ParameterSetDataGetLNumber + MODULE PROCEDURE cmfe_Field_ParameterSetDataGetLObj + END INTERFACE cmfe_Field_ParameterSetDataGet + + !>Restores the specified field variable parameter set local array that was obtained with an OpenCMISS::Iron::cmfe_Field_ParameterSetDataGet call. + INTERFACE cmfe_Field_ParameterSetDataRestore + MODULE PROCEDURE cmfe_Field_ParameterSetDataRestoreIntgNumber + MODULE PROCEDURE cmfe_Field_ParameterSetDataRestoreIntgObj + MODULE PROCEDURE cmfe_Field_ParameterSetDataRestoreSPNumber + MODULE PROCEDURE cmfe_Field_ParameterSetDataRestoreSPObj + MODULE PROCEDURE cmfe_Field_ParameterSetDataRestoreDPNumber + MODULE PROCEDURE cmfe_Field_ParameterSetDataRestoreDPObj + MODULE PROCEDURE cmfe_Field_ParameterSetDataRestoreLNumber + MODULE PROCEDURE cmfe_Field_ParameterSetDataRestoreLObj + END INTERFACE cmfe_Field_ParameterSetDataRestore + + !>Returns from the given parameter set a value for the specified constant of a field variable component. + INTERFACE cmfe_Field_ParameterSetGetConstant + MODULE PROCEDURE cmfe_Field_ParameterSetGetConstantIntgNumber + MODULE PROCEDURE cmfe_Field_ParameterSetGetConstantIntgObj + MODULE PROCEDURE cmfe_Field_ParameterSetGetConstantSPNumber + MODULE PROCEDURE cmfe_Field_ParameterSetGetConstantSPObj + MODULE PROCEDURE cmfe_Field_ParameterSetGetConstantDPNumber + MODULE PROCEDURE cmfe_Field_ParameterSetGetConstantDPObj + MODULE PROCEDURE cmfe_Field_ParameterSetGetConstantLNumber + MODULE PROCEDURE cmfe_Field_ParameterSetGetConstantLObj + END INTERFACE cmfe_Field_ParameterSetGetConstant + + !>Returns from the given parameter set a value for the specified data pont of a field variable component. + INTERFACE cmfe_Field_ParameterSetGetDataPoint + MODULE PROCEDURE cmfe_Field_ParameterSetGetDataPointIntgNumberI !Interface + MODULE PROCEDURE cmfe_Field_ParameterSetGetDataPointIntgNumberR !Region + MODULE PROCEDURE cmfe_Field_ParameterSetGetDataPointIntgObj + MODULE PROCEDURE cmfe_Field_ParameterSetGetDataPointSPNumberI !Interface + MODULE PROCEDURE cmfe_Field_ParameterSetGetDataPointSPNumberR !Region + MODULE PROCEDURE cmfe_Field_ParameterSetGetDataPointSPObj + MODULE PROCEDURE cmfe_Field_ParameterSetGetDataPointDPNumberI !Interface + MODULE PROCEDURE cmfe_Field_ParameterSetGetDataPointDPNumberR !Region + MODULE PROCEDURE cmfe_Field_ParameterSetGetDataPointDPObj + MODULE PROCEDURE cmfe_Field_ParameterSetGetDataPointLNumberI !Interface + MODULE PROCEDURE cmfe_Field_ParameterSetGetDataPointLNumberR !Region + MODULE PROCEDURE cmfe_Field_ParameterSetGetDataPointLObj + END INTERFACE cmfe_Field_ParameterSetGetDataPoint + + !>Returns from the given parameter set a value for the specified element of a field variable component. + INTERFACE cmfe_Field_ParameterSetGetElement + MODULE PROCEDURE cmfe_Field_ParameterSetGetElementIntgNumber + MODULE PROCEDURE cmfe_Field_ParameterSetGetElementIntgObj + MODULE PROCEDURE cmfe_Field_ParameterSetGetElementSPNumber + MODULE PROCEDURE cmfe_Field_ParameterSetGetElementSPObj + MODULE PROCEDURE cmfe_Field_ParameterSetGetElementDPNumber + MODULE PROCEDURE cmfe_Field_ParameterSetGetElementDPObj + MODULE PROCEDURE cmfe_Field_ParameterSetGetElementLNumber + MODULE PROCEDURE cmfe_Field_ParameterSetGetElementLObj + END INTERFACE cmfe_Field_ParameterSetGetElement + + !>Returns from the given parameter set a value for the specified node and derivative of a field variable component. + INTERFACE cmfe_Field_ParameterSetGetNode + MODULE PROCEDURE cmfe_Field_ParameterSetGetNodeIntgNumber + MODULE PROCEDURE cmfe_Field_ParameterSetGetNodeIntgObj + MODULE PROCEDURE cmfe_Field_ParameterSetGetNodeSPNumber + MODULE PROCEDURE cmfe_Field_ParameterSetGetNodeSPObj + MODULE PROCEDURE cmfe_Field_ParameterSetGetNodeDPNumber + MODULE PROCEDURE cmfe_Field_ParameterSetGetNodeDPObj + MODULE PROCEDURE cmfe_Field_ParameterSetGetNodeLNumber + MODULE PROCEDURE cmfe_Field_ParameterSetGetNodeLObj + END INTERFACE cmfe_Field_ParameterSetGetNode + + !>Returns from the given parameter set a value for the specified element and Gauss point of a field variable component. + INTERFACE cmfe_Field_ParameterSetGetGaussPoint ! TODO: other versions + MODULE PROCEDURE cmfe_Field_ParameterSetGetGaussPointDPObj + END INTERFACE cmfe_Field_ParameterSetGetGaussPoint + + !>Updates the given parameter set with the given value for the constant of a field variable component. + INTERFACE cmfe_Field_ParameterSetUpdateConstant + MODULE PROCEDURE cmfe_Field_ParameterSetUpdateConstantIntgNumber + MODULE PROCEDURE cmfe_Field_ParameterSetUpdateConstantIntgObj + MODULE PROCEDURE cmfe_Field_ParameterSetUpdateConstantSPNumber + MODULE PROCEDURE cmfe_Field_ParameterSetUpdateConstantSPObj + MODULE PROCEDURE cmfe_Field_ParameterSetUpdateConstantDPNumber + MODULE PROCEDURE cmfe_Field_ParameterSetUpdateConstantDPObj + MODULE PROCEDURE cmfe_Field_ParameterSetUpdateConstantLNumber + MODULE PROCEDURE cmfe_Field_ParameterSetUpdateConstantLObj + END INTERFACE cmfe_Field_ParameterSetUpdateConstant + + !>Update the given parameter set a value for the specified data pont of a field variable component. + INTERFACE cmfe_Field_ParameterSetUpdateDataPoint + MODULE PROCEDURE cmfe_Field_ParameterSetUpdateDataPointIntgNumberI !Interface + MODULE PROCEDURE cmfe_Field_ParameterSetUpdateDataPointIntgNumberR !Region + MODULE PROCEDURE cmfe_Field_ParameterSetUpdateDataPointIntgObj + MODULE PROCEDURE cmfe_Field_ParameterSetUpdateDataPointSPNumberI !Interface + MODULE PROCEDURE cmfe_Field_ParameterSetUpdateDataPointSPNumberR !Region + MODULE PROCEDURE cmfe_Field_ParameterSetUpdateDataPointSPObj + MODULE PROCEDURE cmfe_Field_ParameterSetUpdateDataPointDPNumberI !Interface + MODULE PROCEDURE cmfe_Field_ParameterSetUpdateDataPointDPNumberR !Region + MODULE PROCEDURE cmfe_Field_ParameterSetUpdateDataPointDPObj + MODULE PROCEDURE cmfe_Field_ParameterSetUpdateDataPointLNumberI !Interface + MODULE PROCEDURE cmfe_Field_ParameterSetUpdateDataPointLNumberR !Region + MODULE PROCEDURE cmfe_Field_ParameterSetUpdateDataPointLObj + END INTERFACE cmfe_Field_ParameterSetUpdateDataPoint + + !>Updates the given parameter set with the given value for a particular user element of a field variable component. + INTERFACE cmfe_Field_ParameterSetUpdateElement + MODULE PROCEDURE cmfe_Field_ParameterSetUpdateElementIntgNumber + MODULE PROCEDURE cmfe_Field_ParameterSetUpdateElementIntgObj + MODULE PROCEDURE cmfe_Field_ParameterSetUpdateElementSPNumber + MODULE PROCEDURE cmfe_Field_ParameterSetUpdateElementSPObj + MODULE PROCEDURE cmfe_Field_ParameterSetUpdateElementDPNumber + MODULE PROCEDURE cmfe_Field_ParameterSetUpdateElementDPObj + MODULE PROCEDURE cmfe_Field_ParameterSetUpdateElementLNumber + MODULE PROCEDURE cmfe_Field_ParameterSetUpdateElementLObj + END INTERFACE cmfe_Field_ParameterSetUpdateElement + + !>Finishes the parameter set update for a field variable. \see OpenCMISS::Iron::cmfe_Field_ParameterSetUpdateStart + INTERFACE cmfe_Field_ParameterSetUpdateFinish + MODULE PROCEDURE cmfe_Field_ParameterSetUpdateFinishNumber + MODULE PROCEDURE cmfe_Field_ParameterSetUpdateFinishObj + END INTERFACE cmfe_Field_ParameterSetUpdateFinish + + !>Updates the given parameter set with the given value for a particular user node of a field variable component. + INTERFACE cmfe_Field_ParameterSetUpdateNode + MODULE PROCEDURE cmfe_Field_ParameterSetUpdateNodeIntgNumber + MODULE PROCEDURE cmfe_Field_ParameterSetUpdateNodeIntgObj + MODULE PROCEDURE cmfe_Field_ParameterSetUpdateNodeSPNumber + MODULE PROCEDURE cmfe_Field_ParameterSetUpdateNodeSPObj + MODULE PROCEDURE cmfe_Field_ParameterSetUpdateNodeDPNumber + MODULE PROCEDURE cmfe_Field_ParameterSetUpdateNodeDPObj + MODULE PROCEDURE cmfe_Field_ParameterSetUpdateNodeLNumber + MODULE PROCEDURE cmfe_Field_ParameterSetUpdateNodeLObj + END INTERFACE cmfe_Field_ParameterSetUpdateNode + + !\todo: merge the two types of routines for getting scalefactors under the same interface declaration? + !>Gets a scale factor for a particular node. + INTERFACE cmfe_Field_ParameterSetNodeScaleFactorGet + MODULE PROCEDURE cmfe_Field_ParameterSetNodeScaleFactorGetNumber + MODULE PROCEDURE cmfe_Field_ParameterSetNodeScaleFactorGetObj + END INTERFACE cmfe_Field_ParameterSetNodeScaleFactorGet + + !>Gets the scale factors for all nodes + INTERFACE cmfe_Field_ParameterSetNodeScaleFactorsGet + MODULE PROCEDURE cmfe_Field_ParameterSetNodeScaleFactorsGetNumber + MODULE PROCEDURE cmfe_Field_ParameterSetNodeScaleFactorsGetObj + END INTERFACE cmfe_Field_ParameterSetNodeScaleFactorsGet + + !>Sets a scale factor for a particular node. + INTERFACE cmfe_Field_ParameterSetNodeScaleFactorSet + MODULE PROCEDURE cmfe_Field_ParameterSetNodeScaleFactorSetNumber + MODULE PROCEDURE cmfe_Field_ParameterSetNodeScaleFactorSetObj + END INTERFACE cmfe_Field_ParameterSetNodeScaleFactorSet + + !>Sets the scale factors for all nodes + INTERFACE cmfe_Field_ParameterSetNodeScaleFactorsSet + MODULE PROCEDURE cmfe_Field_ParameterSetNodeScaleFactorsSetNumber + MODULE PROCEDURE cmfe_Field_ParameterSetNodeScaleFactorsSetObj + END INTERFACE cmfe_Field_ParameterSetNodeScaleFactorsSet + + !>Gets the number of scalefactor dofs + INTERFACE cmfe_Field_ParameterSetNodeNumberOfScaleFactorDofsGet + MODULE PROCEDURE cmfe_Field_ParameterSetNodeNumberOfScaleFactorDofsGetNumber + MODULE PROCEDURE cmfe_Field_ParameterSetNodeNumberOfScaleFactorDofsGetObj + END INTERFACE cmfe_Field_ParameterSetNodeNumberOfScaleFactorDofsGet + + !>Updates the given parameter set with the given values for all local dofs of the field variable. + INTERFACE cmfe_Field_ParameterSetUpdateLocalDofs + MODULE PROCEDURE cmfe_Field_ParameterSetUpdateLocalDofsDPObj + !\todo: add Intg/SP/L routines, both indexed by Number and Obj + END INTERFACE cmfe_Field_ParameterSetUpdateLocalDofs + + !>Updates the given parameter set with the given value for a particular Gauss point of a field variable component. + INTERFACE cmfe_Field_ParameterSetUpdateGaussPoint + MODULE PROCEDURE cmfe_Field_ParameterSetUpdateGaussPointIntgNumber + MODULE PROCEDURE cmfe_Field_ParameterSetUpdateGaussPointIntgObj + MODULE PROCEDURE cmfe_Field_ParameterSetUpdateGaussPointSPNumber + MODULE PROCEDURE cmfe_Field_ParameterSetUpdateGaussPointSPObj + MODULE PROCEDURE cmfe_Field_ParameterSetUpdateGaussPointDPNumber + MODULE PROCEDURE cmfe_Field_ParameterSetUpdateGaussPointDPObj + MODULE PROCEDURE cmfe_Field_ParameterSetUpdateGaussPointLNumber + MODULE PROCEDURE cmfe_Field_ParameterSetUpdateGaussPointLObj + END INTERFACE cmfe_Field_ParameterSetUpdateGaussPoint + + !>Interpolates the given parameter set at a specified xi/set of xi locations for specified element and derviative. + INTERFACE cmfe_Field_ParameterSetInterpolateXi + MODULE PROCEDURE cmfe_Field_ParameterSetInterpolateSingleXiDPNumber + MODULE PROCEDURE cmfe_Field_ParameterSetInterpolateSingleXiDPObj + MODULE PROCEDURE cmfe_Field_ParameterSetInterpolateMultipleXiDPNumber + MODULE PROCEDURE cmfe_Field_ParameterSetInterpolateMultipleXiDPObj + END INTERFACE cmfe_Field_ParameterSetInterpolateXi + + !>Interpolates the given parameter set at a specified set of Gauss points for specified element and derviative. When interpolating at multiple Gauss points, if no Gauss points are specified then all Gauss points are interpolated. + INTERFACE cmfe_Field_ParameterSetInterpolateGauss + MODULE PROCEDURE cmfe_Field_ParameterSetInterpolateSingleGaussDPNumber + MODULE PROCEDURE cmfe_Field_ParameterSetInterpolateSingleGaussDPObj + MODULE PROCEDURE cmfe_Field_ParameterSetInterpolateMultipleGaussDPNumber + MODULE PROCEDURE cmfe_Field_ParameterSetInterpolateMultipleGaussDPObj + END INTERFACE cmfe_Field_ParameterSetInterpolateGauss + + !>Updates the given parameter set with the given value for a particular data point of a field variable component. + INTERFACE cmfe_Field_ParameterSetUpdateElementDataPoint + MODULE PROCEDURE cmfe_Field_ParameterSetUpdateElementDataPointDPObj + END INTERFACE cmfe_Field_ParameterSetUpdateElementDataPoint + + !>Starts the parameter set update for a field variable. \see OpenCMISS::Iron::cmfe_Field_ParameterSetUpdateFinish + INTERFACE cmfe_Field_ParameterSetUpdateStart + MODULE PROCEDURE cmfe_Field_ParameterSetUpdateStartNumber + MODULE PROCEDURE cmfe_Field_ParameterSetUpdateStartObj + END INTERFACE cmfe_Field_ParameterSetUpdateStart + + !>Copy the parameters from the parameter set of a component of a field variable to the paramters of a parameter set of + !>a component of another field variable. + INTERFACE cmfe_Field_ParametersToFieldParametersComponentCopy + MODULE PROCEDURE cmfe_Field_ParametersToFieldParametersComponentCopyNumber + MODULE PROCEDURE cmfe_Field_ParametersToFieldParametersComponentCopyObj + END INTERFACE cmfe_Field_ParametersToFieldParametersComponentCopy + + !>Returns the scaling type for a field. + INTERFACE cmfe_Field_ScalingTypeGet + MODULE PROCEDURE cmfe_Field_ScalingTypeGetNumber + MODULE PROCEDURE cmfe_Field_ScalingTypeGetObj + END INTERFACE cmfe_Field_ScalingTypeGet + + !>Sets/changes the scaling type for a field. + INTERFACE cmfe_Field_ScalingTypeSet + MODULE PROCEDURE cmfe_Field_ScalingTypeSetNumber + MODULE PROCEDURE cmfe_Field_ScalingTypeSetObj + END INTERFACE cmfe_Field_ScalingTypeSet + + !>Returns the type for a field. + INTERFACE cmfe_Field_TypeGet + MODULE PROCEDURE cmfe_Field_TypeGetNumber + MODULE PROCEDURE cmfe_Field_TypeGetObj + END INTERFACE cmfe_Field_TypeGet + + !>Sets/changes the type for a field. + INTERFACE cmfe_Field_TypeSet + MODULE PROCEDURE cmfe_Field_TypeSetNumber + MODULE PROCEDURE cmfe_Field_TypeSetObj + END INTERFACE cmfe_Field_TypeSet + + !>Returns the label for a field variable. + INTERFACE cmfe_Field_VariableLabelGet + MODULE PROCEDURE cmfe_Field_VariableLabelGetCNumber + MODULE PROCEDURE cmfe_Field_VariableLabelGetCObj + MODULE PROCEDURE cmfe_Field_VariableLabelGetVSNumber + MODULE PROCEDURE cmfe_Field_VariableLabelGetVSObj + END INTERFACE cmfe_Field_VariableLabelGet + + !>Sets/changes the label for a field variable. + INTERFACE cmfe_Field_VariableLabelSet + MODULE PROCEDURE cmfe_Field_VariableLabelSetCNumber + MODULE PROCEDURE cmfe_Field_VariableLabelSetCObj + MODULE PROCEDURE cmfe_Field_VariableLabelSetVSNumber + MODULE PROCEDURE cmfe_Field_VariableLabelSetVSObj + END INTERFACE cmfe_Field_VariableLabelSet + + !>Returns the field variable types for a field. + INTERFACE cmfe_Field_VariableTypesGet + MODULE PROCEDURE cmfe_Field_VariableTypesGetNumber + MODULE PROCEDURE cmfe_Field_VariableTypesGetObj + END INTERFACE cmfe_Field_VariableTypesGet + + !>Sets/changes the field variable types for a field. + INTERFACE cmfe_Field_VariableTypesSet + MODULE PROCEDURE cmfe_Field_VariableTypesSetNumber + MODULE PROCEDURE cmfe_Field_VariableTypesSetObj + END INTERFACE cmfe_Field_VariableTypesSet + + + PUBLIC CMFE_FIELD_DEPENDENT_TYPE,CMFE_FIELD_INDEPENDENT_TYPE + + PUBLIC CMFE_FIELD_SCALAR_DIMENSION_TYPE,CMFE_FIELD_VECTOR_DIMENSION_TYPE,CMFE_FIELD_TENSOR_DIMENSION_TYPE + + PUBLIC CMFE_FIELD_GEOMETRIC_TYPE,CMFE_FIELD_FIBRE_TYPE,CMFE_FIELD_GENERAL_TYPE,CMFE_FIELD_MATERIAL_TYPE, & + & CMFE_FIELD_GEOMETRIC_GENERAL_TYPE + + PUBLIC CMFE_FIELD_CONSTANT_INTERPOLATION,CMFE_FIELD_ELEMENT_BASED_INTERPOLATION,CMFE_FIELD_NODE_BASED_INTERPOLATION, & + & CMFE_FIELD_GRID_POINT_BASED_INTERPOLATION,CMFE_FIELD_GAUSS_POINT_BASED_INTERPOLATION, & + & CMFE_FIELD_DATA_POINT_BASED_INTERPOLATION - PUBLIC cmfe_Field_ComponentValuesInitialise + PUBLIC CMFE_FIELD_NUMBER_OF_VARIABLE_SUBTYPES - PUBLIC cmfe_Field_DataTypeGet,cmfe_Field_DataTypeSet + PUBLIC CMFE_FIELD_U_VARIABLE_TYPE,CMFE_FIELD_DELUDELN_VARIABLE_TYPE,CMFE_FIELD_DELUDELT_VARIABLE_TYPE, & + & CMFE_FIELD_DEL2UDELT2_VARIABLE_TYPE, & + & CMFE_FIELD_V_VARIABLE_TYPE,CMFE_FIELD_DELVDELN_VARIABLE_TYPE,CMFE_FIELD_DELVDELT_VARIABLE_TYPE, & + & CMFE_FIELD_DEL2VDELT2_VARIABLE_TYPE, & + & CMFE_FIELD_W_VARIABLE_TYPE, & + & CMFE_FIELD_U1_VARIABLE_TYPE,CMFE_FIELD_DELU1DELN_VARIABLE_TYPE,CMFE_FIELD_DELU1DELT_VARIABLE_TYPE, & + & CMFE_FIELD_DEL2U1DELT2_VARIABLE_TYPE, & + & CMFE_FIELD_U2_VARIABLE_TYPE,CMFE_FIELD_DELU2DELN_VARIABLE_TYPE,CMFE_FIELD_DELU2DELT_VARIABLE_TYPE, & + & CMFE_FIELD_DEL2U2DELT2_VARIABLE_TYPE, & + & CMFE_FIELD_U3_VARIABLE_TYPE,CMFE_FIELD_DELU3DELN_VARIABLE_TYPE,CMFE_FIELD_DELU3DELT_VARIABLE_TYPE, & + & CMFE_FIELD_DEL2U3DELT2_VARIABLE_TYPE, & + & CMFE_FIELD_U4_VARIABLE_TYPE,CMFE_FIELD_DELU4DELN_VARIABLE_TYPE,CMFE_FIELD_DELU4DELT_VARIABLE_TYPE, & + & CMFE_FIELD_DEL2U4DELT2_VARIABLE_TYPE, & + & CMFE_FIELD_U5_VARIABLE_TYPE,CMFE_FIELD_DELU5DELN_VARIABLE_TYPE,CMFE_FIELD_DELU5DELT_VARIABLE_TYPE, & + & CMFE_FIELD_DEL2U5DELT2_VARIABLE_TYPE, & + & CMFE_FIELD_U6_VARIABLE_TYPE,CMFE_FIELD_DELU6DELN_VARIABLE_TYPE,CMFE_FIELD_DELU6DELT_VARIABLE_TYPE, & + & CMFE_FIELD_DEL2U6DELT2_VARIABLE_TYPE, & + & CMFE_FIELD_U7_VARIABLE_TYPE,CMFE_FIELD_DELU7DELN_VARIABLE_TYPE,CMFE_FIELD_DELU7DELT_VARIABLE_TYPE, & + & CMFE_FIELD_DEL2U7DELT2_VARIABLE_TYPE, & + & CMFE_FIELD_U8_VARIABLE_TYPE,CMFE_FIELD_DELU8DELN_VARIABLE_TYPE,CMFE_FIELD_DELU8DELT_VARIABLE_TYPE, & + & CMFE_FIELD_DEL2U8DELT2_VARIABLE_TYPE, & + & CMFE_FIELD_U9_VARIABLE_TYPE,CMFE_FIELD_DELU9DELN_VARIABLE_TYPE,CMFE_FIELD_DELU9DELT_VARIABLE_TYPE, & + & CMFE_FIELD_DEL2U9DELT2_VARIABLE_TYPE, & + & CMFE_FIELD_U10_VARIABLE_TYPE,CMFE_FIELD_DELU10DELN_VARIABLE_TYPE,CMFE_FIELD_DELU10DELT_VARIABLE_TYPE, & + & CMFE_FIELD_DEL2U10DELT2_VARIABLE_TYPE - PUBLIC cmfe_Field_DOFOrderTypeGet,cmfe_Field_DOFOrderTypeSet + PUBLIC CMFE_FIELD_INTG_TYPE,CMFE_FIELD_SP_TYPE,CMFE_FIELD_DP_TYPE,CMFE_FIELD_L_TYPE - PUBLIC cmfe_Field_CreateFinish,cmfe_Field_CreateStart + PUBLIC CMFE_FIELD_SEPARATED_COMPONENT_DOF_ORDER,CMFE_FIELD_CONTIGUOUS_COMPONENT_DOF_ORDER - PUBLIC cmfe_Field_DependentTypeGet,cmfe_Field_DependentTypeSet + PUBLIC CMFE_FIELD_VALUES_SET_TYPE,CMFE_FIELD_INITIAL_VALUES_SET_TYPE,CMFE_FIELD_INCREMENTAL_VALUES_SET_TYPE, & + & CMFE_FIELD_BOUNDARY_CONDITIONS_SET_TYPE, & + & CMFE_FIELD_ANALYTIC_VALUES_SET_TYPE, & + & CMFE_FIELD_PREVIOUS_VALUES_SET_TYPE,CMFE_FIELD_MEAN_PREDICTED_DISPLACEMENT_SET_TYPE,CMFE_FIELD_VELOCITY_VALUES_SET_TYPE, & + & CMFE_FIELD_INITIAL_VELOCITY_SET_TYPE,CMFE_FIELD_PREVIOUS_VELOCITY_SET_TYPE,CMFE_FIELD_MEAN_PREDICTED_VELOCITY_SET_TYPE, & + & CMFE_FIELD_ACCELERATION_VALUES_SET_TYPE,CMFE_FIELD_INITIAL_ACCELERATION_SET_TYPE, & + & CMFE_FIELD_PREVIOUS_ACCELERATION_SET_TYPE, & + & CMFE_FIELD_MEAN_PREDICTED_ACCELERATION_SET_TYPE, CMFE_FIELD_PRESSURE_VALUES_SET_TYPE, & + & CMFE_FIELD_PREVIOUS_PRESSURE_SET_TYPE, & + & CMFE_FIELD_IMPERMEABLE_FLAG_VALUES_SET_TYPE,CMFE_FIELD_INTEGRATED_NEUMANN_SET_TYPE, & + & CMFE_FIELD_MESH_DISPLACEMENT_SET_TYPE,CMFE_FIELD_MESH_VELOCITY_SET_TYPE - PUBLIC cmfe_Field_Destroy + PUBLIC CMFE_FIELD_NO_SCALING,CMFE_FIELD_UNIT_SCALING,CMFE_FIELD_ARC_LENGTH_SCALING,CMFE_FIELD_ARITHMETIC_MEAN_SCALING, & + & CMFE_FIELD_GEOMETRIC_MEAN_SCALING,CMFE_FIELD_HARMONIC_MEAN_SCALING - PUBLIC cmfe_Field_DimensionGet,cmfe_Field_DimensionSet + PUBLIC cmfe_Field_ComponentInterpolationGet,cmfe_Field_ComponentInterpolationSet - PUBLIC cmfe_Field_GeometricFieldGet,cmfe_Field_GeometricFieldSet + PUBLIC cmfe_Field_ComponentLabelGet,cmfe_Field_ComponentLabelSet - PUBLIC cmfe_Field_GeometricParametersElementLineLengthGet, cmfe_Field_GeometricParametersElementVolumeGet + PUBLIC cmfe_Field_ComponentMeshComponentGet,cmfe_Field_ComponentMeshComponentSet - PUBLIC cmfe_Field_LabelGet,cmfe_Field_LabelSet + PUBLIC cmfe_Field_ComponentValuesInitialise - PUBLIC cmfe_Field_MeshDecompositionGet,cmfe_Field_MeshDecompositionSet + PUBLIC cmfe_Field_DataTypeGet,cmfe_Field_DataTypeSet - PUBLIC cmfe_Field_DataProjectionSet + PUBLIC cmfe_Field_DOFOrderTypeGet,cmfe_Field_DOFOrderTypeSet - PUBLIC cmfe_Field_PositionNormalTangentCalculateNode + PUBLIC cmfe_Field_CreateFinish,cmfe_Field_CreateStart - PUBLIC cmfe_Field_NumberOfComponentsGet,cmfe_Field_NumberOfComponentsSet + PUBLIC cmfe_Field_DependentTypeGet,cmfe_Field_DependentTypeSet - PUBLIC cmfe_Field_NumberOfVariablesGet,cmfe_Field_NumberOfVariablesSet + PUBLIC cmfe_Field_Destroy - PUBLIC cmfe_Field_ParameterSetAddConstant,cmfe_Field_ParameterSetAddElement,cmfe_Field_ParameterSetAddGaussPoint, & - & cmfe_Field_ParameterSetAddNode + PUBLIC cmfe_Field_DimensionGet,cmfe_Field_DimensionSet - PUBLIC cmfe_Field_ParameterSetCreate + PUBLIC cmfe_Field_GeometricFieldGet,cmfe_Field_GeometricFieldSet - PUBLIC cmfe_Field_ParameterSetDestroy + PUBLIC cmfe_Field_GeometricParametersElementLineLengthGet, cmfe_Field_GeometricParametersElementVolumeGet - PUBLIC cmfe_Field_ParameterSetDataGet,cmfe_Field_ParameterSetDataRestore + PUBLIC cmfe_Field_LabelGet,cmfe_Field_LabelSet - PUBLIC cmfe_Field_ParameterSetGetConstant,cmfe_Field_ParameterSetGetElement,cmfe_Field_ParameterSetGetNode + PUBLIC cmfe_Field_MeshDecompositionGet,cmfe_Field_MeshDecompositionSet - PUBLIC cmfe_Field_ParameterSetGetDataPoint,cmfe_Field_ParameterSetUpdateDataPoint + PUBLIC cmfe_Field_DataProjectionSet - PUBLIC cmfe_Field_ParameterSetUpdateConstant,cmfe_Field_ParameterSetUpdateElement,cmfe_Field_ParameterSetUpdateNode + PUBLIC cmfe_Field_PositionNormalTangentCalculateNode - PUBLIC cmfe_Field_ParameterSetNodeScaleFactorGet,cmfe_Field_ParameterSetNodeScaleFactorSet + PUBLIC cmfe_Field_NumberOfComponentsGet,cmfe_Field_NumberOfComponentsSet - PUBLIC cmfe_Field_ParameterSetNodeScaleFactorsGet,cmfe_Field_ParameterSetNodeScaleFactorsSet + PUBLIC cmfe_Field_NumberOfVariablesGet,cmfe_Field_NumberOfVariablesSet - PUBLIC cmfe_Field_ParameterSetNodeNumberOfScaleFactorDofsGet + PUBLIC cmfe_Field_ParameterSetAddConstant,cmfe_Field_ParameterSetAddElement,cmfe_Field_ParameterSetAddGaussPoint, & + & cmfe_Field_ParameterSetAddNode - PUBLIC cmfe_Field_ParameterSetUpdateLocalDofs + PUBLIC cmfe_Field_ParameterSetCreate - PUBLIC cmfe_Field_ParameterSetUpdateGaussPoint,cmfe_Field_ParameterSetGetGaussPoint + PUBLIC cmfe_Field_ParameterSetDestroy - PUBLIC cmfe_Field_ParameterSetInterpolateXi + PUBLIC cmfe_Field_ParameterSetDataGet,cmfe_Field_ParameterSetDataRestore - PUBLIC cmfe_Field_ParameterSetInterpolateGauss + PUBLIC cmfe_Field_ParameterSetGetConstant,cmfe_Field_ParameterSetGetElement,cmfe_Field_ParameterSetGetNode - PUBLIC cmfe_Field_ParameterSetUpdateElementDataPoint + PUBLIC cmfe_Field_ParameterSetGetDataPoint,cmfe_Field_ParameterSetUpdateDataPoint - PUBLIC cmfe_Field_ParameterSetUpdateFinish,cmfe_Field_ParameterSetUpdateStart + PUBLIC cmfe_Field_ParameterSetUpdateConstant,cmfe_Field_ParameterSetUpdateElement,cmfe_Field_ParameterSetUpdateNode - PUBLIC cmfe_Field_ParametersToFieldParametersComponentCopy + PUBLIC cmfe_Field_ParameterSetNodeScaleFactorGet,cmfe_Field_ParameterSetNodeScaleFactorSet - PUBLIC cmfe_Field_ScalingTypeGet,cmfe_Field_ScalingTypeSet + PUBLIC cmfe_Field_ParameterSetNodeScaleFactorsGet,cmfe_Field_ParameterSetNodeScaleFactorsSet - PUBLIC cmfe_Field_TypeGet,cmfe_Field_TypeSet + PUBLIC cmfe_Field_ParameterSetNodeNumberOfScaleFactorDofsGet - PUBLIC cmfe_Field_VariableLabelGet,cmfe_Field_VariableLabelSet + PUBLIC cmfe_Field_ParameterSetUpdateLocalDofs - PUBLIC cmfe_Field_VariableTypesGet,cmfe_Field_VariableTypesSet + PUBLIC cmfe_Field_ParameterSetUpdateGaussPoint,cmfe_Field_ParameterSetGetGaussPoint -!!================================================================================================================================== -!! -!! FIELD_IO_ROUTINES -!! -!!================================================================================================================================== + PUBLIC cmfe_Field_ParameterSetInterpolateXi - !Module parameters + PUBLIC cmfe_Field_ParameterSetInterpolateGauss - !Module types + PUBLIC cmfe_Field_ParameterSetUpdateElementDataPoint - !Module variables + PUBLIC cmfe_Field_ParameterSetUpdateFinish,cmfe_Field_ParameterSetUpdateStart - !Interfaces + PUBLIC cmfe_Field_ParametersToFieldParametersComponentCopy - INTERFACE cmfe_Fields_ElementsExport - MODULE PROCEDURE cmfe_Fields_ElementsExportCCObj - MODULE PROCEDURE cmfe_Fields_ElementsExportVSCObj - MODULE PROCEDURE cmfe_Fields_ElementsExportCVSObj - MODULE PROCEDURE cmfe_Fields_ElementsExportVSVSObj - END INTERFACE cmfe_Fields_ElementsExport + PUBLIC cmfe_Field_ScalingTypeGet,cmfe_Field_ScalingTypeSet - INTERFACE cmfe_Fields_NodesExport - MODULE PROCEDURE cmfe_Fields_NodesExportCCObj - MODULE PROCEDURE cmfe_Fields_NodesExportVSCObj - MODULE PROCEDURE cmfe_Fields_NodesExportCVSObj - MODULE PROCEDURE cmfe_Fields_NodesExportVSVSObj - END INTERFACE cmfe_Fields_NodesExport + PUBLIC cmfe_Field_TypeGet,cmfe_Field_TypeSet - PUBLIC cmfe_Fields_ElementsExport,cmfe_Fields_NodesExport + PUBLIC cmfe_Field_VariableLabelGet,cmfe_Field_VariableLabelSet -!!================================================================================================================================== -!! -!! GENERATED_MESH_ROUTINES -!! -!!================================================================================================================================== + PUBLIC cmfe_Field_VariableTypesGet,cmfe_Field_VariableTypesSet - !Module parameters +!================================================================================================================================== +! +! FIELD_IO_ROUTINES +! +!================================================================================================================================== - !> \addtogroup OpenCMISS_GeneratedMeshConstants OpenCMISS::Iron::GeneratedMesh::Constants - !> \brief Generated mesh constants. - !>@{ - !> \addtogroup OpenCMISS_GeneratedMeshTypes OpenCMISS::Iron::GeneratedMesh::Types - !> \brief Generated mesh types. - !> \see OpenCMISS::Iron::GeneratedMesh,OpenCMISS - !>@{ - INTEGER(INTG), PARAMETER :: CMFE_GENERATED_MESH_REGULAR_MESH_TYPE = GENERATED_MESH_REGULAR_MESH_TYPE !@} - !>@} - - !> \addtogroup OpenCMISS_GeneratedMeshConstants OpenCMISS::Iron::GeneratedMesh::Constants - !> \brief Generated mesh constants. - !>@{ - !> \addtogroup OpenCMISS_GeneratedMeshSurfaceTypes OpenCMISS::Iron::GeneratedMesh::SurfaceTypes - !> \brief Generated mesh surface types. - !> \see OpenCMISS::Iron::GeneratedMesh,OpenCMISS - !>@{ - INTEGER(INTG), PARAMETER :: CMFE_GENERATED_MESH_CYLINDER_INNER_SURFACE = GENERATED_MESH_CYLINDER_INNER_SURFACE !@} - !>@} - - !Module types - - !Module variables - - !Interfaces - - !>Returns the basis for a generated mesh. - INTERFACE cmfe_GeneratedMesh_BasisGet - MODULE PROCEDURE cmfe_GeneratedMesh_BasisGetNumber - MODULE PROCEDURE cmfe_GeneratedMesh_BasisGetObj - END INTERFACE cmfe_GeneratedMesh_BasisGet - - !>Sets/changes the basis for a generated mesh. - INTERFACE cmfe_GeneratedMesh_BasisSet - MODULE PROCEDURE cmfe_GeneratedMesh_BasisSetNumber0 - MODULE PROCEDURE cmfe_GeneratedMesh_BasisSetNumber1 - MODULE PROCEDURE cmfe_GeneratedMesh_BasisSetObj0 - MODULE PROCEDURE cmfe_GeneratedMesh_BasisSetObj1 - END INTERFACE cmfe_GeneratedMesh_BasisSet - - !>Sets/changes the base vectors for a generated mesh. - INTERFACE cmfe_GeneratedMesh_BaseVectorsSet - MODULE PROCEDURE cmfe_GeneratedMesh_BaseVectorsSetNumber - MODULE PROCEDURE cmfe_GeneratedMesh_BaseVectorsSetObj - END INTERFACE cmfe_GeneratedMesh_BaseVectorsSet - - !>Finishes the creation of a generated mesh. \see OpenCMISS::Iron::cmfe_GeneratedMesh_CreateStart - INTERFACE cmfe_GeneratedMesh_CreateFinish - MODULE PROCEDURE cmfe_GeneratedMesh_CreateFinishNumber - MODULE PROCEDURE cmfe_GeneratedMesh_CreateFinishObj - END INTERFACE cmfe_GeneratedMesh_CreateFinish - - !>Starts the creation of a generated mesh. \see OpenCMISS::Iron::cmfe_GeneratedMesh_CreateFinish - INTERFACE cmfe_GeneratedMesh_CreateStart - MODULE PROCEDURE cmfe_GeneratedMesh_CreateStartNumber - MODULE PROCEDURE cmfe_GeneratedMesh_CreateStartInterfaceObj - MODULE PROCEDURE cmfe_GeneratedMesh_CreateStartRegionObj - END INTERFACE cmfe_GeneratedMesh_CreateStart - - !>Destroys a generated mesh. - INTERFACE cmfe_GeneratedMesh_Destroy - MODULE PROCEDURE cmfe_GeneratedMesh_DestroyNumber - MODULE PROCEDURE cmfe_GeneratedMesh_DestroyObj - END INTERFACE cmfe_GeneratedMesh_Destroy - - !>Returns the extent of a generated mesh. - INTERFACE cmfe_GeneratedMesh_ExtentGet - MODULE PROCEDURE cmfe_GeneratedMesh_ExtentGetNumber - MODULE PROCEDURE cmfe_GeneratedMesh_ExtentGetObj - END INTERFACE cmfe_GeneratedMesh_ExtentGet - - !>Sets/changes the extent of a generated mesh. - INTERFACE cmfe_GeneratedMesh_ExtentSet - MODULE PROCEDURE cmfe_GeneratedMesh_ExtentSetNumber - MODULE PROCEDURE cmfe_GeneratedMesh_ExtentSetObj - END INTERFACE cmfe_GeneratedMesh_ExtentSet - - !>Returns the number of elements in a generated mesh. - INTERFACE cmfe_GeneratedMesh_NumberOfElementsGet - MODULE PROCEDURE cmfe_GeneratedMesh_NumberOfElementsGetNumber - MODULE PROCEDURE cmfe_GeneratedMesh_NumberOfElementsGetObj - END INTERFACE cmfe_GeneratedMesh_NumberOfElementsGet - - !>Sets/changes the number of elements in a generated mesh. - INTERFACE cmfe_GeneratedMesh_NumberOfElementsSet - MODULE PROCEDURE cmfe_GeneratedMesh_NumberOfElementsSetNumber - MODULE PROCEDURE cmfe_GeneratedMesh_NumberOfElementsSetObj - END INTERFACE cmfe_GeneratedMesh_NumberOfElementsSet - - !>Returns the origin of a generated mesh. - INTERFACE cmfe_GeneratedMesh_OriginGet - MODULE PROCEDURE cmfe_GeneratedMesh_OriginGetNumber - MODULE PROCEDURE cmfe_GeneratedMesh_OriginGetObj - END INTERFACE cmfe_GeneratedMesh_OriginGet - - !>Sets/changes the origin of a generated mesh. - INTERFACE cmfe_GeneratedMesh_OriginSet - MODULE PROCEDURE cmfe_GeneratedMesh_OriginSetNumber - MODULE PROCEDURE cmfe_GeneratedMesh_OriginSetObj - END INTERFACE cmfe_GeneratedMesh_OriginSet - - !>Returns the type of a generated mesh. - INTERFACE cmfe_GeneratedMesh_TypeGet - MODULE PROCEDURE cmfe_GeneratedMesh_TypeGetNumber - MODULE PROCEDURE cmfe_GeneratedMesh_TypeGetObj - END INTERFACE cmfe_GeneratedMesh_TypeGet - - !>Sets/changes the type of a generated mesh. - INTERFACE cmfe_GeneratedMesh_TypeSet - MODULE PROCEDURE cmfe_GeneratedMesh_TypeSetNumber - MODULE PROCEDURE cmfe_GeneratedMesh_TypeSetObj - END INTERFACE cmfe_GeneratedMesh_TypeSet - - !>Calculates and sets the geometric field parameters for a generated mesh - INTERFACE cmfe_GeneratedMesh_GeometricParametersCalculate - MODULE PROCEDURE cmfe_GeneratedMesh_GeometricParametersCalculateNumber - MODULE PROCEDURE cmfe_GeneratedMesh_GeometricParametersCalculateObj - END INTERFACE cmfe_GeneratedMesh_GeometricParametersCalculate - - !>Returns a list of nodes belonging to a surface of given type - INTERFACE cmfe_GeneratedMesh_SurfaceGet - MODULE PROCEDURE cmfe_GeneratedMesh_SurfaceGetNumber0 - MODULE PROCEDURE cmfe_GeneratedMesh_SurfaceGetNumber1 - MODULE PROCEDURE cmfe_GeneratedMesh_SurfaceGetObj0 - MODULE PROCEDURE cmfe_GeneratedMesh_SurfaceGetObj1 - END INTERFACE + !Module parameters + !Module types - !>Creates an embedding of one mesh in another - INTERFACE cmfe_MeshEmbedding_Create - MODULE PROCEDURE cmfe_MeshEmbedding_CreateNumber - MODULE PROCEDURE cmfe_MeshEmbedding_CreateObj - END INTERFACE + !Module variables - !>Sets the embedded nodes for one parent element - INTERFACE cmfe_MeshEmbedding_SetChildNodePosition - MODULE PROCEDURE cmfe_MeshEmbedding_SetChildNodePositionObj - END INTERFACE + !Interfaces + INTERFACE cmfe_Fields_ElementsExport + MODULE PROCEDURE cmfe_Fields_ElementsExportCCObj + MODULE PROCEDURE cmfe_Fields_ElementsExportVSCObj + MODULE PROCEDURE cmfe_Fields_ElementsExportCVSObj + MODULE PROCEDURE cmfe_Fields_ElementsExportVSVSObj + END INTERFACE cmfe_Fields_ElementsExport - !>Pushes data from the parent field to the child field - INTERFACE cmfe_MeshEmbedding_PushData - MODULE PROCEDURE cmfe_MeshEmbedding_PushDataObj - END INTERFACE + INTERFACE cmfe_Fields_NodesExport + MODULE PROCEDURE cmfe_Fields_NodesExportCCObj + MODULE PROCEDURE cmfe_Fields_NodesExportVSCObj + MODULE PROCEDURE cmfe_Fields_NodesExportCVSObj + MODULE PROCEDURE cmfe_Fields_NodesExportVSVSObj + END INTERFACE cmfe_Fields_NodesExport - INTERFACE cmfe_MeshEmbedding_SetGaussPointData - MODULE PROCEDURE cmfe_MeshEmbedding_SetGaussPointDataObj - END INTERFACE + PUBLIC cmfe_Fields_ElementsExport,cmfe_Fields_NodesExport - INTERFACE cmfe_MeshEmbedding_PullGaussPointData - MODULE PROCEDURE cmfe_MeshEmbedding_PullGaussPointDataObj +!================================================================================================================================== +! +! GENERATED_MESH_ROUTINES +! +!================================================================================================================================== + + !Module parameters + + !> \addtogroup OpenCMISS_GeneratedMeshConstants OpenCMISS::Iron::GeneratedMesh::Constants + !> \brief Generated mesh constants. + !>@{ + !> \addtogroup OpenCMISS_GeneratedMeshTypes OpenCMISS::Iron::GeneratedMesh::Types + !> \brief Generated mesh types. + !> \see OpenCMISS::Iron::GeneratedMesh,OpenCMISS + !>@{ + INTEGER(INTG), PARAMETER :: CMFE_GENERATED_MESH_REGULAR_MESH_TYPE = GENERATED_MESH_REGULAR_MESH_TYPE !@} + !>@} + + !> \addtogroup OpenCMISS_GeneratedMeshConstants OpenCMISS::Iron::GeneratedMesh::Constants + !> \brief Generated mesh constants. + !>@{ + !> \addtogroup OpenCMISS_GeneratedMeshSurfaceTypes OpenCMISS::Iron::GeneratedMesh::SurfaceTypes + !> \brief Generated mesh surface types. + !> \see OpenCMISS::Iron::GeneratedMesh,OpenCMISS + !>@{ + INTEGER(INTG), PARAMETER :: CMFE_GENERATED_MESH_CYLINDER_INNER_SURFACE = GENERATED_MESH_CYLINDER_INNER_SURFACE !@} + !>@} + + !Module types + + !Module variables + + !Interfaces + + !>Returns the basis for a generated mesh. + INTERFACE cmfe_GeneratedMesh_BasisGet + MODULE PROCEDURE cmfe_GeneratedMesh_BasisGetNumber + MODULE PROCEDURE cmfe_GeneratedMesh_BasisGetObj + END INTERFACE cmfe_GeneratedMesh_BasisGet + + !>Sets/changes the basis for a generated mesh. + INTERFACE cmfe_GeneratedMesh_BasisSet + MODULE PROCEDURE cmfe_GeneratedMesh_BasisSetNumber0 + MODULE PROCEDURE cmfe_GeneratedMesh_BasisSetNumber1 + MODULE PROCEDURE cmfe_GeneratedMesh_BasisSetObj0 + MODULE PROCEDURE cmfe_GeneratedMesh_BasisSetObj1 + END INTERFACE cmfe_GeneratedMesh_BasisSet + + !>Sets/changes the base vectors for a generated mesh. + INTERFACE cmfe_GeneratedMesh_BaseVectorsSet + MODULE PROCEDURE cmfe_GeneratedMesh_BaseVectorsSetNumber + MODULE PROCEDURE cmfe_GeneratedMesh_BaseVectorsSetObj + END INTERFACE cmfe_GeneratedMesh_BaseVectorsSet + + !>Finishes the creation of a generated mesh. \see OpenCMISS::Iron::cmfe_GeneratedMesh_CreateStart + INTERFACE cmfe_GeneratedMesh_CreateFinish + MODULE PROCEDURE cmfe_GeneratedMesh_CreateFinishNumber + MODULE PROCEDURE cmfe_GeneratedMesh_CreateFinishObj + END INTERFACE cmfe_GeneratedMesh_CreateFinish + + !>Starts the creation of a generated mesh. \see OpenCMISS::Iron::cmfe_GeneratedMesh_CreateFinish + INTERFACE cmfe_GeneratedMesh_CreateStart + MODULE PROCEDURE cmfe_GeneratedMesh_CreateStartNumber + MODULE PROCEDURE cmfe_GeneratedMesh_CreateStartInterfaceObj + MODULE PROCEDURE cmfe_GeneratedMesh_CreateStartRegionObj + END INTERFACE cmfe_GeneratedMesh_CreateStart + + !>Destroys a generated mesh. + INTERFACE cmfe_GeneratedMesh_Destroy + MODULE PROCEDURE cmfe_GeneratedMesh_DestroyNumber + MODULE PROCEDURE cmfe_GeneratedMesh_DestroyObj + END INTERFACE cmfe_GeneratedMesh_Destroy + + !>Returns the extent of a generated mesh. + INTERFACE cmfe_GeneratedMesh_ExtentGet + MODULE PROCEDURE cmfe_GeneratedMesh_ExtentGetNumber + MODULE PROCEDURE cmfe_GeneratedMesh_ExtentGetObj + END INTERFACE cmfe_GeneratedMesh_ExtentGet + + !>Sets/changes the extent of a generated mesh. + INTERFACE cmfe_GeneratedMesh_ExtentSet + MODULE PROCEDURE cmfe_GeneratedMesh_ExtentSetNumber + MODULE PROCEDURE cmfe_GeneratedMesh_ExtentSetObj + END INTERFACE cmfe_GeneratedMesh_ExtentSet + + !>Returns the number of elements in a generated mesh. + INTERFACE cmfe_GeneratedMesh_NumberOfElementsGet + MODULE PROCEDURE cmfe_GeneratedMesh_NumberOfElementsGetNumber + MODULE PROCEDURE cmfe_GeneratedMesh_NumberOfElementsGetObj + END INTERFACE cmfe_GeneratedMesh_NumberOfElementsGet + + !>Sets/changes the number of elements in a generated mesh. + INTERFACE cmfe_GeneratedMesh_NumberOfElementsSet + MODULE PROCEDURE cmfe_GeneratedMesh_NumberOfElementsSetNumber + MODULE PROCEDURE cmfe_GeneratedMesh_NumberOfElementsSetObj + END INTERFACE cmfe_GeneratedMesh_NumberOfElementsSet + + !>Returns the origin of a generated mesh. + INTERFACE cmfe_GeneratedMesh_OriginGet + MODULE PROCEDURE cmfe_GeneratedMesh_OriginGetNumber + MODULE PROCEDURE cmfe_GeneratedMesh_OriginGetObj + END INTERFACE cmfe_GeneratedMesh_OriginGet + + !>Sets/changes the origin of a generated mesh. + INTERFACE cmfe_GeneratedMesh_OriginSet + MODULE PROCEDURE cmfe_GeneratedMesh_OriginSetNumber + MODULE PROCEDURE cmfe_GeneratedMesh_OriginSetObj + END INTERFACE cmfe_GeneratedMesh_OriginSet + + !>Returns the type of a generated mesh. + INTERFACE cmfe_GeneratedMesh_TypeGet + MODULE PROCEDURE cmfe_GeneratedMesh_TypeGetNumber + MODULE PROCEDURE cmfe_GeneratedMesh_TypeGetObj + END INTERFACE cmfe_GeneratedMesh_TypeGet + + !>Sets/changes the type of a generated mesh. + INTERFACE cmfe_GeneratedMesh_TypeSet + MODULE PROCEDURE cmfe_GeneratedMesh_TypeSetNumber + MODULE PROCEDURE cmfe_GeneratedMesh_TypeSetObj + END INTERFACE cmfe_GeneratedMesh_TypeSet + + !>Calculates and sets the geometric field parameters for a generated mesh + INTERFACE cmfe_GeneratedMesh_GeometricParametersCalculate + MODULE PROCEDURE cmfe_GeneratedMesh_GeometricParametersCalculateNumber + MODULE PROCEDURE cmfe_GeneratedMesh_GeometricParametersCalculateObj + END INTERFACE cmfe_GeneratedMesh_GeometricParametersCalculate + + !>Returns a list of nodes belonging to a surface of given type + INTERFACE cmfe_GeneratedMesh_SurfaceGet + MODULE PROCEDURE cmfe_GeneratedMesh_SurfaceGetNumber0 + MODULE PROCEDURE cmfe_GeneratedMesh_SurfaceGetNumber1 + MODULE PROCEDURE cmfe_GeneratedMesh_SurfaceGetObj0 + MODULE PROCEDURE cmfe_GeneratedMesh_SurfaceGetObj1 + END INTERFACE + + + !>Creates an embedding of one mesh in another + INTERFACE cmfe_MeshEmbedding_Create + MODULE PROCEDURE cmfe_MeshEmbedding_CreateNumber + MODULE PROCEDURE cmfe_MeshEmbedding_CreateObj + END INTERFACE + + !>Sets the embedded nodes for one parent element + INTERFACE cmfe_MeshEmbedding_SetChildNodePosition + MODULE PROCEDURE cmfe_MeshEmbedding_SetChildNodePositionObj + END INTERFACE + + + !>Pushes data from the parent field to the child field + INTERFACE cmfe_MeshEmbedding_PushData + MODULE PROCEDURE cmfe_MeshEmbedding_PushDataObj + END INTERFACE + + INTERFACE cmfe_MeshEmbedding_SetGaussPointData + MODULE PROCEDURE cmfe_MeshEmbedding_SetGaussPointDataObj + END INTERFACE + + INTERFACE cmfe_MeshEmbedding_PullGaussPointData + MODULE PROCEDURE cmfe_MeshEmbedding_PullGaussPointDataObj + END INTERFACE + + INTERFACE cmfe_MeshEmbedding_GetGaussPointCoord + MODULE PROCEDURE cmfe_Field_ParameterSetGetGaussPointCoordObj END INTERFACE - INTERFACE cmfe_MeshEmbedding_GetGaussPointCoord - MODULE PROCEDURE cmfe_Field_ParameterSetGetGaussPointCoordObj - END INTERFACE - - PUBLIC cmfe_MeshEmbedding_Create,cmfe_MeshEmbedding_SetChildNodePosition, cmfe_MeshEmbeddingType - - PUBLIC cmfe_MeshEmbedding_Initialise,cmfe_MeshEmbedding_SetGaussPointData - - PUBLIC cmfe_MeshEmbedding_PushData,cmfe_MeshEmbedding_PullGaussPointData - - PUBLIC cmfe_MeshEmbedding_GetGaussPointCoord - - PUBLIC CMFE_GENERATED_MESH_REGULAR_MESH_TYPE,CMFE_GENERATED_MESH_POLAR_MESH_TYPE,CMFE_GENERATED_MESH_FRACTAL_TREE_MESH_TYPE - - PUBLIC CMFE_GENERATED_MESH_CYLINDER_MESH_TYPE, CMFE_GENERATED_MESH_ELLIPSOID_MESH_TYPE - - PUBLIC CMFE_GENERATED_MESH_CYLINDER_INNER_SURFACE,CMFE_GENERATED_MESH_CYLINDER_OUTER_SURFACE - - PUBLIC CMFE_GENERATED_MESH_CYLINDER_TOP_SURFACE, CMFE_GENERATED_MESH_CYLINDER_BOTTOM_SURFACE - - PUBLIC CMFE_GENERATED_MESH_ELLIPSOID_INNER_SURFACE, CMFE_GENERATED_MESH_ELLIPSOID_OUTER_SURFACE - - PUBLIC CMFE_GENERATED_MESH_ELLIPSOID_TOP_SURFACE - - PUBLIC CMFE_GENERATED_MESH_REGULAR_LEFT_SURFACE, CMFE_GENERATED_MESH_REGULAR_RIGHT_SURFACE, & - & CMFE_GENERATED_MESH_REGULAR_TOP_SURFACE - - PUBLIC CMFE_GENERATED_MESH_REGULAR_BOTTOM_SURFACE, CMFE_GENERATED_MESH_REGULAR_FRONT_SURFACE, & - & CMFE_GENERATED_MESH_REGULAR_BACK_SURFACE - - PUBLIC cmfe_GeneratedMesh_BasisGet,cmfe_GeneratedMesh_BasisSet - - PUBLIC cmfe_GeneratedMesh_BaseVectorsSet - - PUBLIC cmfe_GeneratedMesh_CreateFinish,cmfe_GeneratedMesh_CreateStart - - PUBLIC cmfe_GeneratedMesh_Destroy - - PUBLIC cmfe_GeneratedMesh_ExtentGet,cmfe_GeneratedMesh_ExtentSet - - PUBLIC cmfe_GeneratedMesh_NumberOfElementsGet,cmfe_GeneratedMesh_NumberOfElementsSet - - PUBLIC cmfe_GeneratedMesh_OriginGet,cmfe_GeneratedMesh_OriginSet - - PUBLIC cmfe_GeneratedMesh_TypeGet,cmfe_GeneratedMesh_TypeSet - - PUBLIC cmfe_GeneratedMesh_GeometricParametersCalculate - - PUBLIC cmfe_GeneratedMesh_SurfaceGet - - -!!================================================================================================================================== -!! -!! INTERFACE_ROUTINES -!! -!!================================================================================================================================== - - !Module parameters - - !Module types - - !Module variables - - !Interfaces - - !>Adds a mesh to an interface. - INTERFACE cmfe_Interface_MeshAdd - MODULE PROCEDURE cmfe_Interface_MeshAddNumber - MODULE PROCEDURE cmfe_Interface_MeshAddObj - END INTERFACE cmfe_Interface_MeshAdd - - !>Finishes the creation of an interface. \see OpenCMISS::Iron::cmfe_Interface_CreateStart - INTERFACE cmfe_Interface_CreateFinish - MODULE PROCEDURE cmfe_Interface_CreateFinishNumber - MODULE PROCEDURE cmfe_Interface_CreateFinishObj - END INTERFACE cmfe_Interface_CreateFinish - - !>Starts the creation of an interface. \see OpenCMISS::Iron::cmfe_Interface_CreateFinish - INTERFACE cmfe_Interface_CreateStart - MODULE PROCEDURE cmfe_Interface_CreateStartNumber - MODULE PROCEDURE cmfe_Interface_CreateStartObj - END INTERFACE cmfe_Interface_CreateStart - - !>Set the coordinate system of an inteface - INTERFACE cmfe_Interface_CoordinateSystemSet - MODULE PROCEDURE cmfe_Interface_CoordinateSystemSetNumber - MODULE PROCEDURE cmfe_Interface_CoordinateSystemSetObj - END INTERFACE cmfe_Interface_CoordinateSystemSet - - !>Get the coordinate system of an inteface - INTERFACE cmfe_Interface_CoordinateSystemGet - MODULE PROCEDURE cmfe_Interface_CoordinateSystemGetNumber - MODULE PROCEDURE cmfe_Interface_CoordinateSystemGetObj - END INTERFACE cmfe_Interface_CoordinateSystemGet - - !>Destroys an interface. - INTERFACE cmfe_Interface_Destroy - MODULE PROCEDURE cmfe_Interface_DestroyNumber - MODULE PROCEDURE cmfe_Interface_DestroyObj - END INTERFACE cmfe_Interface_Destroy - - !>Returns the label of an interface. - INTERFACE cmfe_Interface_LabelGet - MODULE PROCEDURE cmfe_Interface_LabelGetCNumber - MODULE PROCEDURE cmfe_Interface_LabelGetCObj - MODULE PROCEDURE cmfe_Interface_LabelGetVSNumber - MODULE PROCEDURE cmfe_Interface_LabelGetVSObj - END INTERFACE cmfe_Interface_LabelGet - - !>Sets/changes the label of an interface. - INTERFACE cmfe_Interface_LabelSet - MODULE PROCEDURE cmfe_Interface_LabelSetCNumber - MODULE PROCEDURE cmfe_Interface_LabelSetCObj - MODULE PROCEDURE cmfe_Interface_LabelSetVSNumber - MODULE PROCEDURE cmfe_Interface_LabelSetVSObj - END INTERFACE cmfe_Interface_LabelSet - - !>Returns the nodes for a interface. - INTERFACE cmfe_Interface_NodesGet - MODULE PROCEDURE cmfe_Interface_NodesGetObj - END INTERFACE cmfe_Interface_NodesGet - - !>Finishes the creation of an interface meshes connectivity. \see OpenCMISS::Iron::cmfe_InterfaceMeshConnectivity_CreateStart - INTERFACE cmfe_InterfaceMeshConnectivity_CreateFinish - MODULE PROCEDURE cmfe_InterfaceMeshConnectivity_CreateFinishNumber - MODULE PROCEDURE cmfe_InterfaceMeshConnectivity_CreateFinishObj - END INTERFACE cmfe_InterfaceMeshConnectivity_CreateFinish - - !>Starts the creation of an interface meshes connectivity. - INTERFACE cmfe_InterfaceMeshConnectivity_CreateStart - MODULE PROCEDURE cmfe_InterfaceMeshConnectivity_CreateStartNumber - MODULE PROCEDURE cmfe_InterfaceMeshConnectivity_CreateStartObj - END INTERFACE cmfe_InterfaceMeshConnectivity_CreateStart - - !>Sets the element xi values for the mesh connectivity between an element in the interface mesh and an element in a region mesh - INTERFACE cmfe_InterfaceMeshConnectivity_ElementXiSet - MODULE PROCEDURE cmfe_InterfaceMeshConnectivity_ElementXiSetNumber - MODULE PROCEDURE cmfe_InterfaceMeshConnectivity_ElementXiSetObj - END INTERFACE cmfe_InterfaceMeshConnectivity_ElementXiSet - - !>Sets the number of elements coupled through a given interface mesh element - INTERFACE cmfe_InterfaceMeshConnectivity_ElementNumberSet - MODULE PROCEDURE cmfe_InterfaceMeshConnectivity_ElementNumberSetNumber - MODULE PROCEDURE cmfe_InterfaceMeshConnectivity_ElementNumberSetObj - END INTERFACE cmfe_InterfaceMeshConnectivity_ElementNumberSet - - !>Sets the coupled node numbers - INTERFACE cmfe_InterfaceMeshConnectivity_NodeNumberSet - MODULE PROCEDURE cmfe_InterfaceMeshConnectivity_NodeNumberSetNumber - MODULE PROCEDURE cmfe_InterfaceMeshConnectivity_NodeNumberSetObj - END INTERFACE cmfe_InterfaceMeshConnectivity_NodeNumberSet - - !>Sets the number of elements coupled through a given interface mesh element - INTERFACE cmfe_InterfaceMeshConnectivity_BasisSet - MODULE PROCEDURE cmfe_InterfaceMeshConnectivity_BasisSetNumber - MODULE PROCEDURE cmfe_InterfaceMeshConnectivity_BasisSetObj - END INTERFACE cmfe_InterfaceMeshConnectivity_BasisSet - - !>Destroys an interface meshes connectivity. - INTERFACE cmfe_InterfaceMeshConnectivity_Destroy - MODULE PROCEDURE cmfe_InterfaceMeshConnectivity_DestroyNumber - MODULE PROCEDURE cmfe_InterfaceMeshConnectivity_DestroyObj - END INTERFACE cmfe_InterfaceMeshConnectivity_Destroy - - !>Finishes the creation of an interface points connectivity. - INTERFACE cmfe_InterfacePointsConnectivity_CreateFinish - MODULE PROCEDURE cmfe_InterfacePointsConnectivity_CreateFinishNumber - MODULE PROCEDURE cmfe_InterfacePointsConnectivity_CreateFinishObj - END INTERFACE cmfe_InterfacePointsConnectivity_CreateFinish - - !>Starts the creation of an interface points connectivity. - INTERFACE cmfe_InterfacePointsConnectivity_CreateStart - MODULE PROCEDURE cmfe_InterfacePointsConnectivity_CreateStartNumber - MODULE PROCEDURE cmfe_InterfacePointsConnectivity_CreateStartObj - END INTERFACE cmfe_InterfacePointsConnectivity_CreateStart - - !>Destroys an interface points connectivity. - INTERFACE cmfe_InterfacePointsConnectivity_Destroy - MODULE PROCEDURE cmfe_InterfacePointsConnectivity_DestroyNumber - MODULE PROCEDURE cmfe_InterfacePointsConnectivity_DestroyObj - END INTERFACE cmfe_InterfacePointsConnectivity_Destroy - - !>Get the coupled mesh element number that defines points connectivity - INTERFACE cmfe_InterfacePointsConnectivity_ElementNumberGet - MODULE PROCEDURE cmfe_InterfacePointsConnectivity_ElementNumberGetNumber - MODULE PROCEDURE cmfe_InterfacePointsConnectivity_ElementNumberGetObj - END INTERFACE cmfe_InterfacePointsConnectivity_ElementNumberGet - - !>Gets the element xi values for the points connectivity between a data point in the interface mesh and an element in a region mesh - INTERFACE cmfe_InterfacePointsConnectivity_PointXiGet - MODULE PROCEDURE cmfe_InterfacePointsConnectivity_PointXiGetNumber - MODULE PROCEDURE cmfe_InterfacePointsConnectivity_PointXiGetObj - END INTERFACE cmfe_InterfacePointsConnectivity_PointXiGet - - !>Sets the coupled mesh element number that defines points connectivity - INTERFACE cmfe_InterfacePointsConnectivity_ElementNumberSet - MODULE PROCEDURE cmfe_InterfacePointsConnectivity_ElementNumberSetNumber - MODULE PROCEDURE cmfe_InterfacePointsConnectivity_ElementNumberSetObj - END INTERFACE cmfe_InterfacePointsConnectivity_ElementNumberSet - - !>Sets the element xi values for the points connectivity between a data point in the interface mesh and an element in a region mesh - INTERFACE cmfe_InterfacePointsConnectivity_PointXiSet - MODULE PROCEDURE cmfe_InterfacePointsConnectivity_PointXiSetNumber - MODULE PROCEDURE cmfe_InterfacePointsConnectivity_PointXiSetObj - END INTERFACE cmfe_InterfacePointsConnectivity_PointXiSet - - !>Update points connectivity information with projection results - INTERFACE cmfe_InterfacePointsConnectivity_UpdateFromProjection - MODULE PROCEDURE cmfe_InterfacePointsConnectivity_UpdateFromProjectionRNumber - MODULE PROCEDURE cmfe_InterfacePointsConnectivity_UpdateFromProjectionINumber - MODULE PROCEDURE cmfe_InterfacePointsConnectivity_UpdateFromProjectionObj - END INTERFACE cmfe_InterfacePointsConnectivity_UpdateFromProjection - - PUBLIC cmfe_Interface_MeshAdd - - PUBLIC cmfe_Interface_CreateFinish,cmfe_Interface_CreateStart - - PUBLIC cmfe_Interface_CoordinateSystemSet,cmfe_Interface_CoordinateSystemGet - - PUBLIC cmfe_Interface_Destroy - - PUBLIC cmfe_Interface_LabelGet,cmfe_Interface_LabelSet - - PUBLIC cmfe_Interface_NodesGet - - PUBLIC cmfe_InterfaceMeshConnectivity_CreateFinish,cmfe_InterfaceMeshConnectivity_CreateStart - - PUBLIC cmfe_InterfaceMeshConnectivity_Destroy,cmfe_InterfaceMeshConnectivity_BasisSet - - PUBLIC cmfe_InterfaceMeshConnectivity_ElementNumberSet,cmfe_InterfaceMeshConnectivity_ElementXiSet - - PUBLIC cmfe_InterfaceMeshConnectivity_NodeNumberSet - - PUBLIC cmfe_InterfacePointsConnectivity_CreateFinish,cmfe_InterfacePointsConnectivity_CreateStart - - PUBLIC cmfe_InterfacePointsConnectivity_Destroy - - PUBLIC cmfe_InterfacePointsConnectivity_ElementNumberGet,cmfe_InterfacePointsConnectivity_PointXiGet - - PUBLIC cmfe_InterfacePointsConnectivity_ElementNumberSet,cmfe_InterfacePointsConnectivity_PointXiSet - - PUBLIC cmfe_InterfacePointsConnectivity_UpdateFromProjection - -!!================================================================================================================================== -!! -!! INTERFACE_CONDITION_ROUTINES -!! -!!================================================================================================================================== - - !Module parameters - - !> \addtogroup OpenCMISS_InterfaceConditionConstants OpenCMISS::Iron::InterfaceConditions::Constants - !> \brief Interface conditions constants. - !>@{ - !> \addtogroup OpenCMISS_InterfaceConditionMethods OpenCMISS::Iron::InterfaceConditions::Methods - !> \brief Interface condition methods. - !> \see OpenCMISS::Iron::InterfaceConditions,OpenCMISS - !>@{ - INTEGER(INTG), PARAMETER :: CMFE_INTERFACE_CONDITION_LAGRANGE_MULTIPLIERS_METHOD = & - & INTERFACE_CONDITION_LAGRANGE_MULTIPLIERS_METHOD !@} - !> \addtogroup OpenCMISS_InterfaceConditionOperators OpenCMISS::Iron::InterfaceConditions::Operators - !> \brief Interface condition operator types. - !> \see OpenCMISS::Iron::InterfaceConditions,OpenCMISS - !>@{ - INTEGER(INTG), PARAMETER :: CMFE_INTERFACE_CONDITION_FIELD_CONTINUITY_OPERATOR = & - & INTERFACE_CONDITION_FIELD_CONTINUITY_OPERATOR !@} - !> \addtogroup OpenCMISS_InterfaceConditionOutputTypes OpenCMISS::Iron::InterfaceConditions::OutputTypes - !> \brief Interface conditions output types - !> \see OpenCMISS::Iron::InterfaceConditions,OpenCMISS - !>@{ - INTEGER(INTG), PARAMETER :: CMFE_INTERFACE_CONDITION_NO_OUTPUT = INTERFACE_CONDITION_NO_OUTPUT!@} - !> \addtogroup OpenCMISS_InterfaceConditionIntegrationTypes OpenCMISS::Iron::InterfaceConditions::IntegrationTypes - !> \brief Interface condition integration types. - !> \see OpenCMISS::Iron::InterfaceConditions,OpenCMISS - !>@{ - INTEGER(INTG), PARAMETER :: CMFE_INTERFACE_CONDITION_GAUSS_INTEGRATION=INTERFACE_CONDITION_GAUSS_INTEGRATION !@} - !>@} - - !Module types - - !Module variables - - !Interfaces - - !>Finishes the creation of an interface condition. \see OpenCMISS::Iron::cmfe_InterfaceCondition_CreateStart - INTERFACE cmfe_InterfaceCondition_CreateFinish - MODULE PROCEDURE cmfe_InterfaceCondition_CreateFinishNumber - MODULE PROCEDURE cmfe_InterfaceCondition_CreateFinishObj - END INTERFACE cmfe_InterfaceCondition_CreateFinish - - !>Starts the creation of an interface condition. \see OpenCMISS::Iron::cmfe_InterfaceCondition_CreateFinish - INTERFACE cmfe_InterfaceCondition_CreateStart - MODULE PROCEDURE cmfe_InterfaceCondition_CreateStartNumber - MODULE PROCEDURE cmfe_InterfaceCondition_CreateStartObj - END INTERFACE cmfe_InterfaceCondition_CreateStart - - !>Adds in a dependent variable to an interface condition. - INTERFACE cmfe_InterfaceCondition_DependentVariableAdd - MODULE PROCEDURE cmfe_InterfaceCondition_DependentVariableAddNumber - MODULE PROCEDURE cmfe_InterfaceCondition_DependentVariableAddObj - END INTERFACE cmfe_InterfaceCondition_DependentVariableAdd - - !>Destroys an interface condition. - INTERFACE cmfe_InterfaceCondition_Destroy - MODULE PROCEDURE cmfe_InterfaceCondition_DestroyNumber - MODULE PROCEDURE cmfe_InterfaceCondition_DestroyObj - END INTERFACE cmfe_InterfaceCondition_Destroy - - !>Finishes the creation of equations for an interface condition. \see OpenCMISS::Iron::cmfe_InterfaceCondition_EquationsCreateStart - INTERFACE cmfe_InterfaceCondition_EquationsCreateFinish - MODULE PROCEDURE cmfe_InterfaceCondition_EquationsCreateFinishNumber - MODULE PROCEDURE cmfe_InterfaceCondition_EquationsCreateFinishObj - END INTERFACE cmfe_InterfaceCondition_EquationsCreateFinish - - !>Starts the creation of equations for an interface condition. \see OpenCMISS::Iron::cmfe_InterfaceCondition_EquationsCreateFinish - INTERFACE cmfe_InterfaceCondition_EquationsCreateStart - MODULE PROCEDURE cmfe_InterfaceCondition_EquationsCreateStartNumber - MODULE PROCEDURE cmfe_InterfaceCondition_EquationsCreateStartObj - END INTERFACE cmfe_InterfaceCondition_EquationsCreateStart - - !>Destroys the interface equations for an interface condition. - INTERFACE cmfe_InterfaceCondition_EquationsDestroy - MODULE PROCEDURE cmfe_InterfaceCondition_EquationsDestroyNumber - MODULE PROCEDURE cmfe_InterfaceCondition_EquationsDestroyObj - END INTERFACE cmfe_InterfaceCondition_EquationsDestroy - - !>Returns the integration type for an interface condition. - INTERFACE cmfe_InterfaceCondition_IntegrationTypeGet - MODULE PROCEDURE cmfe_InterfaceCondition_IntegrationTypeGetNumber - MODULE PROCEDURE cmfe_InterfaceCondition_IntegrationTypeGetObj - END INTERFACE cmfe_InterfaceCondition_IntegrationTypeGet - - !>Sets/changes the integration type for an interface condition. - INTERFACE cmfe_InterfaceCondition_IntegrationTypeSet - MODULE PROCEDURE cmfe_InterfaceCondition_IntegrationTypeSetNumber - MODULE PROCEDURE cmfe_InterfaceCondition_IntegrationTypeSetObj - END INTERFACE cmfe_InterfaceCondition_IntegrationTypeSet - - !>Finishes the creation of a Lagrange multipliers field for an interface condition. \see OpenCMISS::Iron::cmfe_InterfaceCondition_LagrangeFieldCreateStart - INTERFACE cmfe_InterfaceCondition_LagrangeFieldCreateFinish - MODULE PROCEDURE cmfe_InterfaceCondition_LagrangeFieldCreateFinishNumber - MODULE PROCEDURE cmfe_InterfaceCondition_LagrangeFieldCreateFinishObj - END INTERFACE cmfe_InterfaceCondition_LagrangeFieldCreateFinish - - !>Starts the creation of a Lagrange multipliers field for an interface condition. \see OpenCMISS::Iron::cmfe_InterfaceCondition_LagrangeFieldCreateFinish - INTERFACE cmfe_InterfaceCondition_LagrangeFieldCreateStart - MODULE PROCEDURE cmfe_InterfaceCondition_LagrangeFieldCreateStartNumber - MODULE PROCEDURE cmfe_InterfaceCondition_LagrangeFieldCreateStartObj - END INTERFACE cmfe_InterfaceCondition_LagrangeFieldCreateStart - - !>Returns the label for an interface condition. - INTERFACE cmfe_InterfaceCondition_LabelGet - MODULE PROCEDURE cmfe_InterfaceCondition_LabelGetCNumber - MODULE PROCEDURE cmfe_InterfaceCondition_LabelGetCObj - MODULE PROCEDURE cmfe_InterfaceCondition_LabelGetVSNumber - MODULE PROCEDURE cmfe_InterfaceCondition_LabelGetVSObj - END INTERFACE cmfe_InterfaceCondition_LabelGet - - !>Sets/changes the label for an interface condition. - INTERFACE cmfe_InterfaceCondition_LabelSet - MODULE PROCEDURE cmfe_InterfaceCondition_LabelSetCNumber - MODULE PROCEDURE cmfe_InterfaceCondition_LabelSetCObj - MODULE PROCEDURE cmfe_InterfaceCondition_LabelSetVSNumber - MODULE PROCEDURE cmfe_InterfaceCondition_LabelSetVSObj - END INTERFACE cmfe_InterfaceCondition_LabelSet - - !>Gets the output type for an interface condition. - INTERFACE cmfe_InterfaceCondition_OutputTypeGet - MODULE PROCEDURE cmfe_InterfaceCondition_OutputTypeGetNumber - MODULE PROCEDURE cmfe_InterfaceCondition_OutputTypeGetObj - END INTERFACE cmfe_InterfaceCondition_OutputTypeGet - - !>Sets/changes the output type an equations set. - INTERFACE cmfe_InterfaceCondition_OutputTypeSet - MODULE PROCEDURE cmfe_InterfaceCondition_OutputTypeSetNumber - MODULE PROCEDURE cmfe_InterfaceCondition_OutputTypeSetObj - END INTERFACE cmfe_InterfaceCondition_OutputTypeSet - - !>Finishes the creation of a Penalty field for an interface condition. \see OpenCMISS::Iron::cmfe_InterfaceCondition_PenaltyFieldCreateStart - INTERFACE cmfe_InterfaceCondition_PenaltyFieldCreateFinish - MODULE PROCEDURE cmfe_InterfaceCondition_PenaltyFieldCreateFinishNumber - MODULE PROCEDURE cmfe_InterfaceCondition_PenaltyFieldCreateFinishObj - END INTERFACE cmfe_InterfaceCondition_PenaltyFieldCreateFinish - - !>Starts the creation of a Penalty field for an interface condition. \see OpenCMISS::Iron::cmfe_InterfaceCondition_PenaltyFieldCreateFinish - INTERFACE cmfe_InterfaceCondition_PenaltyFieldCreateStart - MODULE PROCEDURE cmfe_InterfaceCondition_PenaltyFieldCreateStartNumber - MODULE PROCEDURE cmfe_InterfaceCondition_PenaltyFieldCreateStartObj - END INTERFACE cmfe_InterfaceCondition_PenaltyFieldCreateStart - - !>Returns the method for an interface condition. - INTERFACE cmfe_InterfaceCondition_MethodGet - MODULE PROCEDURE cmfe_InterfaceCondition_MethodGetNumber - MODULE PROCEDURE cmfe_InterfaceCondition_MethodGetObj - END INTERFACE cmfe_InterfaceCondition_MethodGet - - !>Sets/changes the method for an interface condition. - INTERFACE cmfe_InterfaceCondition_MethodSet - MODULE PROCEDURE cmfe_InterfaceCondition_MethodSetNumber - MODULE PROCEDURE cmfe_InterfaceCondition_MethodSetObj - END INTERFACE cmfe_InterfaceCondition_MethodSet - - !>Returns the operator for an interface condition. - INTERFACE cmfe_InterfaceCondition_OperatorGet - MODULE PROCEDURE cmfe_InterfaceCondition_OperatorGetNumber - MODULE PROCEDURE cmfe_InterfaceCondition_OperatorGetObj - END INTERFACE cmfe_InterfaceCondition_OperatorGet - - !>Sets/changes the operator for an interface condition. - INTERFACE cmfe_InterfaceCondition_OperatorSet - MODULE PROCEDURE cmfe_InterfaceCondition_OperatorSetNumber - MODULE PROCEDURE cmfe_InterfaceCondition_OperatorSetObj - END INTERFACE cmfe_InterfaceCondition_OperatorSet - - !>Returns the interface matrix time dependence type for interface equations. - INTERFACE cmfe_InterfaceEquations_MatrixTimeDependenceTypeGet - MODULE PROCEDURE cmfe_InterfaceEquations_MatrixTimeDependenceTypeGetNumber0 - MODULE PROCEDURE cmfe_InterfaceEquations_MatrixTimeDependenceTypeGetNumber1 - MODULE PROCEDURE cmfe_InterfaceEquations_MatrixTimeDependenceTypeGetObj0 - MODULE PROCEDURE cmfe_InterfaceEquations_MatrixTimeDependenceTypeGetObj1 - END INTERFACE cmfe_InterfaceEquations_MatrixTimeDependenceTypeGet - - !>Sets/changes the interface matrix time dependence type for interface equations. - INTERFACE cmfe_InterfaceEquations_MatrixTimeDependenceTypeSet - MODULE PROCEDURE cmfe_InterfaceEquations_MatrixTimeDependenceTypeSetNumber0 - MODULE PROCEDURE cmfe_InterfaceEquations_MatrixTimeDependenceTypeSetNumber1 - MODULE PROCEDURE cmfe_InterfaceEquations_MatrixTimeDependenceTypeSetObj0 - MODULE PROCEDURE cmfe_InterfaceEquations_MatrixTimeDependenceTypeSetObj1 - END INTERFACE cmfe_InterfaceEquations_MatrixTimeDependenceTypeSet - - !>Returns the output type for interface equations. - INTERFACE cmfe_InterfaceEquations_OutputTypeGet - MODULE PROCEDURE cmfe_InterfaceEquations_OutputTypeGetNumber - MODULE PROCEDURE cmfe_InterfaceEquations_OutputTypeGetObj - END INTERFACE cmfe_InterfaceEquations_OutputTypeGet - - !>Sets/changes the output type for interface equations. - INTERFACE cmfe_InterfaceEquations_OutputTypeSet - MODULE PROCEDURE cmfe_InterfaceEquations_OutputTypeSetNumber - MODULE PROCEDURE cmfe_InterfaceEquations_OutputTypeSetObj - END INTERFACE cmfe_InterfaceEquations_OutputTypeSet - - !>Returns the sparsity for interface equations. - INTERFACE cmfe_InterfaceEquations_SparsityGet - MODULE PROCEDURE cmfe_InterfaceEquations_SparsityGetNumber - MODULE PROCEDURE cmfe_InterfaceEquations_SparsityGetObj - END INTERFACE cmfe_InterfaceEquations_SparsityGet - - !>Sets/changes the sparsity for interface equations. - INTERFACE cmfe_InterfaceEquations_SparsitySet - MODULE PROCEDURE cmfe_InterfaceEquations_SparsitySetNumber - MODULE PROCEDURE cmfe_InterfaceEquations_SparsitySetObj - END INTERFACE cmfe_InterfaceEquations_SparsitySet - - PUBLIC CMFE_INTERFACE_CONDITION_LAGRANGE_MULTIPLIERS_METHOD,CMFE_INTERFACE_CONDITION_AUGMENTED_LAGRANGE_METHOD, & - & CMFE_INTERFACE_CONDITION_PENALTY_METHOD,CMFE_INTERFACE_CONDITION_POINT_TO_POINT_METHOD - - PUBLIC CMFE_INTERFACE_CONDITION_FIELD_CONTINUITY_OPERATOR,CMFE_INTERFACE_CONDITION_FIELD_NORMAL_CONTINUITY_OPERATOR, & - & CMFE_INTERFACE_CONDITION_FLS_CONTACT_OPERATOR,CMFE_INTERFACE_CONDITION_FLS_CONTACT_REPROJECT_OPERATOR, & - & CMFE_INTERFACE_CONDITION_SOLID_FLUID_OPERATOR,CMFE_INTERFACE_CONDITION_SOLID_FLUID_NORMAL_OPERATOR - - PUBLIC CMFE_INTERFACE_CONDITION_GAUSS_INTEGRATION,CMFE_INTERFACE_CONDITION_DATA_POINTS_INTEGRATION - - PUBLIC CMFE_INTERFACE_CONDITION_NO_OUTPUT,CMFE_INTERFACE_CONDITION_PROGRESS_OUTPUT - - PUBLIC cmfe_InterfaceCondition_CreateFinish,cmfe_InterfaceCondition_CreateStart - - PUBLIC cmfe_InterfaceCondition_DependentVariableAdd + PUBLIC cmfe_MeshEmbedding_Create,cmfe_MeshEmbedding_SetChildNodePosition, cmfe_MeshEmbeddingType - PUBLIC cmfe_InterfaceCondition_Destroy + PUBLIC cmfe_MeshEmbedding_Initialise,cmfe_MeshEmbedding_SetGaussPointData - PUBLIC cmfe_InterfaceCondition_EquationsCreateFinish,cmfe_InterfaceCondition_EquationsCreateStart + PUBLIC cmfe_MeshEmbedding_PushData,cmfe_MeshEmbedding_PullGaussPointData - PUBLIC cmfe_InterfaceCondition_EquationsDestroy + PUBLIC cmfe_MeshEmbedding_GetGaussPointCoord - PUBLIC cmfe_InterfaceCondition_IntegrationTypeGet,cmfe_InterfaceCondition_IntegrationTypeSet + PUBLIC CMFE_GENERATED_MESH_REGULAR_MESH_TYPE,CMFE_GENERATED_MESH_POLAR_MESH_TYPE,CMFE_GENERATED_MESH_FRACTAL_TREE_MESH_TYPE - PUBLIC cmfe_InterfaceCondition_LagrangeFieldCreateFinish,cmfe_InterfaceCondition_LagrangeFieldCreateStart + PUBLIC CMFE_GENERATED_MESH_CYLINDER_MESH_TYPE, CMFE_GENERATED_MESH_ELLIPSOID_MESH_TYPE - PUBLIC cmfe_InterfaceCondition_LabelGet,cmfe_InterfaceCondition_LabelSet + PUBLIC CMFE_GENERATED_MESH_CYLINDER_INNER_SURFACE,CMFE_GENERATED_MESH_CYLINDER_OUTER_SURFACE - PUBLIC cmfe_InterfaceCondition_OutputTypeGet,cmfe_InterfaceCondition_OutputTypeSet + PUBLIC CMFE_GENERATED_MESH_CYLINDER_TOP_SURFACE, CMFE_GENERATED_MESH_CYLINDER_BOTTOM_SURFACE - PUBLIC cmfe_InterfaceCondition_PenaltyFieldCreateFinish,cmfe_InterfaceCondition_PenaltyFieldCreateStart + PUBLIC CMFE_GENERATED_MESH_ELLIPSOID_INNER_SURFACE, CMFE_GENERATED_MESH_ELLIPSOID_OUTER_SURFACE - PUBLIC cmfe_InterfaceCondition_MethodGet,cmfe_InterfaceCondition_MethodSet + PUBLIC CMFE_GENERATED_MESH_ELLIPSOID_TOP_SURFACE - PUBLIC cmfe_InterfaceCondition_OperatorGet,cmfe_InterfaceCondition_OperatorSet - - PUBLIC cmfe_InterfaceEquations_MatrixTimeDependenceTypeGet,cmfe_InterfaceEquations_MatrixTimeDependenceTypeSet - - PUBLIC cmfe_InterfaceEquations_OutputTypeGet,cmfe_InterfaceEquations_OutputTypeSet - - PUBLIC cmfe_InterfaceEquations_SparsityGet,cmfe_InterfaceEquations_SparsitySet - -!!================================================================================================================================== -!! -!! INTERFACE MATRICES ROUTINES -!! -!!================================================================================================================================== + PUBLIC CMFE_GENERATED_MESH_REGULAR_LEFT_SURFACE, CMFE_GENERATED_MESH_REGULAR_RIGHT_SURFACE, & + & CMFE_GENERATED_MESH_REGULAR_TOP_SURFACE - !Module parameters + PUBLIC CMFE_GENERATED_MESH_REGULAR_BOTTOM_SURFACE, CMFE_GENERATED_MESH_REGULAR_FRONT_SURFACE, & + & CMFE_GENERATED_MESH_REGULAR_BACK_SURFACE - !> \addtogroup OpenCMISS_InterfaceMatricesTimeDependenceTypes OpenCMISS::Iron::InterfaceMatrices::TimeDependenceTypes - !> \brief Interface matrices time dependency types - !> \see OpenCMISS::Iron::InterfaceEquations,OpenCMISS - !>@{ - INTEGER(INTG), PARAMETER :: CMFE_INTERFACE_MATRIX_STATIC=INTERFACE_MATRIX_STATIC !@} + PUBLIC cmfe_GeneratedMesh_BasisGet,cmfe_GeneratedMesh_BasisSet - !Module types + PUBLIC cmfe_GeneratedMesh_BaseVectorsSet - !Module variables + PUBLIC cmfe_GeneratedMesh_CreateFinish,cmfe_GeneratedMesh_CreateStart - !Interfaces + PUBLIC cmfe_GeneratedMesh_Destroy - PUBLIC CMFE_INTERFACE_MATRIX_STATIC,CMFE_INTERFACE_MATRIX_QUASI_STATIC,CMFE_INTERFACE_MATRIX_FIRST_ORDER_DYNAMIC, & - & CMFE_INTERFACE_MATRIX_SECOND_ORDER_DYNAMIC + PUBLIC cmfe_GeneratedMesh_ExtentGet,cmfe_GeneratedMesh_ExtentSet -!!================================================================================================================================== -!! -!! MESH_ROUTINES -!! -!!================================================================================================================================== + PUBLIC cmfe_GeneratedMesh_NumberOfElementsGet,cmfe_GeneratedMesh_NumberOfElementsSet - !Module parameters + PUBLIC cmfe_GeneratedMesh_OriginGet,cmfe_GeneratedMesh_OriginSet - !> \addtogroup OpenCMISS_MeshConstants OpenCMISS::Iron::Mesh::Constants - !> \brief Mesh constants. - !>@{ - !> \addtogroup OpenCMISS_DecompositionTypes OpenCMISS::Iron::Mesh::DecompositionTypes - !> \brief The Decomposition types parameters - !> \see OpenCMISS::Iron::Mesh,OpenCMISS - !>@{ - INTEGER(INTG), PARAMETER :: CMFE_DECOMPOSITION_ALL_TYPE = DECOMPOSITION_ALL_TYPE !@} - !> \addtogroup OpenCMISS_MeshBoundaryTypes OpenCMISS::Iron::Mesh::MeshBoundaryTypes - !> \brief The boundary type parameters for a mesh domain - !> \see OpenCMISS::Iron::Mesh,OpenCMISS - !>@{ - INTEGER(INTG), PARAMETER :: CMFE_MESH_OFF_DOMAIN_BOUNDARY = MESH_OFF_DOMAIN_BOUNDARY !@} - !>@} - - !Module types - - !Module variables - - !Interfaces - - !>Finishes the creation of a domain decomposition. \see OpenCMISS::Iron::cmfe_Decomposition_CreateStart - INTERFACE cmfe_Decomposition_CreateFinish - MODULE PROCEDURE cmfe_Decomposition_CreateFinishNumber - MODULE PROCEDURE cmfe_Decomposition_CreateFinishObj - END INTERFACE cmfe_Decomposition_CreateFinish - - !>Start the creation of a domain decomposition for a given mesh. \see OpenCMISS::Iron::cmfe_Decomposition_CreateStart - INTERFACE cmfe_Decomposition_CreateStart - MODULE PROCEDURE cmfe_Decomposition_CreateStartNumber - MODULE PROCEDURE cmfe_Decomposition_CreateStartObj - END INTERFACE cmfe_Decomposition_CreateStart - - !>Destroys a domain decomposition. - INTERFACE cmfe_Decomposition_Destroy - MODULE PROCEDURE cmfe_Decomposition_DestroyNumber - MODULE PROCEDURE cmfe_Decomposition_DestroyObj - END INTERFACE cmfe_Decomposition_Destroy - - !>Calculates the element domains for the decomposition of a mesh. - INTERFACE cmfe_Decomposition_ElementDomainCalculate - MODULE PROCEDURE cmfe_Decomposition_ElementDomainCalculateNumber - MODULE PROCEDURE cmfe_Decomposition_ElementDomainCalculateObj - END INTERFACE cmfe_Decomposition_ElementDomainCalculate - - !>Returns the domain for a given element in a decomposition of a mesh. - INTERFACE cmfe_Decomposition_ElementDomainGet - MODULE PROCEDURE cmfe_Decomposition_ElementDomainGetNumber - MODULE PROCEDURE cmfe_Decomposition_ElementDomainGetObj - END INTERFACE cmfe_Decomposition_ElementDomainGet - - !>Sets/changes the domain for a given element in a decomposition of a mesh. - INTERFACE cmfe_Decomposition_ElementDomainSet - MODULE PROCEDURE cmfe_Decomposition_ElementDomainSetNumber - MODULE PROCEDURE cmfe_Decomposition_ElementDomainSetObj - END INTERFACE cmfe_Decomposition_ElementDomainSet - - !>Returns the mesh component number used for the decomposition of a mesh. - INTERFACE cmfe_Decomposition_MeshComponentGet - MODULE PROCEDURE cmfe_Decomposition_MeshComponentGetNumber - MODULE PROCEDURE cmfe_Decomposition_MeshComponentGetObj - END INTERFACE cmfe_Decomposition_MeshComponentGet - - !>Sets/changes the mesh component number used for the decomposition of a mesh. - INTERFACE cmfe_Decomposition_MeshComponentSet - MODULE PROCEDURE cmfe_Decomposition_MeshComponentSetNumber - MODULE PROCEDURE cmfe_Decomposition_MeshComponentSetObj - END INTERFACE cmfe_Decomposition_MeshComponentSet - - !>Returns the number of domains used for the decomposition of a mesh. - INTERFACE cmfe_Decomposition_NumberOfDomainsGet - MODULE PROCEDURE cmfe_Decomposition_NumberOfDomainsGetNumber - MODULE PROCEDURE cmfe_Decomposition_NumberOfDomainsGetObj - END INTERFACE cmfe_Decomposition_NumberOfDomainsGet - - !>Sets/changes the number of domains used for the decomposition of a mesh. - INTERFACE cmfe_Decomposition_NumberOfDomainsSet - MODULE PROCEDURE cmfe_Decomposition_NumberOfDomainsSetNumber - MODULE PROCEDURE cmfe_Decomposition_NumberOfDomainsSetObj - END INTERFACE cmfe_Decomposition_NumberOfDomainsSet - - !>Returns the type of decomposition. - INTERFACE cmfe_Decomposition_TypeGet - MODULE PROCEDURE cmfe_Decomposition_TypeGetNumber - MODULE PROCEDURE cmfe_Decomposition_TypeGetObj - END INTERFACE cmfe_Decomposition_TypeGet - - !>Sets/changes the type of decomposition. - INTERFACE cmfe_Decomposition_TypeSet - MODULE PROCEDURE cmfe_Decomposition_TypeSetNumber - MODULE PROCEDURE cmfe_Decomposition_TypeSetObj - END INTERFACE cmfe_Decomposition_TypeSet - - !>Sets/changes the work group for a decomposition. - INTERFACE cmfe_Decomposition_WorkGroupSet - MODULE PROCEDURE cmfe_Decomposition_WorkGroupSetNumber - MODULE PROCEDURE cmfe_Decomposition_WorkGroupSetObj - END INTERFACE cmfe_Decomposition_WorkGroupSet - - !>Sets/changes whether lines should be calculated for the decomposition. - INTERFACE cmfe_Decomposition_CalculateLinesSet - MODULE PROCEDURE cmfe_Decomposition_CalculateLinesSetNumber - MODULE PROCEDURE cmfe_Decomposition_CalculateLinesSetObj - END INTERFACE cmfe_Decomposition_CalculateLinesSet - - !>Sets/changes whether faces should be calculated for the decomposition. - INTERFACE cmfe_Decomposition_CalculateFacesSet - MODULE PROCEDURE cmfe_Decomposition_CalculateFacesSetNumber - MODULE PROCEDURE cmfe_Decomposition_CalculateFacesSetObj - END INTERFACE cmfe_Decomposition_CalculateFacesSet - - !>Finishes the creation of a mesh. \see OpenCMISS::Iron::cmfe_Mesh_CreateStart - INTERFACE cmfe_Mesh_CreateFinish - MODULE PROCEDURE cmfe_Mesh_CreateFinishNumber - MODULE PROCEDURE cmfe_Mesh_CreateFinishObj - END INTERFACE cmfe_Mesh_CreateFinish - - !>Starts the creation of a mesh. \see OpenCMISS::Iron::cmfe_Mesh_CreateFinish - INTERFACE cmfe_Mesh_CreateStart - MODULE PROCEDURE cmfe_Mesh_CreateStartNumber - MODULE PROCEDURE cmfe_Mesh_CreateStartObj - MODULE PROCEDURE cmfe_Mesh_CreateStartInterfaceObj - END INTERFACE cmfe_Mesh_CreateStart - - !>Destroys a mesh. - INTERFACE cmfe_Mesh_Destroy - MODULE PROCEDURE cmfe_Mesh_DestroyNumber - MODULE PROCEDURE cmfe_Mesh_DestroyObj - END INTERFACE cmfe_Mesh_Destroy - - !>Returns the number of mesh components in a mesh. - INTERFACE cmfe_Mesh_NumberOfComponentsGet - MODULE PROCEDURE cmfe_Mesh_NumberOfComponentsGetNumber - MODULE PROCEDURE cmfe_Mesh_NumberOfComponentsGetObj - END INTERFACE cmfe_Mesh_NumberOfComponentsGet - - !>Sets/changes the number of mesh components in a mesh. - INTERFACE cmfe_Mesh_NumberOfComponentsSet - MODULE PROCEDURE cmfe_Mesh_NumberOfComponentsSetNumber - MODULE PROCEDURE cmfe_Mesh_NumberOfComponentsSetObj - END INTERFACE cmfe_Mesh_NumberOfComponentsSet - - !>Returns the number of elements in a mesh. - INTERFACE cmfe_Mesh_NumberOfElementsGet - MODULE PROCEDURE cmfe_Mesh_NumberOfElementsGetNumber - MODULE PROCEDURE cmfe_Mesh_NumberOfElementsGetObj - END INTERFACE cmfe_Mesh_NumberOfElementsGet - - !>Sets/changes the number of elements in a mesh. - INTERFACE cmfe_Mesh_NumberOfElementsSet - MODULE PROCEDURE cmfe_Mesh_NumberOfElementsSetNumber - MODULE PROCEDURE cmfe_Mesh_NumberOfElementsSetObj - END INTERFACE cmfe_Mesh_NumberOfElementsSet - - !>Sets/changes the surrounding elements calculate flag for the mesh. - INTERFACE cmfe_Mesh_SurroundingElementsCalculateSet - MODULE PROCEDURE cmfe_Mesh_SurroundingElementsCalculateSetNumber - MODULE PROCEDURE cmfe_Mesh_SurroundingElementsCalculateSetObj - END INTERFACE cmfe_Mesh_SurroundingElementsCalculateSet - - !>Sets/changes whether data points topology should be calculated for the decomposition. - INTERFACE cmfe_Mesh_TopologyDataPointsCalculateProjection - MODULE PROCEDURE cmfe_Mesh_TopologyDataPointsCalculateProjectionInterfaceNumber - MODULE PROCEDURE cmfe_Mesh_TopologyDataPointsCalculateProjectionRegionNumber - MODULE PROCEDURE cmfe_Mesh_TopologyDataPointsCalculateProjectionObj - END INTERFACE cmfe_Mesh_TopologyDataPointsCalculateProjection - - !>Returns the basis for an element in a mesh. - INTERFACE cmfe_MeshElements_BasisGet - MODULE PROCEDURE cmfe_MeshElements_BasisGetNumber - MODULE PROCEDURE cmfe_MeshElements_BasisGetObj - END INTERFACE cmfe_MeshElements_BasisGet - - !>Sets/changes the basis for an element in a mesh. - INTERFACE cmfe_MeshElements_BasisSet - MODULE PROCEDURE cmfe_MeshElements_BasisSetNumber - MODULE PROCEDURE cmfe_MeshElements_BasisSetObj - END INTERFACE cmfe_MeshElements_BasisSet - - !>Returns the adjacent elements for a given element and adjacent xi direction for an element in a mesh. - INTERFACE cmfe_MeshElements_AdjacentElementGet - MODULE PROCEDURE cmfe_MeshElements_AdjacentElementGetNumber - MODULE PROCEDURE cmfe_MeshElements_AdjacentElementGetObj - END INTERFACE cmfe_MeshElements_AdjacentElementGet - - !>Finishes the creation of a mesh elements for a mesh component. \see OpenCMISS::Iron::cmfe_MeshElements_CreateStart - INTERFACE cmfe_MeshElements_CreateFinish - MODULE PROCEDURE cmfe_MeshElements_CreateFinishNumber - MODULE PROCEDURE cmfe_MeshElements_CreateFinishObj - END INTERFACE cmfe_MeshElements_CreateFinish - - !>Starts the creation of a mesh elements for a mesh component. \see OpenCMISS::Iron::cmfe_MeshElements_CreateFinish - INTERFACE cmfe_MeshElements_CreateStart - MODULE PROCEDURE cmfe_MeshElements_CreateStartNumber - MODULE PROCEDURE cmfe_MeshElements_CreateStartObj - END INTERFACE cmfe_MeshElements_CreateStart - - !>Gets the mesh boundary type for an element - INTERFACE cmfe_MeshElements_ElementOnBoundaryGet - MODULE PROCEDURE cmfe_MeshElements_ElementOnBoundaryGetNumber - MODULE PROCEDURE cmfe_MeshElements_ElementOnBoundaryGetObj - END INTERFACE cmfe_MeshElements_ElementOnBoundaryGet - - !>Get the mesh elements belonging to a mesh component. - INTERFACE cmfe_Mesh_ElementsGet - MODULE PROCEDURE cmfe_Mesh_ElementsGetNumber - MODULE PROCEDURE cmfe_Mesh_ElementsGetObj - END INTERFACE cmfe_Mesh_ElementsGet - - !>Returns the element nodes for an element in a mesh. - INTERFACE cmfe_MeshElements_NodesGet - MODULE PROCEDURE cmfe_MeshElements_NodesGetNumber - MODULE PROCEDURE cmfe_MeshElements_NodesGetObj - END INTERFACE cmfe_MeshElements_NodesGet - - !>Sets/changes the element nodes for an element in a mesh. - INTERFACE cmfe_MeshElements_NodesSet - MODULE PROCEDURE cmfe_MeshElements_NodesSetNumber - MODULE PROCEDURE cmfe_MeshElements_NodesSetObj - END INTERFACE cmfe_MeshElements_NodesSet - - !>Sets/changes a user node's derivative version for an element in a mesh. - INTERFACE cmfe_MeshElements_UserNodeVersionSet - MODULE PROCEDURE cmfe_MeshElements_UserNodeVersionSetNumber - MODULE PROCEDURE cmfe_MeshElements_UserNodeVersionSetObj - END INTERFACE cmfe_MeshElements_UserNodeVersionSet - - !>Sets/changes a local element's node derivative version for an element in a mesh. - INTERFACE cmfe_MeshElements_LocalElementNodeVersionSet - MODULE PROCEDURE cmfe_MeshElements_LocalElementNodeVersionSetNumber - MODULE PROCEDURE cmfe_MeshElements_LocalElementNodeVersionSetObj - END INTERFACE cmfe_MeshElements_LocalElementNodeVersionSet - - !>Returns the element user number for an element in a mesh. - INTERFACE cmfe_MeshElements_UserNumberGet - MODULE PROCEDURE cmfe_MeshElements_UserNumberGetNumber - MODULE PROCEDURE cmfe_MeshElements_UserNumberGetObj - END INTERFACE cmfe_MeshElements_UserNumberGet - - !>Sets/changes the element user number for an element in a mesh. - INTERFACE cmfe_MeshElements_UserNumberSet - MODULE PROCEDURE cmfe_MeshElements_UserNumberSetNumber - MODULE PROCEDURE cmfe_MeshElements_UserNumberSetObj - END INTERFACE cmfe_MeshElements_UserNumberSet - - !>Sets/changes the element user numbers for all element in a mesh. - INTERFACE cmfe_MeshElements_UserNumbersAllSet - MODULE PROCEDURE cmfe_MeshElements_UserNumbersAllSetNumber - MODULE PROCEDURE cmfe_MeshElements_UserNumbersAllSetObj - END INTERFACE cmfe_MeshElements_UserNumbersAllSet - - !>Returns true if the given node is in the given mesh component. - INTERFACE cmfe_Mesh_NodeExists - MODULE PROCEDURE cmfe_Mesh_NodeExistsNumber - MODULE PROCEDURE cmfe_Mesh_NodeExistsObj - END INTERFACE cmfe_Mesh_NodeExists - - !>Returns true if the given element is in the given mesh component. - INTERFACE cmfe_Mesh_ElementExists - MODULE PROCEDURE cmfe_Mesh_ElementExistsNumber - MODULE PROCEDURE cmfe_Mesh_ElementExistsObj - END INTERFACE cmfe_Mesh_ElementExists - - !>Get the mesh nodes belonging to a mesh component. - INTERFACE cmfe_Mesh_NodesGet - MODULE PROCEDURE cmfe_Mesh_NodesGetNumber - MODULE PROCEDURE cmfe_Mesh_NodesGetObj - END INTERFACE cmfe_Mesh_NodesGet - - !>Get the mesh boundary type for a node. - INTERFACE cmfe_MeshNodes_NodeOnBoundaryGet - MODULE PROCEDURE cmfe_MeshNodes_NodeOnBoundaryGetNumber - MODULE PROCEDURE cmfe_MeshNodes_NodeOnBoundaryGetObj - END INTERFACE cmfe_MeshNodes_NodeOnBoundaryGet - - !>Returns the number of derivatives for a node in a mesh. - INTERFACE cmfe_MeshNodes_NumberOfDerivativesGet - MODULE PROCEDURE cmfe_MeshNodes_NumberOfDerivativesGetNumber - MODULE PROCEDURE cmfe_MeshNodes_NumberOfDerivativesGetObj - END INTERFACE cmfe_MeshNodes_NumberOfDerivativesGet - - !>Returns the derivatives for a node in a mesh. - INTERFACE cmfe_MeshNodes_DerivativesGet - MODULE PROCEDURE cmfe_MeshNodes_DerivativesGetNumber - MODULE PROCEDURE cmfe_MeshNodes_DerivativesGetObj - END INTERFACE cmfe_MeshNodes_DerivativesGet - - !>Returns the number of versions for a derivative at a node in a mesh. - INTERFACE cmfe_MeshNodes_NumberOfVersionsGet - MODULE PROCEDURE cmfe_MeshNodes_NumberOfVersionsGetNumber - MODULE PROCEDURE cmfe_MeshNodes_NumberOfVersionsGetObj - END INTERFACE cmfe_MeshNodes_NumberOfVersionsGet - - !>Returns the number of nodes in a mesh. - INTERFACE cmfe_MeshNodes_NumberOfNodesGet - MODULE PROCEDURE cmfe_MeshNodes_NumberOfNodesGetNumber - MODULE PROCEDURE cmfe_MeshNodes_NumberOfNodesGetObj - END INTERFACE cmfe_MeshNodes_NumberOfNodesGet - - !>Returns the domain for a given element in a decomposition of a mesh. - INTERFACE cmfe_Decomposition_NodeDomainGet - MODULE PROCEDURE cmfe_Decomposition_NodeDomainGetNumber - MODULE PROCEDURE cmfe_Decomposition_NodeDomainGetObj - END INTERFACE cmfe_Decomposition_NodeDomainGet - - !>Calculates the decomposition topology for data points . - INTERFACE cmfe_Decomposition_TopologyDataProjectionCalculate - MODULE PROCEDURE cmfe_Decomposition_TopologyDataProjectionCalculateObj - END INTERFACE cmfe_Decomposition_TopologyDataProjectionCalculate + PUBLIC cmfe_GeneratedMesh_TypeGet,cmfe_GeneratedMesh_TypeSet - !>Gets the local data point number for data points projected on an element - INTERFACE cmfe_Decomposition_TopologyElementDataPointLocalNumberGet - MODULE PROCEDURE cmfe_Decomposition_TopologyElementDataPointLocalNumberGetObj - END INTERFACE cmfe_Decomposition_TopologyElementDataPointLocalNumberGet + PUBLIC cmfe_GeneratedMesh_GeometricParametersCalculate - !>Gets the user data point number for data points projected on an element - INTERFACE cmfe_Decomposition_TopologyElementDataPointUserNumberGet - MODULE PROCEDURE cmfe_Decomposition_TopologyElementDataPointUserNumberGetObj - END INTERFACE cmfe_Decomposition_TopologyElementDataPointUserNumberGet + PUBLIC cmfe_GeneratedMesh_SurfaceGet - !>Gets the number of data points projected on an element - INTERFACE cmfe_Decomposition_TopologyNumberOfElementDataPointsGet - MODULE PROCEDURE cmfe_Decomposition_TopologyNumberOfElementDataPointsGetObj - END INTERFACE cmfe_Decomposition_TopologyNumberOfElementDataPointsGet - PUBLIC CMFE_DECOMPOSITION_ALL_TYPE,CMFE_DECOMPOSITION_CALCULATED_TYPE,CMFE_DECOMPOSITION_USER_DEFINED_TYPE +!================================================================================================================================== +! +! INTERFACE_ROUTINES +! +!================================================================================================================================== + + !Module parameters + + !Module types + + !Module variables + + !Interfaces + + !>Adds a mesh to an interface. + INTERFACE cmfe_Interface_MeshAdd + MODULE PROCEDURE cmfe_Interface_MeshAddNumber + MODULE PROCEDURE cmfe_Interface_MeshAddObj + END INTERFACE cmfe_Interface_MeshAdd + + !>Finishes the creation of an interface. \see OpenCMISS::Iron::cmfe_Interface_CreateStart + INTERFACE cmfe_Interface_CreateFinish + MODULE PROCEDURE cmfe_Interface_CreateFinishNumber + MODULE PROCEDURE cmfe_Interface_CreateFinishObj + END INTERFACE cmfe_Interface_CreateFinish + + !>Starts the creation of an interface. \see OpenCMISS::Iron::cmfe_Interface_CreateFinish + INTERFACE cmfe_Interface_CreateStart + MODULE PROCEDURE cmfe_Interface_CreateStartNumber + MODULE PROCEDURE cmfe_Interface_CreateStartObj + END INTERFACE cmfe_Interface_CreateStart + + !>Set the coordinate system of an inteface + INTERFACE cmfe_Interface_CoordinateSystemSet + MODULE PROCEDURE cmfe_Interface_CoordinateSystemSetNumber + MODULE PROCEDURE cmfe_Interface_CoordinateSystemSetObj + END INTERFACE cmfe_Interface_CoordinateSystemSet + + !>Get the coordinate system of an inteface + INTERFACE cmfe_Interface_CoordinateSystemGet + MODULE PROCEDURE cmfe_Interface_CoordinateSystemGetNumber + MODULE PROCEDURE cmfe_Interface_CoordinateSystemGetObj + END INTERFACE cmfe_Interface_CoordinateSystemGet + + !>Destroys an interface. + INTERFACE cmfe_Interface_Destroy + MODULE PROCEDURE cmfe_Interface_DestroyNumber + MODULE PROCEDURE cmfe_Interface_DestroyObj + END INTERFACE cmfe_Interface_Destroy + + !>Returns the label of an interface. + INTERFACE cmfe_Interface_LabelGet + MODULE PROCEDURE cmfe_Interface_LabelGetCNumber + MODULE PROCEDURE cmfe_Interface_LabelGetCObj + MODULE PROCEDURE cmfe_Interface_LabelGetVSNumber + MODULE PROCEDURE cmfe_Interface_LabelGetVSObj + END INTERFACE cmfe_Interface_LabelGet + + !>Sets/changes the label of an interface. + INTERFACE cmfe_Interface_LabelSet + MODULE PROCEDURE cmfe_Interface_LabelSetCNumber + MODULE PROCEDURE cmfe_Interface_LabelSetCObj + MODULE PROCEDURE cmfe_Interface_LabelSetVSNumber + MODULE PROCEDURE cmfe_Interface_LabelSetVSObj + END INTERFACE cmfe_Interface_LabelSet + + !>Returns the nodes for a interface. + INTERFACE cmfe_Interface_NodesGet + MODULE PROCEDURE cmfe_Interface_NodesGetObj + END INTERFACE cmfe_Interface_NodesGet + + !>Finishes the creation of an interface meshes connectivity. \see OpenCMISS::Iron::cmfe_InterfaceMeshConnectivity_CreateStart + INTERFACE cmfe_InterfaceMeshConnectivity_CreateFinish + MODULE PROCEDURE cmfe_InterfaceMeshConnectivity_CreateFinishNumber + MODULE PROCEDURE cmfe_InterfaceMeshConnectivity_CreateFinishObj + END INTERFACE cmfe_InterfaceMeshConnectivity_CreateFinish + + !>Starts the creation of an interface meshes connectivity. + INTERFACE cmfe_InterfaceMeshConnectivity_CreateStart + MODULE PROCEDURE cmfe_InterfaceMeshConnectivity_CreateStartNumber + MODULE PROCEDURE cmfe_InterfaceMeshConnectivity_CreateStartObj + END INTERFACE cmfe_InterfaceMeshConnectivity_CreateStart + + !>Sets the element xi values for the mesh connectivity between an element in the interface mesh and an element in a region mesh + INTERFACE cmfe_InterfaceMeshConnectivity_ElementXiSet + MODULE PROCEDURE cmfe_InterfaceMeshConnectivity_ElementXiSetNumber + MODULE PROCEDURE cmfe_InterfaceMeshConnectivity_ElementXiSetObj + END INTERFACE cmfe_InterfaceMeshConnectivity_ElementXiSet + + !>Sets the number of elements coupled through a given interface mesh element + INTERFACE cmfe_InterfaceMeshConnectivity_ElementNumberSet + MODULE PROCEDURE cmfe_InterfaceMeshConnectivity_ElementNumberSetNumber + MODULE PROCEDURE cmfe_InterfaceMeshConnectivity_ElementNumberSetObj + END INTERFACE cmfe_InterfaceMeshConnectivity_ElementNumberSet + + !>Sets the coupled node numbers + INTERFACE cmfe_InterfaceMeshConnectivity_NodeNumberSet + MODULE PROCEDURE cmfe_InterfaceMeshConnectivity_NodeNumberSetNumber + MODULE PROCEDURE cmfe_InterfaceMeshConnectivity_NodeNumberSetObj + END INTERFACE cmfe_InterfaceMeshConnectivity_NodeNumberSet + + !>Sets the number of elements coupled through a given interface mesh element + INTERFACE cmfe_InterfaceMeshConnectivity_BasisSet + MODULE PROCEDURE cmfe_InterfaceMeshConnectivity_BasisSetNumber + MODULE PROCEDURE cmfe_InterfaceMeshConnectivity_BasisSetObj + END INTERFACE cmfe_InterfaceMeshConnectivity_BasisSet + + !>Destroys an interface meshes connectivity. + INTERFACE cmfe_InterfaceMeshConnectivity_Destroy + MODULE PROCEDURE cmfe_InterfaceMeshConnectivity_DestroyNumber + MODULE PROCEDURE cmfe_InterfaceMeshConnectivity_DestroyObj + END INTERFACE cmfe_InterfaceMeshConnectivity_Destroy + + !>Finishes the creation of an interface points connectivity. + INTERFACE cmfe_InterfacePointsConnectivity_CreateFinish + MODULE PROCEDURE cmfe_InterfacePointsConnectivity_CreateFinishNumber + MODULE PROCEDURE cmfe_InterfacePointsConnectivity_CreateFinishObj + END INTERFACE cmfe_InterfacePointsConnectivity_CreateFinish + + !>Starts the creation of an interface points connectivity. + INTERFACE cmfe_InterfacePointsConnectivity_CreateStart + MODULE PROCEDURE cmfe_InterfacePointsConnectivity_CreateStartNumber + MODULE PROCEDURE cmfe_InterfacePointsConnectivity_CreateStartObj + END INTERFACE cmfe_InterfacePointsConnectivity_CreateStart + + !>Destroys an interface points connectivity. + INTERFACE cmfe_InterfacePointsConnectivity_Destroy + MODULE PROCEDURE cmfe_InterfacePointsConnectivity_DestroyNumber + MODULE PROCEDURE cmfe_InterfacePointsConnectivity_DestroyObj + END INTERFACE cmfe_InterfacePointsConnectivity_Destroy + + !>Get the coupled mesh element number that defines points connectivity + INTERFACE cmfe_InterfacePointsConnectivity_ElementNumberGet + MODULE PROCEDURE cmfe_InterfacePointsConnectivity_ElementNumberGetNumber + MODULE PROCEDURE cmfe_InterfacePointsConnectivity_ElementNumberGetObj + END INTERFACE cmfe_InterfacePointsConnectivity_ElementNumberGet + + !>Gets the element xi values for the points connectivity between a data point in the interface mesh and an element in a region mesh + INTERFACE cmfe_InterfacePointsConnectivity_PointXiGet + MODULE PROCEDURE cmfe_InterfacePointsConnectivity_PointXiGetNumber + MODULE PROCEDURE cmfe_InterfacePointsConnectivity_PointXiGetObj + END INTERFACE cmfe_InterfacePointsConnectivity_PointXiGet + + !>Sets the coupled mesh element number that defines points connectivity + INTERFACE cmfe_InterfacePointsConnectivity_ElementNumberSet + MODULE PROCEDURE cmfe_InterfacePointsConnectivity_ElementNumberSetNumber + MODULE PROCEDURE cmfe_InterfacePointsConnectivity_ElementNumberSetObj + END INTERFACE cmfe_InterfacePointsConnectivity_ElementNumberSet + + !>Sets the element xi values for the points connectivity between a data point in the interface mesh and an element in a region mesh + INTERFACE cmfe_InterfacePointsConnectivity_PointXiSet + MODULE PROCEDURE cmfe_InterfacePointsConnectivity_PointXiSetNumber + MODULE PROCEDURE cmfe_InterfacePointsConnectivity_PointXiSetObj + END INTERFACE cmfe_InterfacePointsConnectivity_PointXiSet + + !>Update points connectivity information with projection results + INTERFACE cmfe_InterfacePointsConnectivity_UpdateFromProjection + MODULE PROCEDURE cmfe_InterfacePointsConnectivity_UpdateFromProjectionRNumber + MODULE PROCEDURE cmfe_InterfacePointsConnectivity_UpdateFromProjectionINumber + MODULE PROCEDURE cmfe_InterfacePointsConnectivity_UpdateFromProjectionObj + END INTERFACE cmfe_InterfacePointsConnectivity_UpdateFromProjection + + PUBLIC cmfe_Interface_MeshAdd - PUBLIC CMFE_MESH_OFF_DOMAIN_BOUNDARY,CMFE_MESH_ON_DOMAIN_BOUNDARY + PUBLIC cmfe_Interface_CreateFinish,cmfe_Interface_CreateStart - PUBLIC cmfe_Decomposition_CreateFinish,cmfe_Decomposition_CreateStart + PUBLIC cmfe_Interface_CoordinateSystemSet,cmfe_Interface_CoordinateSystemGet - PUBLIC cmfe_Decomposition_TopologyDataProjectionCalculate + PUBLIC cmfe_Interface_Destroy - PUBLIC cmfe_Decomposition_TopologyElementDataPointLocalNumberGet + PUBLIC cmfe_Interface_LabelGet,cmfe_Interface_LabelSet - PUBLIC cmfe_Decomposition_TopologyElementDataPointUserNumberGet + PUBLIC cmfe_Interface_NodesGet - PUBLIC cmfe_Decomposition_TopologyNumberOfElementDataPointsGet + PUBLIC cmfe_InterfaceMeshConnectivity_CreateFinish,cmfe_InterfaceMeshConnectivity_CreateStart - PUBLIC cmfe_Decomposition_Destroy + PUBLIC cmfe_InterfaceMeshConnectivity_Destroy,cmfe_InterfaceMeshConnectivity_BasisSet - PUBLIC cmfe_Decomposition_ElementDomainCalculate + PUBLIC cmfe_InterfaceMeshConnectivity_ElementNumberSet,cmfe_InterfaceMeshConnectivity_ElementXiSet - PUBLIC cmfe_Decomposition_ElementDomainGet,cmfe_Decomposition_ElementDomainSet + PUBLIC cmfe_InterfaceMeshConnectivity_NodeNumberSet - PUBLIC cmfe_Decomposition_MeshComponentGet,cmfe_Decomposition_MeshComponentSet + PUBLIC cmfe_InterfacePointsConnectivity_CreateFinish,cmfe_InterfacePointsConnectivity_CreateStart - PUBLIC cmfe_Decomposition_NumberOfDomainsGet,cmfe_Decomposition_NumberOfDomainsSet + PUBLIC cmfe_InterfacePointsConnectivity_Destroy - PUBLIC cmfe_Decomposition_TypeGet,cmfe_Decomposition_TypeSet + PUBLIC cmfe_InterfacePointsConnectivity_ElementNumberGet,cmfe_InterfacePointsConnectivity_PointXiGet - PUBLIC cmfe_Decomposition_WorkGroupSet + PUBLIC cmfe_InterfacePointsConnectivity_ElementNumberSet,cmfe_InterfacePointsConnectivity_PointXiSet - PUBLIC cmfe_Decomposition_NodeDomainGet + PUBLIC cmfe_InterfacePointsConnectivity_UpdateFromProjection - PUBLIC cmfe_Mesh_CreateFinish,cmfe_Mesh_CreateStart +!================================================================================================================================== +! +! INTERFACE_CONDITION_ROUTINES +! +!================================================================================================================================== + + !Module parameters + + !> \addtogroup OpenCMISS_InterfaceConditionConstants OpenCMISS::Iron::InterfaceConditions::Constants + !> \brief Interface conditions constants. + !>@{ + !> \addtogroup OpenCMISS_InterfaceConditionMethods OpenCMISS::Iron::InterfaceConditions::Methods + !> \brief Interface condition methods. + !> \see OpenCMISS::Iron::InterfaceConditions,OpenCMISS + !>@{ + INTEGER(INTG), PARAMETER :: CMFE_INTERFACE_CONDITION_LAGRANGE_MULTIPLIERS_METHOD = & + & INTERFACE_CONDITION_LAGRANGE_MULTIPLIERS_METHOD !@} + !> \addtogroup OpenCMISS_InterfaceConditionOperators OpenCMISS::Iron::InterfaceConditions::Operators + !> \brief Interface condition operator types. + !> \see OpenCMISS::Iron::InterfaceConditions,OpenCMISS + !>@{ + INTEGER(INTG), PARAMETER :: CMFE_INTERFACE_CONDITION_FIELD_CONTINUITY_OPERATOR = & + & INTERFACE_CONDITION_FIELD_CONTINUITY_OPERATOR !@} + !> \addtogroup OpenCMISS_InterfaceConditionOutputTypes OpenCMISS::Iron::InterfaceConditions::OutputTypes + !> \brief Interface conditions output types + !> \see OpenCMISS::Iron::InterfaceConditions,OpenCMISS + !>@{ + INTEGER(INTG), PARAMETER :: CMFE_INTERFACE_CONDITION_NO_OUTPUT = INTERFACE_CONDITION_NO_OUTPUT!@} + !> \addtogroup OpenCMISS_InterfaceConditionIntegrationTypes OpenCMISS::Iron::InterfaceConditions::IntegrationTypes + !> \brief Interface condition integration types. + !> \see OpenCMISS::Iron::InterfaceConditions,OpenCMISS + !>@{ + INTEGER(INTG), PARAMETER :: CMFE_INTERFACE_CONDITION_GAUSS_INTEGRATION=INTERFACE_CONDITION_GAUSS_INTEGRATION !@} + !>@} + + !Module types + + !Module variables + + !Interfaces + + !>Finishes the creation of an interface condition. \see OpenCMISS::Iron::cmfe_InterfaceCondition_CreateStart + INTERFACE cmfe_InterfaceCondition_CreateFinish + MODULE PROCEDURE cmfe_InterfaceCondition_CreateFinishNumber + MODULE PROCEDURE cmfe_InterfaceCondition_CreateFinishObj + END INTERFACE cmfe_InterfaceCondition_CreateFinish + + !>Starts the creation of an interface condition. \see OpenCMISS::Iron::cmfe_InterfaceCondition_CreateFinish + INTERFACE cmfe_InterfaceCondition_CreateStart + MODULE PROCEDURE cmfe_InterfaceCondition_CreateStartNumber + MODULE PROCEDURE cmfe_InterfaceCondition_CreateStartObj + END INTERFACE cmfe_InterfaceCondition_CreateStart + + !>Adds in a dependent variable to an interface condition. + INTERFACE cmfe_InterfaceCondition_DependentVariableAdd + MODULE PROCEDURE cmfe_InterfaceCondition_DependentVariableAddNumber + MODULE PROCEDURE cmfe_InterfaceCondition_DependentVariableAddObj + END INTERFACE cmfe_InterfaceCondition_DependentVariableAdd + + !>Destroys an interface condition. + INTERFACE cmfe_InterfaceCondition_Destroy + MODULE PROCEDURE cmfe_InterfaceCondition_DestroyNumber + MODULE PROCEDURE cmfe_InterfaceCondition_DestroyObj + END INTERFACE cmfe_InterfaceCondition_Destroy + + !>Finishes the creation of equations for an interface condition. \see OpenCMISS::Iron::cmfe_InterfaceCondition_EquationsCreateStart + INTERFACE cmfe_InterfaceCondition_EquationsCreateFinish + MODULE PROCEDURE cmfe_InterfaceCondition_EquationsCreateFinishNumber + MODULE PROCEDURE cmfe_InterfaceCondition_EquationsCreateFinishObj + END INTERFACE cmfe_InterfaceCondition_EquationsCreateFinish + + !>Starts the creation of equations for an interface condition. \see OpenCMISS::Iron::cmfe_InterfaceCondition_EquationsCreateFinish + INTERFACE cmfe_InterfaceCondition_EquationsCreateStart + MODULE PROCEDURE cmfe_InterfaceCondition_EquationsCreateStartNumber + MODULE PROCEDURE cmfe_InterfaceCondition_EquationsCreateStartObj + END INTERFACE cmfe_InterfaceCondition_EquationsCreateStart + + !>Destroys the interface equations for an interface condition. + INTERFACE cmfe_InterfaceCondition_EquationsDestroy + MODULE PROCEDURE cmfe_InterfaceCondition_EquationsDestroyNumber + MODULE PROCEDURE cmfe_InterfaceCondition_EquationsDestroyObj + END INTERFACE cmfe_InterfaceCondition_EquationsDestroy + + !>Returns the integration type for an interface condition. + INTERFACE cmfe_InterfaceCondition_IntegrationTypeGet + MODULE PROCEDURE cmfe_InterfaceCondition_IntegrationTypeGetNumber + MODULE PROCEDURE cmfe_InterfaceCondition_IntegrationTypeGetObj + END INTERFACE cmfe_InterfaceCondition_IntegrationTypeGet + + !>Sets/changes the integration type for an interface condition. + INTERFACE cmfe_InterfaceCondition_IntegrationTypeSet + MODULE PROCEDURE cmfe_InterfaceCondition_IntegrationTypeSetNumber + MODULE PROCEDURE cmfe_InterfaceCondition_IntegrationTypeSetObj + END INTERFACE cmfe_InterfaceCondition_IntegrationTypeSet + + !>Finishes the creation of a Lagrange multipliers field for an interface condition. \see OpenCMISS::Iron::cmfe_InterfaceCondition_LagrangeFieldCreateStart + INTERFACE cmfe_InterfaceCondition_LagrangeFieldCreateFinish + MODULE PROCEDURE cmfe_InterfaceCondition_LagrangeFieldCreateFinishNumber + MODULE PROCEDURE cmfe_InterfaceCondition_LagrangeFieldCreateFinishObj + END INTERFACE cmfe_InterfaceCondition_LagrangeFieldCreateFinish + + !>Starts the creation of a Lagrange multipliers field for an interface condition. \see OpenCMISS::Iron::cmfe_InterfaceCondition_LagrangeFieldCreateFinish + INTERFACE cmfe_InterfaceCondition_LagrangeFieldCreateStart + MODULE PROCEDURE cmfe_InterfaceCondition_LagrangeFieldCreateStartNumber + MODULE PROCEDURE cmfe_InterfaceCondition_LagrangeFieldCreateStartObj + END INTERFACE cmfe_InterfaceCondition_LagrangeFieldCreateStart + + !>Returns the label for an interface condition. + INTERFACE cmfe_InterfaceCondition_LabelGet + MODULE PROCEDURE cmfe_InterfaceCondition_LabelGetCNumber + MODULE PROCEDURE cmfe_InterfaceCondition_LabelGetCObj + MODULE PROCEDURE cmfe_InterfaceCondition_LabelGetVSNumber + MODULE PROCEDURE cmfe_InterfaceCondition_LabelGetVSObj + END INTERFACE cmfe_InterfaceCondition_LabelGet + + !>Sets/changes the label for an interface condition. + INTERFACE cmfe_InterfaceCondition_LabelSet + MODULE PROCEDURE cmfe_InterfaceCondition_LabelSetCNumber + MODULE PROCEDURE cmfe_InterfaceCondition_LabelSetCObj + MODULE PROCEDURE cmfe_InterfaceCondition_LabelSetVSNumber + MODULE PROCEDURE cmfe_InterfaceCondition_LabelSetVSObj + END INTERFACE cmfe_InterfaceCondition_LabelSet + + !>Gets the output type for an interface condition. + INTERFACE cmfe_InterfaceCondition_OutputTypeGet + MODULE PROCEDURE cmfe_InterfaceCondition_OutputTypeGetNumber + MODULE PROCEDURE cmfe_InterfaceCondition_OutputTypeGetObj + END INTERFACE cmfe_InterfaceCondition_OutputTypeGet + + !>Sets/changes the output type an equations set. + INTERFACE cmfe_InterfaceCondition_OutputTypeSet + MODULE PROCEDURE cmfe_InterfaceCondition_OutputTypeSetNumber + MODULE PROCEDURE cmfe_InterfaceCondition_OutputTypeSetObj + END INTERFACE cmfe_InterfaceCondition_OutputTypeSet + + !>Finishes the creation of a Penalty field for an interface condition. \see OpenCMISS::Iron::cmfe_InterfaceCondition_PenaltyFieldCreateStart + INTERFACE cmfe_InterfaceCondition_PenaltyFieldCreateFinish + MODULE PROCEDURE cmfe_InterfaceCondition_PenaltyFieldCreateFinishNumber + MODULE PROCEDURE cmfe_InterfaceCondition_PenaltyFieldCreateFinishObj + END INTERFACE cmfe_InterfaceCondition_PenaltyFieldCreateFinish + + !>Starts the creation of a Penalty field for an interface condition. \see OpenCMISS::Iron::cmfe_InterfaceCondition_PenaltyFieldCreateFinish + INTERFACE cmfe_InterfaceCondition_PenaltyFieldCreateStart + MODULE PROCEDURE cmfe_InterfaceCondition_PenaltyFieldCreateStartNumber + MODULE PROCEDURE cmfe_InterfaceCondition_PenaltyFieldCreateStartObj + END INTERFACE cmfe_InterfaceCondition_PenaltyFieldCreateStart + + !>Returns the method for an interface condition. + INTERFACE cmfe_InterfaceCondition_MethodGet + MODULE PROCEDURE cmfe_InterfaceCondition_MethodGetNumber + MODULE PROCEDURE cmfe_InterfaceCondition_MethodGetObj + END INTERFACE cmfe_InterfaceCondition_MethodGet + + !>Sets/changes the method for an interface condition. + INTERFACE cmfe_InterfaceCondition_MethodSet + MODULE PROCEDURE cmfe_InterfaceCondition_MethodSetNumber + MODULE PROCEDURE cmfe_InterfaceCondition_MethodSetObj + END INTERFACE cmfe_InterfaceCondition_MethodSet + + !>Returns the operator for an interface condition. + INTERFACE cmfe_InterfaceCondition_OperatorGet + MODULE PROCEDURE cmfe_InterfaceCondition_OperatorGetNumber + MODULE PROCEDURE cmfe_InterfaceCondition_OperatorGetObj + END INTERFACE cmfe_InterfaceCondition_OperatorGet + + !>Sets/changes the operator for an interface condition. + INTERFACE cmfe_InterfaceCondition_OperatorSet + MODULE PROCEDURE cmfe_InterfaceCondition_OperatorSetNumber + MODULE PROCEDURE cmfe_InterfaceCondition_OperatorSetObj + END INTERFACE cmfe_InterfaceCondition_OperatorSet + + !>Returns the interface matrix time dependence type for interface equations. + INTERFACE cmfe_InterfaceEquations_MatrixTimeDependenceTypeGet + MODULE PROCEDURE cmfe_InterfaceEquations_MatrixTimeDependenceTypeGetNumber0 + MODULE PROCEDURE cmfe_InterfaceEquations_MatrixTimeDependenceTypeGetNumber1 + MODULE PROCEDURE cmfe_InterfaceEquations_MatrixTimeDependenceTypeGetObj0 + MODULE PROCEDURE cmfe_InterfaceEquations_MatrixTimeDependenceTypeGetObj1 + END INTERFACE cmfe_InterfaceEquations_MatrixTimeDependenceTypeGet + + !>Sets/changes the interface matrix time dependence type for interface equations. + INTERFACE cmfe_InterfaceEquations_MatrixTimeDependenceTypeSet + MODULE PROCEDURE cmfe_InterfaceEquations_MatrixTimeDependenceTypeSetNumber0 + MODULE PROCEDURE cmfe_InterfaceEquations_MatrixTimeDependenceTypeSetNumber1 + MODULE PROCEDURE cmfe_InterfaceEquations_MatrixTimeDependenceTypeSetObj0 + MODULE PROCEDURE cmfe_InterfaceEquations_MatrixTimeDependenceTypeSetObj1 + END INTERFACE cmfe_InterfaceEquations_MatrixTimeDependenceTypeSet + + !>Returns the output type for interface equations. + INTERFACE cmfe_InterfaceEquations_OutputTypeGet + MODULE PROCEDURE cmfe_InterfaceEquations_OutputTypeGetNumber + MODULE PROCEDURE cmfe_InterfaceEquations_OutputTypeGetObj + END INTERFACE cmfe_InterfaceEquations_OutputTypeGet + + !>Sets/changes the output type for interface equations. + INTERFACE cmfe_InterfaceEquations_OutputTypeSet + MODULE PROCEDURE cmfe_InterfaceEquations_OutputTypeSetNumber + MODULE PROCEDURE cmfe_InterfaceEquations_OutputTypeSetObj + END INTERFACE cmfe_InterfaceEquations_OutputTypeSet + + !>Returns the sparsity for interface equations. + INTERFACE cmfe_InterfaceEquations_SparsityGet + MODULE PROCEDURE cmfe_InterfaceEquations_SparsityGetNumber + MODULE PROCEDURE cmfe_InterfaceEquations_SparsityGetObj + END INTERFACE cmfe_InterfaceEquations_SparsityGet + + !>Sets/changes the sparsity for interface equations. + INTERFACE cmfe_InterfaceEquations_SparsitySet + MODULE PROCEDURE cmfe_InterfaceEquations_SparsitySetNumber + MODULE PROCEDURE cmfe_InterfaceEquations_SparsitySetObj + END INTERFACE cmfe_InterfaceEquations_SparsitySet - PUBLIC cmfe_Mesh_Destroy + PUBLIC CMFE_INTERFACE_CONDITION_LAGRANGE_MULTIPLIERS_METHOD,CMFE_INTERFACE_CONDITION_AUGMENTED_LAGRANGE_METHOD, & + & CMFE_INTERFACE_CONDITION_PENALTY_METHOD,CMFE_INTERFACE_CONDITION_POINT_TO_POINT_METHOD - PUBLIC cmfe_Mesh_NumberOfComponentsGet,cmfe_Mesh_NumberOfComponentsSet + PUBLIC CMFE_INTERFACE_CONDITION_FIELD_CONTINUITY_OPERATOR,CMFE_INTERFACE_CONDITION_FIELD_NORMAL_CONTINUITY_OPERATOR, & + & CMFE_INTERFACE_CONDITION_FLS_CONTACT_OPERATOR,CMFE_INTERFACE_CONDITION_FLS_CONTACT_REPROJECT_OPERATOR, & + & CMFE_INTERFACE_CONDITION_SOLID_FLUID_OPERATOR,CMFE_INTERFACE_CONDITION_SOLID_FLUID_NORMAL_OPERATOR - PUBLIC cmfe_Mesh_NumberOfElementsGet,cmfe_Mesh_NumberOfElementsSet + PUBLIC CMFE_INTERFACE_CONDITION_GAUSS_INTEGRATION,CMFE_INTERFACE_CONDITION_DATA_POINTS_INTEGRATION - PUBLIC cmfe_MeshElements_BasisGet,cmfe_MeshElements_BasisSet + PUBLIC CMFE_INTERFACE_CONDITION_NO_OUTPUT,CMFE_INTERFACE_CONDITION_PROGRESS_OUTPUT - PUBLIC cmfe_MeshElements_AdjacentElementGet + PUBLIC cmfe_InterfaceCondition_CreateFinish,cmfe_InterfaceCondition_CreateStart - PUBLIC cmfe_MeshElements_ElementOnBoundaryGet + PUBLIC cmfe_InterfaceCondition_DependentVariableAdd - PUBLIC cmfe_MeshElements_UserNodeVersionSet,cmfe_MeshElements_LocalElementNodeVersionSet + PUBLIC cmfe_InterfaceCondition_Destroy - PUBLIC cmfe_MeshElements_CreateFinish,cmfe_MeshElements_CreateStart + PUBLIC cmfe_InterfaceCondition_EquationsCreateFinish,cmfe_InterfaceCondition_EquationsCreateStart - PUBLIC cmfe_MeshElements_NodesGet,cmfe_MeshElements_NodesSet + PUBLIC cmfe_InterfaceCondition_EquationsDestroy - PUBLIC cmfe_MeshElements_UserNumberGet,cmfe_MeshElements_UserNumberSet + PUBLIC cmfe_InterfaceCondition_IntegrationTypeGet,cmfe_InterfaceCondition_IntegrationTypeSet - PUBLIC cmfe_MeshElements_UserNumbersAllSet + PUBLIC cmfe_InterfaceCondition_LagrangeFieldCreateFinish,cmfe_InterfaceCondition_LagrangeFieldCreateStart - PUBLIC cmfe_MeshNodes_NodeOnBoundaryGet + PUBLIC cmfe_InterfaceCondition_LabelGet,cmfe_InterfaceCondition_LabelSet - PUBLIC cmfe_MeshNodes_NumberOfDerivativesGet,cmfe_MeshNodes_DerivativesGet + PUBLIC cmfe_InterfaceCondition_OutputTypeGet,cmfe_InterfaceCondition_OutputTypeSet - PUBLIC cmfe_MeshNodes_NumberOfVersionsGet + PUBLIC cmfe_InterfaceCondition_PenaltyFieldCreateFinish,cmfe_InterfaceCondition_PenaltyFieldCreateStart - PUBLIC cmfe_MeshNodes_NumberOfNodesGet + PUBLIC cmfe_InterfaceCondition_MethodGet,cmfe_InterfaceCondition_MethodSet - PUBLIC cmfe_Mesh_ElementsGet + PUBLIC cmfe_InterfaceCondition_OperatorGet,cmfe_InterfaceCondition_OperatorSet - PUBLIC cmfe_Mesh_NodesGet + PUBLIC cmfe_InterfaceEquations_MatrixTimeDependenceTypeGet,cmfe_InterfaceEquations_MatrixTimeDependenceTypeSet - PUBLIC cmfe_Mesh_NodeExists,cmfe_Mesh_ElementExists + PUBLIC cmfe_InterfaceEquations_OutputTypeGet,cmfe_InterfaceEquations_OutputTypeSet - PUBLIC cmfe_Mesh_SurroundingElementsCalculateSet + PUBLIC cmfe_InterfaceEquations_SparsityGet,cmfe_InterfaceEquations_SparsitySet - PUBLIC cmfe_Mesh_TopologyDataPointsCalculateProjection +!================================================================================================================================== +! +! INTERFACE MATRICES ROUTINES +! +!================================================================================================================================== -!!================================================================================================================================== -!! -!! DISTRIBUTED_MATRIX_VECTOR -!! -!!================================================================================================================================== + !Module parameters - !> \addtogroup OpenCMISS_MatrixVectorConstants OpenCMISS::Iron::MatrixVector::Constants - !> \brief Distributed matrix and vector function constants. - !>@{ - !> \addtogroup OpenCMISS_MatrixStorageTypes OpenCMISS::Iron::MatrixVector::MatrixStorageTypes - !> \brief Type of matrix storage. - !> \see OpenCMISS::Iron::MatrixVectorConstants,OpenCMISS - !>@{ - INTEGER(INTG), PARAMETER :: CMFE_MATRIX_BLOCK_STORAGE_TYPE=DISTRIBUTED_MATRIX_BLOCK_STORAGE_TYPE !@} - !> \addtogroup OpenCMISS_MatrixVectorDataTypes OpenCMISS::Iron::MatrixVector::DataTypes - !> \brief Type of data stored in matrices and vectors. - !> \see OpenCMISS::Iron::MatrixVectorConstants,OpenCMISS + !> \addtogroup OpenCMISS_InterfaceMatricesTimeDependenceTypes OpenCMISS::Iron::InterfaceMatrices::TimeDependenceTypes + !> \brief Interface matrices time dependency types + !> \see OpenCMISS::Iron::InterfaceEquations,OpenCMISS !>@{ - INTEGER(INTG), PARAMETER :: CMFE_MATRIX_VECTOR_INTG_TYPE=DISTRIBUTED_MATRIX_VECTOR_INTG_TYPE !@} - !>@} + INTEGER(INTG), PARAMETER :: CMFE_INTERFACE_MATRIX_STATIC=INTERFACE_MATRIX_STATIC !@} - PUBLIC CMFE_MATRIX_BLOCK_STORAGE_TYPE,CMFE_MATRIX_DIAGONAL_STORAGE_TYPE,CMFE_MATRIX_COLUMN_MAJOR_STORAGE_TYPE, & - & CMFE_MATRIX_ROW_MAJOR_STORAGE_TYPE,CMFE_MATRIX_COMPRESSED_ROW_STORAGE_TYPE,CMFE_MATRIX_COMPRESSED_COLUMN_STORAGE_TYPE, & - & CMFE_MATRIX_ROW_COLUMN_STORAGE_TYPE + !Module types - PUBLIC CMFE_MATRIX_VECTOR_INTG_TYPE,CMFE_MATRIX_VECTOR_SP_TYPE,CMFE_MATRIX_VECTOR_DP_TYPE,CMFE_MATRIX_VECTOR_L_TYPE + !Module variables - !Note that currently we don't have any user number based routines for distributed matrices - !as if we can't use a pointer to a CMISS object, a pointer to matrix data isn't going to - !be much use either. It's also more awkward when matrices and vectors themselves don't have - !user numbers and there are multiple ways to access them through user numbers, eg. solver equations - !matrices or equations set matrices + !Interfaces - !>Get the storage type for a distributed matrix - INTERFACE cmfe_DistributedMatrix_StorageTypeGet - MODULE PROCEDURE cmfe_DistributedMatrix_StorageTypeGetObj - END INTERFACE cmfe_DistributedMatrix_StorageTypeGet - - !>Get the data type for a distributed matrix - INTERFACE cmfe_DistributedMatrix_DataTypeGet - MODULE PROCEDURE cmfe_DistributedMatrix_DataTypeGetObj - END INTERFACE cmfe_DistributedMatrix_DataTypeGet + PUBLIC CMFE_INTERFACE_MATRIX_STATIC,CMFE_INTERFACE_MATRIX_QUASI_STATIC,CMFE_INTERFACE_MATRIX_FIRST_ORDER_DYNAMIC, & + & CMFE_INTERFACE_MATRIX_SECOND_ORDER_DYNAMIC - !>Get the dimensions for a distributed matrix on this computation node - INTERFACE cmfe_DistributedMatrix_DimensionsGet - MODULE PROCEDURE cmfe_DistributedMatrix_DimensionsGetObj - END INTERFACE cmfe_DistributedMatrix_DimensionsGet +!================================================================================================================================== +! +! MESH_ROUTINES +! +!================================================================================================================================== + + !Module parameters + + !> \addtogroup OpenCMISS_MeshConstants OpenCMISS::Iron::Mesh::Constants + !> \brief Mesh constants. + !>@{ + !> \addtogroup OpenCMISS_DecompositionTypes OpenCMISS::Iron::Mesh::DecompositionTypes + !> \brief The Decomposition types parameters + !> \see OpenCMISS::Iron::Mesh,OpenCMISS + !>@{ + INTEGER(INTG), PARAMETER :: CMFE_DECOMPOSITION_ALL_TYPE = DECOMPOSITION_ALL_TYPE !@} + !> \addtogroup OpenCMISS_MeshBoundaryTypes OpenCMISS::Iron::Mesh::MeshBoundaryTypes + !> \brief The boundary type parameters for a mesh domain + !> \see OpenCMISS::Iron::Mesh,OpenCMISS + !>@{ + INTEGER(INTG), PARAMETER :: CMFE_MESH_OFF_DOMAIN_BOUNDARY = MESH_OFF_DOMAIN_BOUNDARY !@} + !>@} + + !Module types + + !Module variables + + !Interfaces + + !>Finishes the creation of a domain decomposition. \see OpenCMISS::Iron::cmfe_Decomposition_CreateStart + INTERFACE cmfe_Decomposition_CreateFinish + MODULE PROCEDURE cmfe_Decomposition_CreateFinishNumber + MODULE PROCEDURE cmfe_Decomposition_CreateFinishObj + END INTERFACE cmfe_Decomposition_CreateFinish + + !>Start the creation of a domain decomposition for a given mesh. \see OpenCMISS::Iron::cmfe_Decomposition_CreateStart + INTERFACE cmfe_Decomposition_CreateStart + MODULE PROCEDURE cmfe_Decomposition_CreateStartNumber + MODULE PROCEDURE cmfe_Decomposition_CreateStartObj + END INTERFACE cmfe_Decomposition_CreateStart + + !>Destroys a domain decomposition. + INTERFACE cmfe_Decomposition_Destroy + MODULE PROCEDURE cmfe_Decomposition_DestroyNumber + MODULE PROCEDURE cmfe_Decomposition_DestroyObj + END INTERFACE cmfe_Decomposition_Destroy + + !>Calculates the element domains for the decomposition of a mesh. + INTERFACE cmfe_Decomposition_ElementDomainCalculate + MODULE PROCEDURE cmfe_Decomposition_ElementDomainCalculateNumber + MODULE PROCEDURE cmfe_Decomposition_ElementDomainCalculateObj + END INTERFACE cmfe_Decomposition_ElementDomainCalculate + + !>Returns the domain for a given element in a decomposition of a mesh. + INTERFACE cmfe_Decomposition_ElementDomainGet + MODULE PROCEDURE cmfe_Decomposition_ElementDomainGetNumber + MODULE PROCEDURE cmfe_Decomposition_ElementDomainGetObj + END INTERFACE cmfe_Decomposition_ElementDomainGet + + !>Sets/changes the domain for a given element in a decomposition of a mesh. + INTERFACE cmfe_Decomposition_ElementDomainSet + MODULE PROCEDURE cmfe_Decomposition_ElementDomainSetNumber + MODULE PROCEDURE cmfe_Decomposition_ElementDomainSetObj + END INTERFACE cmfe_Decomposition_ElementDomainSet + + !>Returns the mesh component number used for the decomposition of a mesh. + INTERFACE cmfe_Decomposition_MeshComponentGet + MODULE PROCEDURE cmfe_Decomposition_MeshComponentGetNumber + MODULE PROCEDURE cmfe_Decomposition_MeshComponentGetObj + END INTERFACE cmfe_Decomposition_MeshComponentGet + + !>Sets/changes the mesh component number used for the decomposition of a mesh. + INTERFACE cmfe_Decomposition_MeshComponentSet + MODULE PROCEDURE cmfe_Decomposition_MeshComponentSetNumber + MODULE PROCEDURE cmfe_Decomposition_MeshComponentSetObj + END INTERFACE cmfe_Decomposition_MeshComponentSet + + !>Returns the number of domains used for the decomposition of a mesh. + INTERFACE cmfe_Decomposition_NumberOfDomainsGet + MODULE PROCEDURE cmfe_Decomposition_NumberOfDomainsGetNumber + MODULE PROCEDURE cmfe_Decomposition_NumberOfDomainsGetObj + END INTERFACE cmfe_Decomposition_NumberOfDomainsGet + + !>Sets/changes the number of domains used for the decomposition of a mesh. + INTERFACE cmfe_Decomposition_NumberOfDomainsSet + MODULE PROCEDURE cmfe_Decomposition_NumberOfDomainsSetNumber + MODULE PROCEDURE cmfe_Decomposition_NumberOfDomainsSetObj + END INTERFACE cmfe_Decomposition_NumberOfDomainsSet + + !>Returns the type of decomposition. + INTERFACE cmfe_Decomposition_TypeGet + MODULE PROCEDURE cmfe_Decomposition_TypeGetNumber + MODULE PROCEDURE cmfe_Decomposition_TypeGetObj + END INTERFACE cmfe_Decomposition_TypeGet + + !>Sets/changes the type of decomposition. + INTERFACE cmfe_Decomposition_TypeSet + MODULE PROCEDURE cmfe_Decomposition_TypeSetNumber + MODULE PROCEDURE cmfe_Decomposition_TypeSetObj + END INTERFACE cmfe_Decomposition_TypeSet + + !>Sets/changes the work group for a decomposition. + INTERFACE cmfe_Decomposition_WorkGroupSet + MODULE PROCEDURE cmfe_Decomposition_WorkGroupSetNumber + MODULE PROCEDURE cmfe_Decomposition_WorkGroupSetObj + END INTERFACE cmfe_Decomposition_WorkGroupSet + + !>Sets/changes whether lines should be calculated for the decomposition. + INTERFACE cmfe_Decomposition_CalculateLinesSet + MODULE PROCEDURE cmfe_Decomposition_CalculateLinesSetNumber + MODULE PROCEDURE cmfe_Decomposition_CalculateLinesSetObj + END INTERFACE cmfe_Decomposition_CalculateLinesSet + + !>Sets/changes whether faces should be calculated for the decomposition. + INTERFACE cmfe_Decomposition_CalculateFacesSet + MODULE PROCEDURE cmfe_Decomposition_CalculateFacesSetNumber + MODULE PROCEDURE cmfe_Decomposition_CalculateFacesSetObj + END INTERFACE cmfe_Decomposition_CalculateFacesSet + + !>Finishes the creation of a mesh. \see OpenCMISS::Iron::cmfe_Mesh_CreateStart + INTERFACE cmfe_Mesh_CreateFinish + MODULE PROCEDURE cmfe_Mesh_CreateFinishNumber + MODULE PROCEDURE cmfe_Mesh_CreateFinishObj + END INTERFACE cmfe_Mesh_CreateFinish + + !>Starts the creation of a mesh. \see OpenCMISS::Iron::cmfe_Mesh_CreateFinish + INTERFACE cmfe_Mesh_CreateStart + MODULE PROCEDURE cmfe_Mesh_CreateStartNumber + MODULE PROCEDURE cmfe_Mesh_CreateStartObj + MODULE PROCEDURE cmfe_Mesh_CreateStartInterfaceObj + END INTERFACE cmfe_Mesh_CreateStart + + !>Destroys a mesh. + INTERFACE cmfe_Mesh_Destroy + MODULE PROCEDURE cmfe_Mesh_DestroyNumber + MODULE PROCEDURE cmfe_Mesh_DestroyObj + END INTERFACE cmfe_Mesh_Destroy + + !>Returns the number of mesh components in a mesh. + INTERFACE cmfe_Mesh_NumberOfComponentsGet + MODULE PROCEDURE cmfe_Mesh_NumberOfComponentsGetNumber + MODULE PROCEDURE cmfe_Mesh_NumberOfComponentsGetObj + END INTERFACE cmfe_Mesh_NumberOfComponentsGet + + !>Sets/changes the number of mesh components in a mesh. + INTERFACE cmfe_Mesh_NumberOfComponentsSet + MODULE PROCEDURE cmfe_Mesh_NumberOfComponentsSetNumber + MODULE PROCEDURE cmfe_Mesh_NumberOfComponentsSetObj + END INTERFACE cmfe_Mesh_NumberOfComponentsSet + + !>Returns the number of elements in a mesh. + INTERFACE cmfe_Mesh_NumberOfElementsGet + MODULE PROCEDURE cmfe_Mesh_NumberOfElementsGetNumber + MODULE PROCEDURE cmfe_Mesh_NumberOfElementsGetObj + END INTERFACE cmfe_Mesh_NumberOfElementsGet + + !>Sets/changes the number of elements in a mesh. + INTERFACE cmfe_Mesh_NumberOfElementsSet + MODULE PROCEDURE cmfe_Mesh_NumberOfElementsSetNumber + MODULE PROCEDURE cmfe_Mesh_NumberOfElementsSetObj + END INTERFACE cmfe_Mesh_NumberOfElementsSet + + !>Sets/changes the surrounding elements calculate flag for the mesh. + INTERFACE cmfe_Mesh_SurroundingElementsCalculateSet + MODULE PROCEDURE cmfe_Mesh_SurroundingElementsCalculateSetNumber + MODULE PROCEDURE cmfe_Mesh_SurroundingElementsCalculateSetObj + END INTERFACE cmfe_Mesh_SurroundingElementsCalculateSet + + !>Sets/changes whether data points topology should be calculated for the decomposition. + INTERFACE cmfe_Mesh_TopologyDataPointsCalculateProjection + MODULE PROCEDURE cmfe_Mesh_TopologyDataPointsCalculateProjectionInterfaceNumber + MODULE PROCEDURE cmfe_Mesh_TopologyDataPointsCalculateProjectionRegionNumber + MODULE PROCEDURE cmfe_Mesh_TopologyDataPointsCalculateProjectionObj + END INTERFACE cmfe_Mesh_TopologyDataPointsCalculateProjection + + !>Returns the basis for an element in a mesh. + INTERFACE cmfe_MeshElements_BasisGet + MODULE PROCEDURE cmfe_MeshElements_BasisGetNumber + MODULE PROCEDURE cmfe_MeshElements_BasisGetObj + END INTERFACE cmfe_MeshElements_BasisGet + + !>Sets/changes the basis for an element in a mesh. + INTERFACE cmfe_MeshElements_BasisSet + MODULE PROCEDURE cmfe_MeshElements_BasisSetNumber + MODULE PROCEDURE cmfe_MeshElements_BasisSetObj + END INTERFACE cmfe_MeshElements_BasisSet + + !>Returns the adjacent elements for a given element and adjacent xi direction for an element in a mesh. + INTERFACE cmfe_MeshElements_AdjacentElementGet + MODULE PROCEDURE cmfe_MeshElements_AdjacentElementGetNumber + MODULE PROCEDURE cmfe_MeshElements_AdjacentElementGetObj + END INTERFACE cmfe_MeshElements_AdjacentElementGet + + !>Finishes the creation of a mesh elements for a mesh component. \see OpenCMISS::Iron::cmfe_MeshElements_CreateStart + INTERFACE cmfe_MeshElements_CreateFinish + MODULE PROCEDURE cmfe_MeshElements_CreateFinishNumber + MODULE PROCEDURE cmfe_MeshElements_CreateFinishObj + END INTERFACE cmfe_MeshElements_CreateFinish + + !>Starts the creation of a mesh elements for a mesh component. \see OpenCMISS::Iron::cmfe_MeshElements_CreateFinish + INTERFACE cmfe_MeshElements_CreateStart + MODULE PROCEDURE cmfe_MeshElements_CreateStartNumber + MODULE PROCEDURE cmfe_MeshElements_CreateStartObj + END INTERFACE cmfe_MeshElements_CreateStart + + !>Gets the mesh boundary type for an element + INTERFACE cmfe_MeshElements_ElementOnBoundaryGet + MODULE PROCEDURE cmfe_MeshElements_ElementOnBoundaryGetNumber + MODULE PROCEDURE cmfe_MeshElements_ElementOnBoundaryGetObj + END INTERFACE cmfe_MeshElements_ElementOnBoundaryGet + + !>Get the mesh elements belonging to a mesh component. + INTERFACE cmfe_Mesh_ElementsGet + MODULE PROCEDURE cmfe_Mesh_ElementsGetNumber + MODULE PROCEDURE cmfe_Mesh_ElementsGetObj + END INTERFACE cmfe_Mesh_ElementsGet + + !>Returns the element nodes for an element in a mesh. + INTERFACE cmfe_MeshElements_NodesGet + MODULE PROCEDURE cmfe_MeshElements_NodesGetNumber + MODULE PROCEDURE cmfe_MeshElements_NodesGetObj + END INTERFACE cmfe_MeshElements_NodesGet + + !>Sets/changes the element nodes for an element in a mesh. + INTERFACE cmfe_MeshElements_NodesSet + MODULE PROCEDURE cmfe_MeshElements_NodesSetNumber + MODULE PROCEDURE cmfe_MeshElements_NodesSetObj + END INTERFACE cmfe_MeshElements_NodesSet + + !>Sets/changes a user node's derivative version for an element in a mesh. + INTERFACE cmfe_MeshElements_UserNodeVersionSet + MODULE PROCEDURE cmfe_MeshElements_UserNodeVersionSetNumber + MODULE PROCEDURE cmfe_MeshElements_UserNodeVersionSetObj + END INTERFACE cmfe_MeshElements_UserNodeVersionSet + + !>Sets/changes a local element's node derivative version for an element in a mesh. + INTERFACE cmfe_MeshElements_LocalElementNodeVersionSet + MODULE PROCEDURE cmfe_MeshElements_LocalElementNodeVersionSetNumber + MODULE PROCEDURE cmfe_MeshElements_LocalElementNodeVersionSetObj + END INTERFACE cmfe_MeshElements_LocalElementNodeVersionSet + + !>Returns the element user number for an element in a mesh. + INTERFACE cmfe_MeshElements_UserNumberGet + MODULE PROCEDURE cmfe_MeshElements_UserNumberGetNumber + MODULE PROCEDURE cmfe_MeshElements_UserNumberGetObj + END INTERFACE cmfe_MeshElements_UserNumberGet + + !>Sets/changes the element user number for an element in a mesh. + INTERFACE cmfe_MeshElements_UserNumberSet + MODULE PROCEDURE cmfe_MeshElements_UserNumberSetNumber + MODULE PROCEDURE cmfe_MeshElements_UserNumberSetObj + END INTERFACE cmfe_MeshElements_UserNumberSet + + !>Sets/changes the element user numbers for all element in a mesh. + INTERFACE cmfe_MeshElements_UserNumbersAllSet + MODULE PROCEDURE cmfe_MeshElements_UserNumbersAllSetNumber + MODULE PROCEDURE cmfe_MeshElements_UserNumbersAllSetObj + END INTERFACE cmfe_MeshElements_UserNumbersAllSet + + !>Returns true if the given node is in the given mesh component. + INTERFACE cmfe_Mesh_NodeExists + MODULE PROCEDURE cmfe_Mesh_NodeExistsNumber + MODULE PROCEDURE cmfe_Mesh_NodeExistsObj + END INTERFACE cmfe_Mesh_NodeExists + + !>Returns true if the given element is in the given mesh component. + INTERFACE cmfe_Mesh_ElementExists + MODULE PROCEDURE cmfe_Mesh_ElementExistsNumber + MODULE PROCEDURE cmfe_Mesh_ElementExistsObj + END INTERFACE cmfe_Mesh_ElementExists + + !>Get the mesh nodes belonging to a mesh component. + INTERFACE cmfe_Mesh_NodesGet + MODULE PROCEDURE cmfe_Mesh_NodesGetNumber + MODULE PROCEDURE cmfe_Mesh_NodesGetObj + END INTERFACE cmfe_Mesh_NodesGet + + !>Get the mesh boundary type for a node. + INTERFACE cmfe_MeshNodes_NodeOnBoundaryGet + MODULE PROCEDURE cmfe_MeshNodes_NodeOnBoundaryGetNumber + MODULE PROCEDURE cmfe_MeshNodes_NodeOnBoundaryGetObj + END INTERFACE cmfe_MeshNodes_NodeOnBoundaryGet - !>Get the row indices and column indices for a sparse matrix - INTERFACE cmfe_DistributedMatrix_StorageLocationsGet - MODULE PROCEDURE cmfe_DistributedMatrix_StorageLocationsGetObj - END INTERFACE cmfe_DistributedMatrix_StorageLocationsGet + !>Returns the number of derivatives for a node in a mesh. + INTERFACE cmfe_MeshNodes_NumberOfDerivativesGet + MODULE PROCEDURE cmfe_MeshNodes_NumberOfDerivativesGetNumber + MODULE PROCEDURE cmfe_MeshNodes_NumberOfDerivativesGetObj + END INTERFACE cmfe_MeshNodes_NumberOfDerivativesGet - !>Get the data array for this matrix on this computation node - INTERFACE cmfe_DistributedMatrix_DataGet - MODULE PROCEDURE cmfe_DistributedMatrix_DataGetIntgObj - MODULE PROCEDURE cmfe_DistributedMatrix_DataGetDPObj - MODULE PROCEDURE cmfe_DistributedMatrix_DataGetSPObj - MODULE PROCEDURE cmfe_DistributedMatrix_DataGetLObj - END INTERFACE cmfe_DistributedMatrix_DataGet + !>Returns the derivatives for a node in a mesh. + INTERFACE cmfe_MeshNodes_DerivativesGet + MODULE PROCEDURE cmfe_MeshNodes_DerivativesGetNumber + MODULE PROCEDURE cmfe_MeshNodes_DerivativesGetObj + END INTERFACE cmfe_MeshNodes_DerivativesGet - !>Restore the data array for this matrix once it has finished being used - INTERFACE cmfe_DistributedMatrix_DataRestore - MODULE PROCEDURE cmfe_DistributedMatrix_DataRestoreIntgObj - MODULE PROCEDURE cmfe_DistributedMatrix_DataRestoreDPObj - MODULE PROCEDURE cmfe_DistributedMatrix_DataRestoreSPObj - MODULE PROCEDURE cmfe_DistributedMatrix_DataRestoreLObj - END INTERFACE cmfe_DistributedMatrix_DataRestore - - !>Get the data type for a distributed vector - INTERFACE cmfe_DistributedVector_DataTypeGet - MODULE PROCEDURE cmfe_DistributedVector_DataTypeGetObj - END INTERFACE cmfe_DistributedVector_DataTypeGet + !>Returns the number of versions for a derivative at a node in a mesh. + INTERFACE cmfe_MeshNodes_NumberOfVersionsGet + MODULE PROCEDURE cmfe_MeshNodes_NumberOfVersionsGetNumber + MODULE PROCEDURE cmfe_MeshNodes_NumberOfVersionsGetObj + END INTERFACE cmfe_MeshNodes_NumberOfVersionsGet - !>Get the data array for this vector on this computation node - INTERFACE cmfe_DistributedVector_DataGet - MODULE PROCEDURE cmfe_DistributedVector_DataGetIntgObj - MODULE PROCEDURE cmfe_DistributedVector_DataGetDPObj - MODULE PROCEDURE cmfe_DistributedVector_DataGetSPObj - MODULE PROCEDURE cmfe_DistributedVector_DataGetLObj - END INTERFACE cmfe_DistributedVector_DataGet + !>Returns the number of nodes in a mesh. + INTERFACE cmfe_MeshNodes_NumberOfNodesGet + MODULE PROCEDURE cmfe_MeshNodes_NumberOfNodesGetNumber + MODULE PROCEDURE cmfe_MeshNodes_NumberOfNodesGetObj + END INTERFACE cmfe_MeshNodes_NumberOfNodesGet - !>Restore the data array for this vector once it has finished being used - INTERFACE cmfe_DistributedVector_DataRestore - MODULE PROCEDURE cmfe_DistributedVector_DataRestoreIntgObj - MODULE PROCEDURE cmfe_DistributedVector_DataRestoreDPObj - MODULE PROCEDURE cmfe_DistributedVector_DataRestoreSPObj - MODULE PROCEDURE cmfe_DistributedVector_DataRestoreLObj - END INTERFACE cmfe_DistributedVector_DataRestore - - PUBLIC cmfe_DistributedMatrix_StorageTypeGet,cmfe_DistributedMatrix_StorageLocationsGet - PUBLIC cmfe_DistributedMatrix_DataTypeGet,cmfe_DistributedMatrix_DimensionsGet - PUBLIC cmfe_DistributedMatrix_DataGet,cmfe_DistributedMatrix_DataRestore - PUBLIC cmfe_DistributedVector_DataTypeGet - PUBLIC cmfe_DistributedVector_DataGet,cmfe_DistributedVector_DataRestore + !>Returns the domain for a given element in a decomposition of a mesh. + INTERFACE cmfe_Decomposition_NodeDomainGet + MODULE PROCEDURE cmfe_Decomposition_NodeDomainGetNumber + MODULE PROCEDURE cmfe_Decomposition_NodeDomainGetObj + END INTERFACE cmfe_Decomposition_NodeDomainGet -!!================================================================================================================================== -!! -!! NODE_ROUTINES -!! -!!================================================================================================================================== + !>Calculates the decomposition topology for data points . + INTERFACE cmfe_Decomposition_TopologyDataProjectionCalculate + MODULE PROCEDURE cmfe_Decomposition_TopologyDataProjectionCalculateObj + END INTERFACE cmfe_Decomposition_TopologyDataProjectionCalculate - !Module parameters + !>Gets the local data point number for data points projected on an element + INTERFACE cmfe_Decomposition_TopologyElementDataPointLocalNumberGet + MODULE PROCEDURE cmfe_Decomposition_TopologyElementDataPointLocalNumberGetObj + END INTERFACE cmfe_Decomposition_TopologyElementDataPointLocalNumberGet - !Module types + !>Gets the user data point number for data points projected on an element + INTERFACE cmfe_Decomposition_TopologyElementDataPointUserNumberGet + MODULE PROCEDURE cmfe_Decomposition_TopologyElementDataPointUserNumberGetObj + END INTERFACE cmfe_Decomposition_TopologyElementDataPointUserNumberGet - !Module variables + !>Gets the number of data points projected on an element + INTERFACE cmfe_Decomposition_TopologyNumberOfElementDataPointsGet + MODULE PROCEDURE cmfe_Decomposition_TopologyNumberOfElementDataPointsGetObj + END INTERFACE cmfe_Decomposition_TopologyNumberOfElementDataPointsGet - !Interfaces + PUBLIC CMFE_DECOMPOSITION_ALL_TYPE,CMFE_DECOMPOSITION_CALCULATED_TYPE,CMFE_DECOMPOSITION_USER_DEFINED_TYPE - !>Finishes the process of creating nodes in a region. \see OpenCMISS::Iron::cmfe_Nodes_CreateStart - INTERFACE cmfe_Nodes_CreateFinish - MODULE PROCEDURE cmfe_Nodes_CreateFinishNumber - MODULE PROCEDURE cmfe_Nodes_CreateFinishObj - END INTERFACE cmfe_Nodes_CreateFinish + PUBLIC CMFE_MESH_OFF_DOMAIN_BOUNDARY,CMFE_MESH_ON_DOMAIN_BOUNDARY - !>Starts the process of creating nodes in a region. \see OpenCMISS::Iron::cmfe_Nodes_CreateFinish - INTERFACE cmfe_Nodes_CreateStart - MODULE PROCEDURE cmfe_Nodes_CreateStartNumber - MODULE PROCEDURE cmfe_Nodes_CreateStartObj - MODULE PROCEDURE cmfe_Nodes_CreateStartInterfaceObj - END INTERFACE cmfe_Nodes_CreateStart + PUBLIC cmfe_Decomposition_CreateFinish,cmfe_Decomposition_CreateStart - !>Destroys nodes. - INTERFACE cmfe_Nodes_Destroy - MODULE PROCEDURE cmfe_Nodes_DestroyNumber - MODULE PROCEDURE cmfe_Nodes_DestroyObj - END INTERFACE cmfe_Nodes_Destroy + PUBLIC cmfe_Decomposition_TopologyDataProjectionCalculate - !>Returns the number of nodes - INTERFACE cmfe_Nodes_NumberOfNodesGet - MODULE PROCEDURE cmfe_Nodes_NumberOfNodesGetNumber - MODULE PROCEDURE cmfe_Nodes_NumberOfNodesGetObj - END INTERFACE cmfe_Nodes_NumberOfNodesGet - - !>Returns the label for a node identified by a given global number. \todo should this be a user number? - INTERFACE cmfe_Nodes_LabelGet - MODULE PROCEDURE cmfe_Nodes_LabelGetCNumber - MODULE PROCEDURE cmfe_Nodes_LabelGetCObj - MODULE PROCEDURE cmfe_Nodes_LabelGetVSNumber - MODULE PROCEDURE cmfe_Nodes_LabelGetVSObj - END INTERFACE cmfe_Nodes_LabelGet - - !>Sets/changes the label for a node identified by a given global number. \todo should this be a user number? - INTERFACE cmfe_Nodes_LabelSet - MODULE PROCEDURE cmfe_Nodes_LabelSetCNumber - MODULE PROCEDURE cmfe_Nodes_LabelSetCObj - MODULE PROCEDURE cmfe_Nodes_LabelSetVSNumber - MODULE PROCEDURE cmfe_Nodes_LabelSetVSObj - END INTERFACE cmfe_Nodes_LabelSet - - !>Returns the user number for a node identified by a given global number. - INTERFACE cmfe_Nodes_UserNumberGet - MODULE PROCEDURE cmfe_Nodes_UserNumberGetNumber - MODULE PROCEDURE cmfe_Nodes_UserNumberGetObj - END INTERFACE cmfe_Nodes_UserNumberGet - - !>Sets/changes the user number for a node identified by a given global number. - INTERFACE cmfe_Nodes_UserNumberSet - MODULE PROCEDURE cmfe_Nodes_UserNumberSetNumber - MODULE PROCEDURE cmfe_Nodes_UserNumberSetObj - END INTERFACE cmfe_Nodes_UserNumberSet - - !>Sets/changes the all user number for nodes. - INTERFACE cmfe_Nodes_UserNumbersAllSet - MODULE PROCEDURE cmfe_Nodes_UserNumbersAllSetNumber - MODULE PROCEDURE cmfe_Nodes_UserNumbersAllSetObj - END INTERFACE cmfe_Nodes_UserNumbersAllSet - - PUBLIC cmfe_Nodes_CreateFinish,cmfe_Nodes_CreateStart - - PUBLIC cmfe_Nodes_Destroy - - PUBLIC cmfe_Nodes_NumberOfNodesGet - - PUBLIC cmfe_Nodes_LabelGet,cmfe_Nodes_LabelSet - - PUBLIC cmfe_Nodes_UserNumberGet,cmfe_Nodes_UserNumberSet,cmfe_Nodes_UserNumbersAllSet + PUBLIC cmfe_Decomposition_TopologyElementDataPointLocalNumberGet -!!================================================================================================================================== -!! -!! PROBLEM_CONSTANTS_ROUTINES -!! -!!================================================================================================================================== + PUBLIC cmfe_Decomposition_TopologyElementDataPointUserNumberGet - !Module parameters + PUBLIC cmfe_Decomposition_TopologyNumberOfElementDataPointsGet - !> \addtogroup OpenCMISS_ProblemConstants OpenCMISS::Iron::Problem::Constants - !> \brief Problem constants. - !>@{ - !> \addtogroup OpenCMISS_ProblemClasses OpenCMISS::Iron::Problem::Classes - !> \brief Problem classes. - !> \see OpenCMISS::Iron::Problem,OpenCMISS - !>@{ - INTEGER(INTG), PARAMETER :: CMFE_PROBLEM_NO_CLASS = PROBLEM_NO_CLASS !@} - !> \addtogroup OpenCMISS_ProblemTypes OpenCMISS::Iron::Problem::Types - !> \brief Problem Types. - !> \see OpenCMISS::Iron::Problem,OpenCMISS - !>@{ - INTEGER(INTG), PARAMETER :: CMFE_PROBLEM_NO_TYPE = PROBLEM_NO_TYPE !@} - !> \addtogroup OpenCMISS_ProblemSubtypes OpenCMISS::Iron::Problem::Subtypes - !> \brief Problem Subtypes. - !> \see OpenCMISS::Iron::Problem,OpenCMISS - !>@{ - INTEGER(INTG), PARAMETER :: CMFE_PROBLEM_NO_SUBTYPE = PROBLEM_NO_SUBTYPE !@} - !> \addtogroup OpenCMISS_ProblemControlLoopTypes OpenCMISS::Iron::Problem::ControlLoopTypes - !> \brief Problem control loop type parameters - !> \see OpenCMISS::Iron::Problem,OpenCMISS - !>@{ - INTEGER(INTG), PARAMETER :: CMFE_PROBLEM_CONTROL_SIMPLE_TYPE = PROBLEM_CONTROL_SIMPLE_TYPE !@} - !>@} + PUBLIC cmfe_Decomposition_Destroy - !Module types + PUBLIC cmfe_Decomposition_ElementDomainCalculate - !Module variables + PUBLIC cmfe_Decomposition_ElementDomainGet,cmfe_Decomposition_ElementDomainSet - !Interfaces + PUBLIC cmfe_Decomposition_MeshComponentGet,cmfe_Decomposition_MeshComponentSet - PUBLIC CMFE_PROBLEM_NO_CLASS,CMFE_PROBLEM_ELASTICITY_CLASS,CMFE_PROBLEM_FLUID_MECHANICS_CLASS, & - & CMFE_PROBLEM_ELECTROMAGNETICS_CLASS, & - & CMFE_PROBLEM_CLASSICAL_FIELD_CLASS,CMFE_PROBLEM_BIOELECTRICS_CLASS,CMFE_PROBLEM_MODAL_CLASS,CMFE_PROBLEM_FITTING_CLASS, & - & CMFE_PROBLEM_OPTIMISATION_CLASS,CMFE_PROBLEM_MULTI_PHYSICS_CLASS + PUBLIC cmfe_Decomposition_NumberOfDomainsGet,cmfe_Decomposition_NumberOfDomainsSet - PUBLIC CMFE_PROBLEM_NO_TYPE + PUBLIC cmfe_Decomposition_TypeGet,cmfe_Decomposition_TypeSet - PUBLIC CMFE_PROBLEM_LINEAR_ELASTICITY_TYPE,CMFE_PROBLEM_FINITE_ELASTICITY_TYPE + PUBLIC cmfe_Decomposition_WorkGroupSet - PUBLIC CMFE_PROBLEM_LINEAR_ELASTICITY_CONTACT_TYPE, CMFE_PROBLEM_FINITE_ELASTICITY_CONTACT_TYPE + PUBLIC cmfe_Decomposition_NodeDomainGet - PUBLIC CMFE_PROBLEM_STOKES_EQUATION_TYPE,CMFE_PROBLEM_NAVIER_STOKES_EQUATION_TYPE,CMFE_PROBLEM_DARCY_EQUATION_TYPE, & - & CMFE_PROBLEM_POISEUILLE_EQUATION_TYPE,CMFE_PROBLEM_BURGERS_EQUATION_TYPE + PUBLIC cmfe_Mesh_CreateFinish,cmfe_Mesh_CreateStart - PUBLIC CMFE_PROBLEM_ELECTROSTATIC_TYPE,CMFE_PROBLEM_MAGNETOSTATIC_TYPE,CMFE_PROBLEM_MAXWELLS_EQUATIONS_TYPE + PUBLIC cmfe_Mesh_Destroy - PUBLIC CMFE_PROBLEM_LAPLACE_EQUATION_TYPE,CMFE_PROBLEM_POISSON_EQUATION_TYPE,CMFE_PROBLEM_HELMHOLTZ_EQUATION_TYPE, & - & CMFE_PROBLEM_WAVE_EQUATION_TYPE,CMFE_PROBLEM_DIFFUSION_EQUATION_TYPE,CMFE_PROBLEM_ADVECTION_DIFFUSION_EQUATION_TYPE, & - & CMFE_PROBLEM_REACTION_DIFFUSION_EQUATION_TYPE,CMFE_PROBLEM_BIHARMONIC_EQUATION_TYPE + PUBLIC cmfe_Mesh_NumberOfComponentsGet,cmfe_Mesh_NumberOfComponentsSet - PUBLIC CMFE_PROBLEM_MONODOMAIN_EQUATION_TYPE,CMFE_PROBLEM_BIDOMAIN_EQUATION_TYPE + PUBLIC cmfe_Mesh_NumberOfElementsGet,cmfe_Mesh_NumberOfElementsSet - PUBLIC CMFE_PROBLEM_LINEAR_ELASTIC_MODAL_TYPE + PUBLIC cmfe_MeshElements_BasisGet,cmfe_MeshElements_BasisSet - PUBLIC CMFE_PROBLEM_DATA_FITTING_TYPE + PUBLIC cmfe_MeshElements_AdjacentElementGet - PUBLIC CMFE_PROBLEM_FINITE_ELASTICITY_DARCY_TYPE, & - & CMFE_PROBLEM_FINITE_ELASTICITY_STOKES_TYPE, CMFE_PROBLEM_FINITE_ELASTICITY_NAVIER_STOKES_TYPE, & - & CMFE_PROBLEM_DIFFUSION_DIFFUSION_TYPE, CMFE_PROBLEM_DIFFUSION_ADVECTION_DIFFUSION_TYPE, & - & CMFE_PROBLEM_MULTI_COMPARTMENT_TRANSPORT_TYPE,CMFE_PROBLEM_FINITE_ELASTICITY_FLUID_PRESSURE_TYPE, & - & CMFE_PROBLEM_BIOELECTRIC_FINITE_ELASTICITY_TYPE + PUBLIC cmfe_MeshElements_ElementOnBoundaryGet - PUBLIC CMFE_PROBLEM_NO_SUBTYPE + PUBLIC cmfe_MeshElements_UserNodeVersionSet,cmfe_MeshElements_LocalElementNodeVersionSet - PUBLIC CMFE_PROBLEM_LE_CONTACT_TRANSFORM_REPROJECT_SUBTYPE, CMFE_PROBLEM_LE_CONTACT_TRANSFORM_SUBTYPE, & - & CMFE_PROBLEM_LE_CONTACT_REPROJECT_SUBTYPE + PUBLIC cmfe_MeshElements_CreateFinish,cmfe_MeshElements_CreateStart - PUBLIC CMFE_PROBLEM_FE_CONTACT_TRANSFORM_REPROJECT_SUBTYPE, CMFE_PROBLEM_FE_CONTACT_TRANSFORM_SUBTYPE, & - & CMFE_PROBLEM_FE_CONTACT_REPROJECT_SUBTYPE + PUBLIC cmfe_MeshElements_NodesGet,cmfe_MeshElements_NodesSet - PUBLIC CMFE_PROBLEM_STATIC_STOKES_SUBTYPE,CMFE_PROBLEM_LAPLACE_STOKES_SUBTYPE,CMFE_PROBLEM_TRANSIENT_STOKES_SUBTYPE, & - & CMFE_PROBLEM_OPTIMISED_STOKES_SUBTYPE,CMFE_PROBLEM_ALE_STOKES_SUBTYPE,CMFE_PROBLEM_PGM_STOKES_SUBTYPE + PUBLIC cmfe_MeshElements_UserNumberGet,cmfe_MeshElements_UserNumberSet - PUBLIC CMFE_PROBLEM_STATIC_NAVIER_STOKES_SUBTYPE,CMFE_PROBLEM_LAPLACE_NAVIER_STOKES_SUBTYPE, & - & CMFE_PROBLEM_TRANSIENT_NAVIER_STOKES_SUBTYPE,CMFE_PROBLEM_TRANSIENT_RBS_NAVIER_STOKES_SUBTYPE, & - & CMFE_PROBLEM_PGM_NAVIER_STOKES_SUBTYPE,CMFE_PROBLEM_OPTIMISED_NAVIER_STOKES_SUBTYPE, & - & CMFE_PROBLEM_TRANSIENT1D_NAVIER_STOKES_SUBTYPE,CMFE_PROBLEM_COUPLED1D0D_NAVIER_STOKES_SUBTYPE, & - & CMFE_PROBLEM_TRANSIENT1D_ADV_NAVIER_STOKES_SUBTYPE,CMFE_PROBLEM_COUPLED1D0D_ADV_NAVIER_STOKES_SUBTYPE, & - & CMFE_PROBLEM_STREE1D0D_ADV_SUBTYPE,CMFE_PROBLEM_STREE1D0D_SUBTYPE, & - & CMFE_PROBLEM_ALE_NAVIER_STOKES_SUBTYPE,CMFE_PROBLEM_MULTISCALE_NAVIER_STOKES_SUBTYPE + PUBLIC cmfe_MeshElements_UserNumbersAllSet - PUBLIC CMFE_PROBLEM_STANDARD_DARCY_SUBTYPE,CMFE_PROBLEM_QUASISTATIC_DARCY_SUBTYPE,CMFE_PROBLEM_ALE_DARCY_SUBTYPE, & - & CMFE_PROBLEM_TRANSIENT_DARCY_SUBTYPE,CMFE_PROBLEM_PGM_DARCY_SUBTYPE,CMFE_PROBLEM_PGM_TRANSIENT_DARCY_SUBTYPE + PUBLIC cmfe_MeshNodes_NodeOnBoundaryGet - PUBLIC CMFE_PROBLEM_STATIC_POISEUILLE_SUBTYPE,CMFE_PROBLEM_DYNAMIC_POISEUILLE_SUBTYPE + PUBLIC cmfe_MeshNodes_NumberOfDerivativesGet,cmfe_MeshNodes_DerivativesGet - PUBLIC CMFE_PROBLEM_STATIC_BURGERS_SUBTYPE,CMFE_PROBLEM_DYNAMIC_BURGERS_SUBTYPE + PUBLIC cmfe_MeshNodes_NumberOfVersionsGet - PUBLIC CMFE_PROBLEM_STANDARD_LAPLACE_SUBTYPE,CMFE_PROBLEM_GENERALISED_LAPLACE_SUBTYPE, & - & CMFE_PROBLEM_MONODOMAIN_STRANG_SPLITTING_EQUATION_TYPE + PUBLIC cmfe_MeshNodes_NumberOfNodesGet - PUBLIC CMFE_PROBLEM_LINEAR_SOURCE_POISSON_SUBTYPE,CMFE_PROBLEM_NONLINEAR_SOURCE_POISSON_SUBTYPE, & - & CMFE_PROBLEM_LINEAR_PRESSURE_POISSON_SUBTYPE,CMFE_PROBLEM_NONLINEAR_PRESSURE_POISSON_SUBTYPE, & - & CMFE_PROBLEM_ALE_PRESSURE_POISSON_SUBTYPE, CMFE_PROBLEM_FITTED_PRESSURE_POISSON_SUBTYPE, & - & CMFE_PROBLEM_EXTRACELLULAR_BIDOMAIN_POISSON_SUBTYPE + PUBLIC cmfe_Mesh_ElementsGet - PUBLIC CMFE_PROBLEM_STANDARD_HELMHOLTZ_SUBTYPE,CMFE_PROBLEM_GENERALISED_HELMHOLTZ_SUBTYPE + PUBLIC cmfe_Mesh_NodesGet - PUBLIC CMFE_PROBLEM_NO_SOURCE_DIFFUSION_SUBTYPE,CMFE_PROBLEM_LINEAR_SOURCE_DIFFUSION_SUBTYPE, & - & CMFE_PROBLEM_NONLINEAR_SOURCE_DIFFUSION_SUBTYPE + PUBLIC cmfe_Mesh_NodeExists,cmfe_Mesh_ElementExists - PUBLIC CMFE_PROBLEM_NO_SOURCE_ALE_DIFFUSION_SUBTYPE,CMFE_PROBLEM_LINEAR_SOURCE_ALE_DIFFUSION_SUBTYPE, & - & CMFE_PROBLEM_NONLINEAR_SOURCE_ALE_DIFFUSION_SUBTYPE + PUBLIC cmfe_Mesh_SurroundingElementsCalculateSet - PUBLIC CMFE_PROBLEM_NO_SOURCE_ADVECTION_DIFFUSION_SUBTYPE,CMFE_PROBLEM_LINEAR_SOURCE_ADVECTION_DIFFUSION_SUBTYPE, & - & CMFE_PROBLEM_NONLINEAR_SOURCE_ADVECTION_DIFFUSION_SUBTYPE + PUBLIC cmfe_Mesh_TopologyDataPointsCalculateProjection - PUBLIC CMFE_PROBLEM_NO_SOURCE_ALE_ADVECTION_DIFFUSION_SUBTYPE,CMFE_PROBLEM_LINEAR_SOURCE_ALE_ADVECTION_DIFFUSION_SUBTYPE, & - & CMFE_PROBLEM_NONLINEAR_SOURCE_ALE_ADVECTION_DIFFUSION_SUBTYPE +!================================================================================================================================== +! +! DistributedMatrixVector +! +!================================================================================================================================== + + !> \addtogroup OpenCMISS_MatrixVectorConstants OpenCMISS::Iron::MatrixVector::Constants + !> \brief Distributed matrix and vector function constants. + !>@{ + !> \addtogroup OpenCMISS_MatrixStorageTypes OpenCMISS::Iron::MatrixVector::MatrixStorageTypes + !> \brief Type of matrix storage. + !> \see OpenCMISS::Iron::MatrixVectorConstants,OpenCMISS + !>@{ + INTEGER(INTG), PARAMETER :: CMFE_MATRIX_BLOCK_STORAGE_TYPE=DISTRIBUTED_MATRIX_BLOCK_STORAGE_TYPE !@} + !> \addtogroup OpenCMISS_MatrixVectorDataTypes OpenCMISS::Iron::MatrixVector::DataTypes + !> \brief Type of data stored in matrices and vectors. + !> \see OpenCMISS::Iron::MatrixVectorConstants,OpenCMISS + !>@{ + INTEGER(INTG), PARAMETER :: CMFE_MATRIX_VECTOR_INTG_TYPE=DISTRIBUTED_MATRIX_VECTOR_INTG_TYPE !@} + !>@} + + PUBLIC CMFE_MATRIX_BLOCK_STORAGE_TYPE,CMFE_MATRIX_DIAGONAL_STORAGE_TYPE,CMFE_MATRIX_COLUMN_MAJOR_STORAGE_TYPE, & + & CMFE_MATRIX_ROW_MAJOR_STORAGE_TYPE,CMFE_MATRIX_COMPRESSED_ROW_STORAGE_TYPE,CMFE_MATRIX_COMPRESSED_COLUMN_STORAGE_TYPE, & + & CMFE_MATRIX_ROW_COLUMN_STORAGE_TYPE + + PUBLIC CMFE_MATRIX_VECTOR_INTG_TYPE,CMFE_MATRIX_VECTOR_SP_TYPE,CMFE_MATRIX_VECTOR_DP_TYPE,CMFE_MATRIX_VECTOR_L_TYPE + + !Note that currently we don't have any user number based routines for distributed matrices + !as if we can't use a pointer to a CMISS object, a pointer to matrix data isn't going to + !be much use either. It's also more awkward when matrices and vectors themselves don't have + !user numbers and there are multiple ways to access them through user numbers, eg. solver equations + !matrices or equations set matrices + + !>Get the storage type for a distributed matrix + INTERFACE cmfe_DistributedMatrix_StorageTypeGet + MODULE PROCEDURE cmfe_DistributedMatrix_StorageTypeGetObj + END INTERFACE cmfe_DistributedMatrix_StorageTypeGet + + !>Get the data type for a distributed matrix + INTERFACE cmfe_DistributedMatrix_DataTypeGet + MODULE PROCEDURE cmfe_DistributedMatrix_DataTypeGetObj + END INTERFACE cmfe_DistributedMatrix_DataTypeGet + + !>Get the dimensions for a distributed matrix on this computation node + INTERFACE cmfe_DistributedMatrix_DimensionsGet + MODULE PROCEDURE cmfe_DistributedMatrix_DimensionsGetObj + END INTERFACE cmfe_DistributedMatrix_DimensionsGet + + !>Get the row indices and column indices for a sparse matrix + INTERFACE cmfe_DistributedMatrix_StorageLocationsGet + MODULE PROCEDURE cmfe_DistributedMatrix_StorageLocationsGetObj + END INTERFACE cmfe_DistributedMatrix_StorageLocationsGet + + !>Get the data array for this matrix on this computation node + INTERFACE cmfe_DistributedMatrix_DataGet + MODULE PROCEDURE cmfe_DistributedMatrix_DataGetIntgObj + MODULE PROCEDURE cmfe_DistributedMatrix_DataGetDPObj + MODULE PROCEDURE cmfe_DistributedMatrix_DataGetSPObj + MODULE PROCEDURE cmfe_DistributedMatrix_DataGetLObj + END INTERFACE cmfe_DistributedMatrix_DataGet + + !>Restore the data array for this matrix once it has finished being used + INTERFACE cmfe_DistributedMatrix_DataRestore + MODULE PROCEDURE cmfe_DistributedMatrix_DataRestoreIntgObj + MODULE PROCEDURE cmfe_DistributedMatrix_DataRestoreDPObj + MODULE PROCEDURE cmfe_DistributedMatrix_DataRestoreSPObj + MODULE PROCEDURE cmfe_DistributedMatrix_DataRestoreLObj + END INTERFACE cmfe_DistributedMatrix_DataRestore + + !>Get the data type for a distributed vector + INTERFACE cmfe_DistributedVector_DataTypeGet + MODULE PROCEDURE cmfe_DistributedVector_DataTypeGetObj + END INTERFACE cmfe_DistributedVector_DataTypeGet + + !>Get the data array for this vector on this computation node + INTERFACE cmfe_DistributedVector_DataGet + MODULE PROCEDURE cmfe_DistributedVector_DataGetIntgObj + MODULE PROCEDURE cmfe_DistributedVector_DataGetDPObj + MODULE PROCEDURE cmfe_DistributedVector_DataGetSPObj + MODULE PROCEDURE cmfe_DistributedVector_DataGetLObj + END INTERFACE cmfe_DistributedVector_DataGet + + !>Restore the data array for this vector once it has finished being used + INTERFACE cmfe_DistributedVector_DataRestore + MODULE PROCEDURE cmfe_DistributedVector_DataRestoreIntgObj + MODULE PROCEDURE cmfe_DistributedVector_DataRestoreDPObj + MODULE PROCEDURE cmfe_DistributedVector_DataRestoreSPObj + MODULE PROCEDURE cmfe_DistributedVector_DataRestoreLObj + END INTERFACE cmfe_DistributedVector_DataRestore + + PUBLIC cmfe_DistributedMatrix_StorageTypeGet,cmfe_DistributedMatrix_StorageLocationsGet + PUBLIC cmfe_DistributedMatrix_DataTypeGet,cmfe_DistributedMatrix_DimensionsGet + PUBLIC cmfe_DistributedMatrix_DataGet,cmfe_DistributedMatrix_DataRestore + PUBLIC cmfe_DistributedVector_DataTypeGet + PUBLIC cmfe_DistributedVector_DataGet,cmfe_DistributedVector_DataRestore + +!================================================================================================================================== +! +! NODE_ROUTINES +! +!================================================================================================================================== + + !Module parameters + + !Module types + + !Module variables + + !Interfaces + + !>Finishes the process of creating nodes in a region. \see OpenCMISS::Iron::cmfe_Nodes_CreateStart + INTERFACE cmfe_Nodes_CreateFinish + MODULE PROCEDURE cmfe_Nodes_CreateFinishNumber + MODULE PROCEDURE cmfe_Nodes_CreateFinishObj + END INTERFACE cmfe_Nodes_CreateFinish + + !>Starts the process of creating nodes in a region. \see OpenCMISS::Iron::cmfe_Nodes_CreateFinish + INTERFACE cmfe_Nodes_CreateStart + MODULE PROCEDURE cmfe_Nodes_CreateStartNumber + MODULE PROCEDURE cmfe_Nodes_CreateStartObj + MODULE PROCEDURE cmfe_Nodes_CreateStartInterfaceObj + END INTERFACE cmfe_Nodes_CreateStart + + !>Destroys nodes. + INTERFACE cmfe_Nodes_Destroy + MODULE PROCEDURE cmfe_Nodes_DestroyNumber + MODULE PROCEDURE cmfe_Nodes_DestroyObj + END INTERFACE cmfe_Nodes_Destroy + + !>Returns the number of nodes + INTERFACE cmfe_Nodes_NumberOfNodesGet + MODULE PROCEDURE cmfe_Nodes_NumberOfNodesGetNumber + MODULE PROCEDURE cmfe_Nodes_NumberOfNodesGetObj + END INTERFACE cmfe_Nodes_NumberOfNodesGet + + !>Returns the label for a node identified by a given global number. \todo should this be a user number? + INTERFACE cmfe_Nodes_LabelGet + MODULE PROCEDURE cmfe_Nodes_LabelGetCNumber + MODULE PROCEDURE cmfe_Nodes_LabelGetCObj + MODULE PROCEDURE cmfe_Nodes_LabelGetVSNumber + MODULE PROCEDURE cmfe_Nodes_LabelGetVSObj + END INTERFACE cmfe_Nodes_LabelGet + + !>Sets/changes the label for a node identified by a given global number. \todo should this be a user number? + INTERFACE cmfe_Nodes_LabelSet + MODULE PROCEDURE cmfe_Nodes_LabelSetCNumber + MODULE PROCEDURE cmfe_Nodes_LabelSetCObj + MODULE PROCEDURE cmfe_Nodes_LabelSetVSNumber + MODULE PROCEDURE cmfe_Nodes_LabelSetVSObj + END INTERFACE cmfe_Nodes_LabelSet + + !>Returns the user number for a node identified by a given global number. + INTERFACE cmfe_Nodes_UserNumberGet + MODULE PROCEDURE cmfe_Nodes_UserNumberGetNumber + MODULE PROCEDURE cmfe_Nodes_UserNumberGetObj + END INTERFACE cmfe_Nodes_UserNumberGet + + !>Sets/changes the user number for a node identified by a given global number. + INTERFACE cmfe_Nodes_UserNumberSet + MODULE PROCEDURE cmfe_Nodes_UserNumberSetNumber + MODULE PROCEDURE cmfe_Nodes_UserNumberSetObj + END INTERFACE cmfe_Nodes_UserNumberSet + + !>Sets/changes the all user number for nodes. + INTERFACE cmfe_Nodes_UserNumbersAllSet + MODULE PROCEDURE cmfe_Nodes_UserNumbersAllSetNumber + MODULE PROCEDURE cmfe_Nodes_UserNumbersAllSetObj + END INTERFACE cmfe_Nodes_UserNumbersAllSet + + PUBLIC cmfe_Nodes_CreateFinish,cmfe_Nodes_CreateStart + + PUBLIC cmfe_Nodes_Destroy + + PUBLIC cmfe_Nodes_NumberOfNodesGet + + PUBLIC cmfe_Nodes_LabelGet,cmfe_Nodes_LabelSet + + PUBLIC cmfe_Nodes_UserNumberGet,cmfe_Nodes_UserNumberSet,cmfe_Nodes_UserNumbersAllSet + +!================================================================================================================================== +! +! PROBLEM_CONSTANTS_ROUTINES +! +!================================================================================================================================== + + !Module parameters + + !> \addtogroup OpenCMISS_ProblemConstants OpenCMISS::Iron::Problem::Constants + !> \brief Problem constants. + !>@{ + !> \addtogroup OpenCMISS_ProblemClasses OpenCMISS::Iron::Problem::Classes + !> \brief Problem classes. + !> \see OpenCMISS::Iron::Problem,OpenCMISS + !>@{ + INTEGER(INTG), PARAMETER :: CMFE_PROBLEM_NO_CLASS = PROBLEM_NO_CLASS !@} + !> \addtogroup OpenCMISS_ProblemTypes OpenCMISS::Iron::Problem::Types + !> \brief Problem Types. + !> \see OpenCMISS::Iron::Problem,OpenCMISS + !>@{ + INTEGER(INTG), PARAMETER :: CMFE_PROBLEM_NO_TYPE = PROBLEM_NO_TYPE !@} + !> \addtogroup OpenCMISS_ProblemSubtypes OpenCMISS::Iron::Problem::Subtypes + !> \brief Problem Subtypes. + !> \see OpenCMISS::Iron::Problem,OpenCMISS + !>@{ + INTEGER(INTG), PARAMETER :: CMFE_PROBLEM_NO_SUBTYPE = PROBLEM_NO_SUBTYPE !@} + !> \addtogroup OpenCMISS_ProblemControlLoopTypes OpenCMISS::Iron::Problem::ControlLoopTypes + !> \brief Problem control loop type parameters + !> \see OpenCMISS::Iron::Problem,OpenCMISS + !>@{ + INTEGER(INTG), PARAMETER :: CMFE_PROBLEM_CONTROL_SIMPLE_TYPE = PROBLEM_CONTROL_SIMPLE_TYPE !@} + !>@} + + !Module types + + !Module variables + + !Interfaces + + PUBLIC CMFE_PROBLEM_NO_CLASS,CMFE_PROBLEM_ELASTICITY_CLASS,CMFE_PROBLEM_FLUID_MECHANICS_CLASS, & + & CMFE_PROBLEM_ELECTROMAGNETICS_CLASS, & + & CMFE_PROBLEM_CLASSICAL_FIELD_CLASS,CMFE_PROBLEM_BIOELECTRICS_CLASS,CMFE_PROBLEM_MODAL_CLASS,CMFE_PROBLEM_FITTING_CLASS, & + & CMFE_PROBLEM_OPTIMISATION_CLASS,CMFE_PROBLEM_MULTI_PHYSICS_CLASS + + PUBLIC CMFE_PROBLEM_NO_TYPE + + PUBLIC CMFE_PROBLEM_LINEAR_ELASTICITY_TYPE,CMFE_PROBLEM_FINITE_ELASTICITY_TYPE + + PUBLIC CMFE_PROBLEM_LINEAR_ELASTICITY_CONTACT_TYPE, CMFE_PROBLEM_FINITE_ELASTICITY_CONTACT_TYPE + + PUBLIC CMFE_PROBLEM_STOKES_EQUATION_TYPE,CMFE_PROBLEM_NAVIER_STOKES_EQUATION_TYPE,CMFE_PROBLEM_DARCY_EQUATION_TYPE, & + & CMFE_PROBLEM_POISEUILLE_EQUATION_TYPE,CMFE_PROBLEM_BURGERS_EQUATION_TYPE + + PUBLIC CMFE_PROBLEM_ELECTROSTATIC_TYPE,CMFE_PROBLEM_MAGNETOSTATIC_TYPE,CMFE_PROBLEM_MAXWELLS_EQUATIONS_TYPE + + PUBLIC CMFE_PROBLEM_LAPLACE_EQUATION_TYPE,CMFE_PROBLEM_POISSON_EQUATION_TYPE,CMFE_PROBLEM_HELMHOLTZ_EQUATION_TYPE, & + & CMFE_PROBLEM_WAVE_EQUATION_TYPE,CMFE_PROBLEM_DIFFUSION_EQUATION_TYPE,CMFE_PROBLEM_ADVECTION_DIFFUSION_EQUATION_TYPE, & + & CMFE_PROBLEM_REACTION_DIFFUSION_EQUATION_TYPE,CMFE_PROBLEM_BIHARMONIC_EQUATION_TYPE + + PUBLIC CMFE_PROBLEM_MONODOMAIN_EQUATION_TYPE,CMFE_PROBLEM_BIDOMAIN_EQUATION_TYPE + + PUBLIC CMFE_PROBLEM_LINEAR_ELASTIC_MODAL_TYPE + + PUBLIC CMFE_PROBLEM_DATA_FITTING_TYPE + + PUBLIC CMFE_PROBLEM_FINITE_ELASTICITY_DARCY_TYPE, & + & CMFE_PROBLEM_FINITE_ELASTICITY_STOKES_TYPE, CMFE_PROBLEM_FINITE_ELASTICITY_NAVIER_STOKES_TYPE, & + & CMFE_PROBLEM_DIFFUSION_DIFFUSION_TYPE, CMFE_PROBLEM_DIFFUSION_ADVECTION_DIFFUSION_TYPE, & + & CMFE_PROBLEM_MULTI_COMPARTMENT_TRANSPORT_TYPE,CMFE_PROBLEM_FINITE_ELASTICITY_FLUID_PRESSURE_TYPE, & + & CMFE_PROBLEM_BIOELECTRIC_FINITE_ELASTICITY_TYPE + + PUBLIC CMFE_PROBLEM_NO_SUBTYPE + + PUBLIC CMFE_PROBLEM_LE_CONTACT_TRANSFORM_REPROJECT_SUBTYPE, CMFE_PROBLEM_LE_CONTACT_TRANSFORM_SUBTYPE, & + & CMFE_PROBLEM_LE_CONTACT_REPROJECT_SUBTYPE + + PUBLIC CMFE_PROBLEM_FE_CONTACT_TRANSFORM_REPROJECT_SUBTYPE, CMFE_PROBLEM_FE_CONTACT_TRANSFORM_SUBTYPE, & + & CMFE_PROBLEM_FE_CONTACT_REPROJECT_SUBTYPE + + PUBLIC CMFE_PROBLEM_STATIC_STOKES_SUBTYPE,CMFE_PROBLEM_LAPLACE_STOKES_SUBTYPE,CMFE_PROBLEM_TRANSIENT_STOKES_SUBTYPE, & + & CMFE_PROBLEM_OPTIMISED_STOKES_SUBTYPE,CMFE_PROBLEM_ALE_STOKES_SUBTYPE,CMFE_PROBLEM_PGM_STOKES_SUBTYPE - PUBLIC CMFE_PROBLEM_NO_SOURCE_STATIC_ADVEC_DIFF_SUBTYPE,CMFE_PROBLEM_LINEAR_SOURCE_STATIC_ADVEC_DIFF_SUBTYPE, & - & CMFE_PROBLEM_NONLINEAR_SOURCE_STATIC_ADVEC_DIFF_SUBTYPE + PUBLIC CMFE_PROBLEM_STATIC_NAVIER_STOKES_SUBTYPE,CMFE_PROBLEM_LAPLACE_NAVIER_STOKES_SUBTYPE, & + & CMFE_PROBLEM_TRANSIENT_NAVIER_STOKES_SUBTYPE,CMFE_PROBLEM_TRANSIENT_RBS_NAVIER_STOKES_SUBTYPE, & + & CMFE_PROBLEM_PGM_NAVIER_STOKES_SUBTYPE,CMFE_PROBLEM_OPTIMISED_NAVIER_STOKES_SUBTYPE, & + & CMFE_PROBLEM_TRANSIENT1D_NAVIER_STOKES_SUBTYPE,CMFE_PROBLEM_COUPLED1D0D_NAVIER_STOKES_SUBTYPE, & + & CMFE_PROBLEM_TRANSIENT1D_ADV_NAVIER_STOKES_SUBTYPE,CMFE_PROBLEM_COUPLED1D0D_ADV_NAVIER_STOKES_SUBTYPE, & + & CMFE_PROBLEM_STREE1D0D_ADV_SUBTYPE,CMFE_PROBLEM_STREE1D0D_SUBTYPE, & + & CMFE_PROBLEM_ALE_NAVIER_STOKES_SUBTYPE,CMFE_PROBLEM_MULTISCALE_NAVIER_STOKES_SUBTYPE - PUBLIC CMFE_PROBLEM_CELLML_REAC_INTEG_REAC_DIFF_STRANG_SPLIT_SUBTYPE, & - & CMFE_PROBLEM_CELLML_REAC_EVAL_REAC_DIFF_NO_SPLIT_SUBTYPE, & - & CMFE_PROBLEM_CONSTANT_REAC_DIFF_NO_SPLIT_SUBTYPE + PUBLIC CMFE_PROBLEM_STANDARD_DARCY_SUBTYPE,CMFE_PROBLEM_QUASISTATIC_DARCY_SUBTYPE,CMFE_PROBLEM_ALE_DARCY_SUBTYPE, & + & CMFE_PROBLEM_TRANSIENT_DARCY_SUBTYPE,CMFE_PROBLEM_PGM_DARCY_SUBTYPE,CMFE_PROBLEM_PGM_TRANSIENT_DARCY_SUBTYPE - PUBLIC CMFE_PROBLEM_STATIC_FITTING_SUBTYPE,CMFE_PROBLEM_STANDARD_DATA_FITTING_SUBTYPE, & - & CMFE_PROBLEM_GENERALISED_DATA_FITTING_SUBTYPE, & - & CMFE_PROBLEM_VECTOR_DATA_FITTING_SUBTYPE,CMFE_PROBLEM_DIV_FREE_VECTOR_DATA_FITTING_SUBTYPE, & - & CMFE_PROBLEM_VECTOR_DATA_PRE_FITTING_SUBTYPE,CMFE_PROBLEM_DIV_FREE_VECTOR_DATA_PRE_FITTING_SUBTYPE, & - & CMFE_PROBLEM_MAT_PROPERTIES_DATA_FITTING_SUBTYPE,CMFE_PROBLEM_DATA_POINT_VECTOR_STATIC_FITTING_SUBTYPE, & - & CMFE_PROBLEM_DATA_PT_VECTOR_QUASISTATIC_FITTING_SUBTYPE + PUBLIC CMFE_PROBLEM_STATIC_POISEUILLE_SUBTYPE,CMFE_PROBLEM_DYNAMIC_POISEUILLE_SUBTYPE - PUBLIC CMFE_PROBLEM_MONODOMAIN_GUDUNOV_SPLIT_SUBTYPE,CMFE_PROBLEM_MONODOMAIN_STRANG_SPLIT_SUBTYPE, & - & CMFE_PROBLEM_BIDOMAIN_GUDUNOV_SPLIT_SUBTYPE,CMFE_PROBLEM_BIDOMAIN_STRANG_SPLIT_SUBTYPE + PUBLIC CMFE_PROBLEM_STATIC_BURGERS_SUBTYPE,CMFE_PROBLEM_DYNAMIC_BURGERS_SUBTYPE - PUBLIC CMFE_PROBLEM_MONODOMAIN_BUENOOROVIO_SUBTYPE, CMFE_PROBLEM_MONODOMAIN_TENTUSSCHER06_SUBTYPE + PUBLIC CMFE_PROBLEM_STANDARD_LAPLACE_SUBTYPE,CMFE_PROBLEM_GENERALISED_LAPLACE_SUBTYPE, & + & CMFE_PROBLEM_MONODOMAIN_STRANG_SPLITTING_EQUATION_TYPE - PUBLIC CMFE_PROBLEM_CONTROL_SIMPLE_TYPE,CMFE_PROBLEM_CONTROL_FIXED_LOOP_TYPE,CMFE_PROBLEM_CONTROL_TIME_LOOP_TYPE, & - & CMFE_PROBLEM_CONTROL_WHILE_LOOP_TYPE,CMFE_PROBLEM_CONTROL_LOAD_INCREMENT_LOOP_TYPE + PUBLIC CMFE_PROBLEM_LINEAR_SOURCE_POISSON_SUBTYPE,CMFE_PROBLEM_NONLINEAR_SOURCE_POISSON_SUBTYPE, & + & CMFE_PROBLEM_LINEAR_PRESSURE_POISSON_SUBTYPE,CMFE_PROBLEM_NONLINEAR_PRESSURE_POISSON_SUBTYPE, & + & CMFE_PROBLEM_ALE_PRESSURE_POISSON_SUBTYPE, CMFE_PROBLEM_FITTED_PRESSURE_POISSON_SUBTYPE, & + & CMFE_PROBLEM_EXTRACELLULAR_BIDOMAIN_POISSON_SUBTYPE - PUBLIC CMFE_PROBLEM_STANDARD_ELASTICITY_DARCY_SUBTYPE, CMFE_PROBLEM_PGM_ELASTICITY_DARCY_SUBTYPE, & - & CMFE_PROBLEM_QUASISTATIC_ELASTICITY_TRANSIENT_DARCY_SUBTYPE,CMFE_PROBLEM_QUASISTATIC_ELAST_TRANS_DARCY_MAT_SOLVE_SUBTYPE, & - & CMFE_PROBLEM_COUPLED_SOURCE_DIFFUSION_DIFFUSION_SUBTYPE, CMFE_PROBLEM_COUPLED_SOURCE_DIFFUSION_ADVEC_DIFFUSION_SUBTYPE, & - & CMFE_PROBLEM_STANDARD_MULTI_COMPARTMENT_TRANSPORT_SUBTYPE,CMFE_PROBLEM_STANDARD_ELASTICITY_FLUID_PRESSURE_SUBTYPE, & - & CMFE_PROBLEM_GUDUNOV_MONODOMAIN_SIMPLE_ELASTICITY_SUBTYPE,CMFE_PROBLEM_GUDUNOV_MONODOMAIN_1D3D_ELASTICITY_SUBTYPE, & - & CMFE_PROBLEM_MONODOMAIN_ELASTICITY_W_TITIN_SUBTYPE,CMFE_PROBLEM_MONODOMAIN_ELASTICITY_VELOCITY_SUBTYPE, & - & CMFE_PROBLEM_MONODOMAIN_1D3D_ACTIVE_STRAIN_SUBTYPE, & - & CMFE_PROBLEM_FINITE_ELASTICITY_NAVIER_STOKES_ALE_SUBTYPE, & - & CMFE_PROBLEM_FINITE_ELASTICITY_RBS_NAVIER_STOKES_ALE_SUBTYPE,& - & CMFE_PROBLEM_GROWTH_FINITE_ELASTICITY_NAVIER_STOKES_ALE_SUBTYPE, & - & CMFE_PROBLEM_GROWTH_FINITE_ELAST_RBS_NAVIER_STOKES_ALE_SUBTYPE + PUBLIC CMFE_PROBLEM_STANDARD_HELMHOLTZ_SUBTYPE,CMFE_PROBLEM_GENERALISED_HELMHOLTZ_SUBTYPE - PUBLIC CMFE_PROBLEM_STATIC_FINITE_ELASTICITY_SUBTYPE,CMFE_PROBLEM_QUASISTATIC_FINITE_ELASTICITY_SUBTYPE, & - & CMFE_PROBLEM_QUASISTATIC_FINITE_ELASTICITY_WITH_GROWTH_SUBTYPE,CMFE_PROBLEM_DYNAMIC_FINITE_ELASTICITY_SUBTYPE + PUBLIC CMFE_PROBLEM_NO_SOURCE_DIFFUSION_SUBTYPE,CMFE_PROBLEM_LINEAR_SOURCE_DIFFUSION_SUBTYPE, & + & CMFE_PROBLEM_NONLINEAR_SOURCE_DIFFUSION_SUBTYPE - PUBLIC CMFE_PROBLEM_FINITE_ELASTICITY_WITH_ACTIVE_SUBTYPE,CMFE_PROBLEM_FINITE_ELASTICITY_WITH_CELLML_SUBTYPE, & - & CMFE_PROBLEM_FINITE_ELASTICITY_WITH_GROWTH_CELLML_SUBTYPE + PUBLIC CMFE_PROBLEM_NO_SOURCE_ALE_DIFFUSION_SUBTYPE,CMFE_PROBLEM_LINEAR_SOURCE_ALE_DIFFUSION_SUBTYPE, & + & CMFE_PROBLEM_NONLINEAR_SOURCE_ALE_DIFFUSION_SUBTYPE -!!================================================================================================================================== -!! -!! PROBLEM_ROUTINES -!! -!!================================================================================================================================== + PUBLIC CMFE_PROBLEM_NO_SOURCE_ADVECTION_DIFFUSION_SUBTYPE,CMFE_PROBLEM_LINEAR_SOURCE_ADVECTION_DIFFUSION_SUBTYPE, & + & CMFE_PROBLEM_NONLINEAR_SOURCE_ADVECTION_DIFFUSION_SUBTYPE - !Module parameters - - !Module types - - !Module variables - - !Interfaces - - !>Finish the creation of CellML equations for a problem. \see OpenCMISS::Iron::cmfe_Problem_CellMLEquationsCreateStart - INTERFACE cmfe_Problem_CellMLEquationsCreateFinish - MODULE PROCEDURE cmfe_Problem_CellMLEquationsCreateFinishNumber - MODULE PROCEDURE cmfe_Problem_CellMLEquationsCreateFinishObj - END INTERFACE cmfe_Problem_CellMLEquationsCreateFinish - - !>Start the creation of solver equations for a problem. \see OpenCMISS::Iron::cmfe_Problem_CellMLEquationsCreateFinish - INTERFACE cmfe_Problem_CellMLEquationsCreateStart - MODULE PROCEDURE cmfe_Problem_CellMLEquationsCreateStartNumber - MODULE PROCEDURE cmfe_Problem_CellMLEquationsCreateStartObj - END INTERFACE cmfe_Problem_CellMLEquationsCreateStart - - !>Returns the CellML equations for a problem. - INTERFACE cmfe_Problem_CellMLEquationsGet - MODULE PROCEDURE cmfe_Problem_CellMLEquationsGetNumber0 - MODULE PROCEDURE cmfe_Problem_CellMLEquationsGetNumber1 - MODULE PROCEDURE cmfe_Problem_CellMLEquationsGetObj0 - MODULE PROCEDURE cmfe_Problem_CellMLEquationsGetObj1 - END INTERFACE cmfe_Problem_CellMLEquationsGet - - !>Finishes the process of creating a problem. \see OpenCMISS::Iron::cmfe_Problem_CreateStart - INTERFACE cmfe_Problem_CreateFinish - MODULE PROCEDURE cmfe_Problem_CreateFinishNumber - MODULE PROCEDURE cmfe_Problem_CreateFinishObj - END INTERFACE cmfe_Problem_CreateFinish - - !>Start the process of creating a problem. \see OpenCMISS::Iron::cmfe_Problem_CreateFinish - INTERFACE cmfe_Problem_CreateStart - MODULE PROCEDURE cmfe_Problem_CreateStartNumber - MODULE PROCEDURE cmfe_Problem_CreateStartObj - END INTERFACE cmfe_Problem_CreateStart - - !>Finishes the process of creating a control loop on a problem. \see OpenCMISS::Iron::cmfe_Problem_ControlLoopCreateStart - INTERFACE cmfe_Problem_ControlLoopCreateFinish - MODULE PROCEDURE cmfe_Problem_ControlLoopCreateFinishNumber - MODULE PROCEDURE cmfe_Problem_ControlLoopCreateFinishObj - END INTERFACE cmfe_Problem_ControlLoopCreateFinish - - !>Starts the process of creating a control loop on a problem. \see OpenCMISS::Iron::cmfe_Problem_ControlLoopCreateFinish - INTERFACE cmfe_Problem_ControlLoopCreateStart - MODULE PROCEDURE cmfe_Problem_ControlLoopCreateStartNumber - MODULE PROCEDURE cmfe_Problem_ControlLoopCreateStartObj - END INTERFACE cmfe_Problem_ControlLoopCreateStart - - !>Destroys the control loop for a problem. - INTERFACE cmfe_Problem_ControlLoopDestroy - MODULE PROCEDURE cmfe_Problem_ControlLoopDestroyNumber - MODULE PROCEDURE cmfe_Problem_ControlLoopDestroyObj - END INTERFACE cmfe_Problem_ControlLoopDestroy - - !>Returns a control loop for a problem. - INTERFACE cmfe_Problem_ControlLoopGet - MODULE PROCEDURE cmfe_Problem_ControlLoopGetNumber0 - MODULE PROCEDURE cmfe_Problem_ControlLoopGetNumber1 - MODULE PROCEDURE cmfe_Problem_ControlLoopGetObj0 - MODULE PROCEDURE cmfe_Problem_ControlLoopGetObj1 - END INTERFACE cmfe_Problem_ControlLoopGet - - !>Destroys a problem. - INTERFACE cmfe_Problem_Destroy - MODULE PROCEDURE cmfe_Problem_DestroyNumber - MODULE PROCEDURE cmfe_Problem_DestroyObj - END INTERFACE cmfe_Problem_Destroy - - !>Solve a problem. - INTERFACE cmfe_Problem_Solve - MODULE PROCEDURE cmfe_Problem_SolveNumber - MODULE PROCEDURE cmfe_Problem_SolveObj - END INTERFACE cmfe_Problem_Solve - - !>Returns the solver for a problem control loop. - INTERFACE cmfe_Problem_SolverGet - MODULE PROCEDURE cmfe_Problem_SolverGetNumber0 - MODULE PROCEDURE cmfe_Problem_SolverGetNumber1 - MODULE PROCEDURE cmfe_Problem_SolverGetObj0 - MODULE PROCEDURE cmfe_Problem_SolverGetObj1 - END INTERFACE cmfe_Problem_SolverGet + PUBLIC CMFE_PROBLEM_NO_SOURCE_ALE_ADVECTION_DIFFUSION_SUBTYPE,CMFE_PROBLEM_LINEAR_SOURCE_ALE_ADVECTION_DIFFUSION_SUBTYPE, & + & CMFE_PROBLEM_NONLINEAR_SOURCE_ALE_ADVECTION_DIFFUSION_SUBTYPE - !>Set boundary conditions for solver equations according to the analytic equations. - INTERFACE cmfe_SolverEquations_BoundaryConditionsAnalytic - MODULE PROCEDURE cmfe_SolverEquations_BoundaryConditionsAnalyticNumber0 - MODULE PROCEDURE cmfe_SolverEquations_BoundaryConditionsAnalyticNumber1 - MODULE PROCEDURE cmfe_SolverEquations_BoundaryConditionsAnalyticObj - END INTERFACE cmfe_SolverEquations_BoundaryConditionsAnalytic + PUBLIC CMFE_PROBLEM_NO_SOURCE_STATIC_ADVEC_DIFF_SUBTYPE,CMFE_PROBLEM_LINEAR_SOURCE_STATIC_ADVEC_DIFF_SUBTYPE, & + & CMFE_PROBLEM_NONLINEAR_SOURCE_STATIC_ADVEC_DIFF_SUBTYPE - !>Finish the creation of solver equations for a problem. \see OpenCMISS::Iron::cmfe_Problem_SolverEquationsCreateStart - INTERFACE cmfe_Problem_SolverEquationsCreateFinish - MODULE PROCEDURE cmfe_Problem_SolverEquationsCreateFinishNumber - MODULE PROCEDURE cmfe_Problem_SolverEquationsCreateFinishObj - END INTERFACE cmfe_Problem_SolverEquationsCreateFinish + PUBLIC CMFE_PROBLEM_CELLML_REAC_INTEG_REAC_DIFF_STRANG_SPLIT_SUBTYPE, & + & CMFE_PROBLEM_CELLML_REAC_EVAL_REAC_DIFF_NO_SPLIT_SUBTYPE, & + & CMFE_PROBLEM_CONSTANT_REAC_DIFF_NO_SPLIT_SUBTYPE - !>Start the creation of solver equations for a problem. \see OpenCMISS::Iron::cmfe_Problem_SolverEquationsCreateFinish - INTERFACE cmfe_Problem_SolverEquationsCreateStart - MODULE PROCEDURE cmfe_Problem_SolverEquationsCreateStartNumber - MODULE PROCEDURE cmfe_Problem_SolverEquationsCreateStartObj - END INTERFACE cmfe_Problem_SolverEquationsCreateStart + PUBLIC CMFE_PROBLEM_STATIC_FITTING_SUBTYPE,CMFE_PROBLEM_STANDARD_DATA_FITTING_SUBTYPE, & + & CMFE_PROBLEM_GENERALISED_DATA_FITTING_SUBTYPE, & + & CMFE_PROBLEM_VECTOR_DATA_FITTING_SUBTYPE,CMFE_PROBLEM_DIV_FREE_VECTOR_DATA_FITTING_SUBTYPE, & + & CMFE_PROBLEM_VECTOR_DATA_PRE_FITTING_SUBTYPE,CMFE_PROBLEM_DIV_FREE_VECTOR_DATA_PRE_FITTING_SUBTYPE, & + & CMFE_PROBLEM_MAT_PROPERTIES_DATA_FITTING_SUBTYPE,CMFE_PROBLEM_DATA_POINT_VECTOR_STATIC_FITTING_SUBTYPE, & + & CMFE_PROBLEM_DATA_PT_VECTOR_QUASISTATIC_FITTING_SUBTYPE - !>Destroys the solver equations for a problem. - INTERFACE cmfe_Problem_SolverEquationsDestroy - MODULE PROCEDURE cmfe_Problem_SolverEquationsDestroyNumber - MODULE PROCEDURE cmfe_Problem_SolverEquationsDestroyObj - END INTERFACE cmfe_Problem_SolverEquationsDestroy + PUBLIC CMFE_PROBLEM_MONODOMAIN_GUDUNOV_SPLIT_SUBTYPE,CMFE_PROBLEM_MONODOMAIN_STRANG_SPLIT_SUBTYPE, & + & CMFE_PROBLEM_BIDOMAIN_GUDUNOV_SPLIT_SUBTYPE,CMFE_PROBLEM_BIDOMAIN_STRANG_SPLIT_SUBTYPE - !>Returns the solver equations for a problem. - INTERFACE cmfe_Problem_SolverEquationsGet - MODULE PROCEDURE cmfe_Problem_SolverEquationsGetNumber0 - MODULE PROCEDURE cmfe_Problem_SolverEquationsGetNumber1 - MODULE PROCEDURE cmfe_Problem_SolverEquationsGetObj0 - MODULE PROCEDURE cmfe_Problem_SolverEquationsGetObj1 - END INTERFACE cmfe_Problem_SolverEquationsGet + PUBLIC CMFE_PROBLEM_MONODOMAIN_BUENOOROVIO_SUBTYPE, CMFE_PROBLEM_MONODOMAIN_TENTUSSCHER06_SUBTYPE - !>Finish the creation of solvers for a problem. \see OpenCMISS::Iron::cmfe_Problem_SolversCreateStart - INTERFACE cmfe_Problem_SolversCreateFinish - MODULE PROCEDURE cmfe_Problem_SolversCreateFinishNumber - MODULE PROCEDURE cmfe_Problem_SolversCreateFinishObj - END INTERFACE cmfe_Problem_SolversCreateFinish + PUBLIC CMFE_PROBLEM_CONTROL_SIMPLE_TYPE,CMFE_PROBLEM_CONTROL_FIXED_LOOP_TYPE,CMFE_PROBLEM_CONTROL_TIME_LOOP_TYPE, & + & CMFE_PROBLEM_CONTROL_WHILE_LOOP_TYPE,CMFE_PROBLEM_CONTROL_LOAD_INCREMENT_LOOP_TYPE - !>Start the creation of solvers for a problem. \see OpenCMISS::Iron::cmfe_Problem_SolversCreateFinish - INTERFACE cmfe_Problem_SolversCreateStart - MODULE PROCEDURE cmfe_Problem_SolversCreateStartNumber - MODULE PROCEDURE cmfe_Problem_SolversCreateStartObj - END INTERFACE cmfe_Problem_SolversCreateStart + PUBLIC CMFE_PROBLEM_STANDARD_ELASTICITY_DARCY_SUBTYPE, CMFE_PROBLEM_PGM_ELASTICITY_DARCY_SUBTYPE, & + & CMFE_PROBLEM_QUASISTATIC_ELASTICITY_TRANSIENT_DARCY_SUBTYPE,CMFE_PROBLEM_QUASISTATIC_ELAST_TRANS_DARCY_MAT_SOLVE_SUBTYPE, & + & CMFE_PROBLEM_COUPLED_SOURCE_DIFFUSION_DIFFUSION_SUBTYPE, CMFE_PROBLEM_COUPLED_SOURCE_DIFFUSION_ADVEC_DIFFUSION_SUBTYPE, & + & CMFE_PROBLEM_STANDARD_MULTI_COMPARTMENT_TRANSPORT_SUBTYPE,CMFE_PROBLEM_STANDARD_ELASTICITY_FLUID_PRESSURE_SUBTYPE, & + & CMFE_PROBLEM_GUDUNOV_MONODOMAIN_SIMPLE_ELASTICITY_SUBTYPE,CMFE_PROBLEM_GUDUNOV_MONODOMAIN_1D3D_ELASTICITY_SUBTYPE, & + & CMFE_PROBLEM_MONODOMAIN_ELASTICITY_W_TITIN_SUBTYPE,CMFE_PROBLEM_MONODOMAIN_ELASTICITY_VELOCITY_SUBTYPE, & + & CMFE_PROBLEM_MONODOMAIN_1D3D_ACTIVE_STRAIN_SUBTYPE, & + & CMFE_PROBLEM_FINITE_ELASTICITY_NAVIER_STOKES_ALE_SUBTYPE, & + & CMFE_PROBLEM_FINITE_ELASTICITY_RBS_NAVIER_STOKES_ALE_SUBTYPE,& + & CMFE_PROBLEM_GROWTH_FINITE_ELASTICITY_NAVIER_STOKES_ALE_SUBTYPE, & + & CMFE_PROBLEM_GROWTH_FINITE_ELAST_RBS_NAVIER_STOKES_ALE_SUBTYPE - !>Destroy the solvers for a problem. - INTERFACE cmfe_Problem_SolversDestroy - MODULE PROCEDURE cmfe_Problem_SolversDestroyNumber - MODULE PROCEDURE cmfe_Problem_SolversDestroyObj - END INTERFACE cmfe_Problem_SolversDestroy + PUBLIC CMFE_PROBLEM_STATIC_FINITE_ELASTICITY_SUBTYPE,CMFE_PROBLEM_QUASISTATIC_FINITE_ELASTICITY_SUBTYPE, & + & CMFE_PROBLEM_QUASISTATIC_FINITE_ELASTICITY_WITH_GROWTH_SUBTYPE,CMFE_PROBLEM_DYNAMIC_FINITE_ELASTICITY_SUBTYPE - !>Returns the problem specification array for a problem. - INTERFACE cmfe_Problem_SpecificationGet - MODULE PROCEDURE cmfe_Problem_SpecificationGetNumber - MODULE PROCEDURE cmfe_Problem_SpecificationGetObj - END INTERFACE cmfe_Problem_SpecificationGet + PUBLIC CMFE_PROBLEM_FINITE_ELASTICITY_WITH_ACTIVE_SUBTYPE,CMFE_PROBLEM_FINITE_ELASTICITY_WITH_CELLML_SUBTYPE, & + & CMFE_PROBLEM_FINITE_ELASTICITY_WITH_GROWTH_CELLML_SUBTYPE - !>Returns the size of the problem specification array for a problem. - INTERFACE cmfe_Problem_SpecificationSizeGet - MODULE PROCEDURE cmfe_Problem_SpecificationSizeGetNumber - MODULE PROCEDURE cmfe_Problem_SpecificationSizeGetObj - END INTERFACE cmfe_Problem_SpecificationSizeGet +!================================================================================================================================== +! +! PROBLEM_ROUTINES +! +!================================================================================================================================== + + !Module parameters + + !Module types + + !Module variables + + !Interfaces + + !>Finish the creation of CellML equations for a problem. \see OpenCMISS::Iron::cmfe_Problem_CellMLEquationsCreateStart + INTERFACE cmfe_Problem_CellMLEquationsCreateFinish + MODULE PROCEDURE cmfe_Problem_CellMLEquationsCreateFinishNumber + MODULE PROCEDURE cmfe_Problem_CellMLEquationsCreateFinishObj + END INTERFACE cmfe_Problem_CellMLEquationsCreateFinish + + !>Start the creation of solver equations for a problem. \see OpenCMISS::Iron::cmfe_Problem_CellMLEquationsCreateFinish + INTERFACE cmfe_Problem_CellMLEquationsCreateStart + MODULE PROCEDURE cmfe_Problem_CellMLEquationsCreateStartNumber + MODULE PROCEDURE cmfe_Problem_CellMLEquationsCreateStartObj + END INTERFACE cmfe_Problem_CellMLEquationsCreateStart + + !>Returns the CellML equations for a problem. + INTERFACE cmfe_Problem_CellMLEquationsGet + MODULE PROCEDURE cmfe_Problem_CellMLEquationsGetNumber0 + MODULE PROCEDURE cmfe_Problem_CellMLEquationsGetNumber1 + MODULE PROCEDURE cmfe_Problem_CellMLEquationsGetObj0 + MODULE PROCEDURE cmfe_Problem_CellMLEquationsGetObj1 + END INTERFACE cmfe_Problem_CellMLEquationsGet + + !>Finishes the process of creating a problem. \see OpenCMISS::Iron::cmfe_Problem_CreateStart + INTERFACE cmfe_Problem_CreateFinish + MODULE PROCEDURE cmfe_Problem_CreateFinishNumber + MODULE PROCEDURE cmfe_Problem_CreateFinishObj + END INTERFACE cmfe_Problem_CreateFinish + + !>Start the process of creating a problem. \see OpenCMISS::Iron::cmfe_Problem_CreateFinish + INTERFACE cmfe_Problem_CreateStart + MODULE PROCEDURE cmfe_Problem_CreateStartNumber + MODULE PROCEDURE cmfe_Problem_CreateStartObj + END INTERFACE cmfe_Problem_CreateStart + + !>Finishes the process of creating a control loop on a problem. \see OpenCMISS::Iron::cmfe_Problem_ControlLoopCreateStart + INTERFACE cmfe_Problem_ControlLoopCreateFinish + MODULE PROCEDURE cmfe_Problem_ControlLoopCreateFinishNumber + MODULE PROCEDURE cmfe_Problem_ControlLoopCreateFinishObj + END INTERFACE cmfe_Problem_ControlLoopCreateFinish + + !>Starts the process of creating a control loop on a problem. \see OpenCMISS::Iron::cmfe_Problem_ControlLoopCreateFinish + INTERFACE cmfe_Problem_ControlLoopCreateStart + MODULE PROCEDURE cmfe_Problem_ControlLoopCreateStartNumber + MODULE PROCEDURE cmfe_Problem_ControlLoopCreateStartObj + END INTERFACE cmfe_Problem_ControlLoopCreateStart + + !>Destroys the control loop for a problem. + INTERFACE cmfe_Problem_ControlLoopDestroy + MODULE PROCEDURE cmfe_Problem_ControlLoopDestroyNumber + MODULE PROCEDURE cmfe_Problem_ControlLoopDestroyObj + END INTERFACE cmfe_Problem_ControlLoopDestroy + + !>Returns a control loop for a problem. + INTERFACE cmfe_Problem_ControlLoopGet + MODULE PROCEDURE cmfe_Problem_ControlLoopGetNumber0 + MODULE PROCEDURE cmfe_Problem_ControlLoopGetNumber1 + MODULE PROCEDURE cmfe_Problem_ControlLoopGetObj0 + MODULE PROCEDURE cmfe_Problem_ControlLoopGetObj1 + END INTERFACE cmfe_Problem_ControlLoopGet + + !>Destroys a problem. + INTERFACE cmfe_Problem_Destroy + MODULE PROCEDURE cmfe_Problem_DestroyNumber + MODULE PROCEDURE cmfe_Problem_DestroyObj + END INTERFACE cmfe_Problem_Destroy + + !>Solve a problem. + INTERFACE cmfe_Problem_Solve + MODULE PROCEDURE cmfe_Problem_SolveNumber + MODULE PROCEDURE cmfe_Problem_SolveObj + END INTERFACE cmfe_Problem_Solve + + !>Returns the solver for a problem control loop. + INTERFACE cmfe_Problem_SolverGet + MODULE PROCEDURE cmfe_Problem_SolverGetNumber0 + MODULE PROCEDURE cmfe_Problem_SolverGetNumber1 + MODULE PROCEDURE cmfe_Problem_SolverGetObj0 + MODULE PROCEDURE cmfe_Problem_SolverGetObj1 + END INTERFACE cmfe_Problem_SolverGet + + !>Set boundary conditions for solver equations according to the analytic equations. + INTERFACE cmfe_SolverEquations_BoundaryConditionsAnalytic + MODULE PROCEDURE cmfe_SolverEquations_BoundaryConditionsAnalyticNumber0 + MODULE PROCEDURE cmfe_SolverEquations_BoundaryConditionsAnalyticNumber1 + MODULE PROCEDURE cmfe_SolverEquations_BoundaryConditionsAnalyticObj + END INTERFACE cmfe_SolverEquations_BoundaryConditionsAnalytic + + !>Finish the creation of solver equations for a problem. \see OpenCMISS::Iron::cmfe_Problem_SolverEquationsCreateStart + INTERFACE cmfe_Problem_SolverEquationsCreateFinish + MODULE PROCEDURE cmfe_Problem_SolverEquationsCreateFinishNumber + MODULE PROCEDURE cmfe_Problem_SolverEquationsCreateFinishObj + END INTERFACE cmfe_Problem_SolverEquationsCreateFinish + + !>Start the creation of solver equations for a problem. \see OpenCMISS::Iron::cmfe_Problem_SolverEquationsCreateFinish + INTERFACE cmfe_Problem_SolverEquationsCreateStart + MODULE PROCEDURE cmfe_Problem_SolverEquationsCreateStartNumber + MODULE PROCEDURE cmfe_Problem_SolverEquationsCreateStartObj + END INTERFACE cmfe_Problem_SolverEquationsCreateStart + + !>Destroys the solver equations for a problem. + INTERFACE cmfe_Problem_SolverEquationsDestroy + MODULE PROCEDURE cmfe_Problem_SolverEquationsDestroyNumber + MODULE PROCEDURE cmfe_Problem_SolverEquationsDestroyObj + END INTERFACE cmfe_Problem_SolverEquationsDestroy + + !>Returns the solver equations for a problem. + INTERFACE cmfe_Problem_SolverEquationsGet + MODULE PROCEDURE cmfe_Problem_SolverEquationsGetNumber0 + MODULE PROCEDURE cmfe_Problem_SolverEquationsGetNumber1 + MODULE PROCEDURE cmfe_Problem_SolverEquationsGetObj0 + MODULE PROCEDURE cmfe_Problem_SolverEquationsGetObj1 + END INTERFACE cmfe_Problem_SolverEquationsGet + + !>Finish the creation of solvers for a problem. \see OpenCMISS::Iron::cmfe_Problem_SolversCreateStart + INTERFACE cmfe_Problem_SolversCreateFinish + MODULE PROCEDURE cmfe_Problem_SolversCreateFinishNumber + MODULE PROCEDURE cmfe_Problem_SolversCreateFinishObj + END INTERFACE cmfe_Problem_SolversCreateFinish + + !>Start the creation of solvers for a problem. \see OpenCMISS::Iron::cmfe_Problem_SolversCreateFinish + INTERFACE cmfe_Problem_SolversCreateStart + MODULE PROCEDURE cmfe_Problem_SolversCreateStartNumber + MODULE PROCEDURE cmfe_Problem_SolversCreateStartObj + END INTERFACE cmfe_Problem_SolversCreateStart + + !>Destroy the solvers for a problem. + INTERFACE cmfe_Problem_SolversDestroy + MODULE PROCEDURE cmfe_Problem_SolversDestroyNumber + MODULE PROCEDURE cmfe_Problem_SolversDestroyObj + END INTERFACE cmfe_Problem_SolversDestroy + + !>Returns the problem specification array for a problem. + INTERFACE cmfe_Problem_SpecificationGet + MODULE PROCEDURE cmfe_Problem_SpecificationGetNumber + MODULE PROCEDURE cmfe_Problem_SpecificationGetObj + END INTERFACE cmfe_Problem_SpecificationGet + + !>Returns the size of the problem specification array for a problem. + INTERFACE cmfe_Problem_SpecificationSizeGet + MODULE PROCEDURE cmfe_Problem_SpecificationSizeGetNumber + MODULE PROCEDURE cmfe_Problem_SpecificationSizeGetObj + END INTERFACE cmfe_Problem_SpecificationSizeGet + + !>Sets/changes the work group for a problem. + INTERFACE cmfe_Problem_WorkGroupSet + MODULE PROCEDURE cmfe_Problem_WorkGroupSetNumber + MODULE PROCEDURE cmfe_Problem_WorkGroupSetObj + END INTERFACE cmfe_Problem_WorkGroupSet + + PUBLIC cmfe_Problem_CellMLEquationsCreateFinish,cmfe_Problem_CellMLEquationsCreateStart - !>Sets/changes the work group for a problem. - INTERFACE cmfe_Problem_WorkGroupSet - MODULE PROCEDURE cmfe_Problem_WorkGroupSetNumber - MODULE PROCEDURE cmfe_Problem_WorkGroupSetObj - END INTERFACE cmfe_Problem_WorkGroupSet + PUBLIC cmfe_Problem_CellMLEquationsGet + + PUBLIC cmfe_Problem_CreateFinish,cmfe_Problem_CreateStart - PUBLIC cmfe_Problem_CellMLEquationsCreateFinish,cmfe_Problem_CellMLEquationsCreateStart + PUBLIC cmfe_Problem_ControlLoopCreateFinish,cmfe_Problem_ControlLoopCreateStart - PUBLIC cmfe_Problem_CellMLEquationsGet + PUBLIC cmfe_Problem_ControlLoopDestroy - PUBLIC cmfe_Problem_CreateFinish,cmfe_Problem_CreateStart + PUBLIC cmfe_Problem_ControlLoopGet - PUBLIC cmfe_Problem_ControlLoopCreateFinish,cmfe_Problem_ControlLoopCreateStart + PUBLIC cmfe_Problem_Destroy - PUBLIC cmfe_Problem_ControlLoopDestroy + PUBLIC cmfe_Problem_Solve - PUBLIC cmfe_Problem_ControlLoopGet + PUBLIC cmfe_Problem_SolverGet - PUBLIC cmfe_Problem_Destroy + PUBLIC cmfe_SolverEquations_BoundaryConditionsAnalytic - PUBLIC cmfe_Problem_Solve + PUBLIC cmfe_Problem_SolverEquationsCreateFinish,cmfe_Problem_SolverEquationsCreateStart - PUBLIC cmfe_Problem_SolverGet + PUBLIC cmfe_Problem_SolverEquationsDestroy - PUBLIC cmfe_SolverEquations_BoundaryConditionsAnalytic + PUBLIC cmfe_Problem_SolverEquationsGet - PUBLIC cmfe_Problem_SolverEquationsCreateFinish,cmfe_Problem_SolverEquationsCreateStart + PUBLIC cmfe_Problem_SolversCreateFinish,cmfe_Problem_SolversCreateStart - PUBLIC cmfe_Problem_SolverEquationsDestroy + PUBLIC cmfe_Problem_SolversDestroy - PUBLIC cmfe_Problem_SolverEquationsGet + PUBLIC cmfe_Problem_SpecificationGet,cmfe_Problem_SpecificationSizeGet - PUBLIC cmfe_Problem_SolversCreateFinish,cmfe_Problem_SolversCreateStart + PUBLIC cmfe_Problem_WorkGroupSet - PUBLIC cmfe_Problem_SolversDestroy +!================================================================================================================================== +! +! REGION_ROUTINES +! +!================================================================================================================================== - PUBLIC cmfe_Problem_SpecificationGet,cmfe_Problem_SpecificationSizeGet + !Module parameters - PUBLIC cmfe_Problem_WorkGroupSet + !Module types -!!================================================================================================================================== -!! -!! REGION_ROUTINES -!! -!!================================================================================================================================== + !Module variables - !Module parameters + !Interfaces - !Module types + !>Returns the coordinate system of region. + INTERFACE cmfe_Region_CoordinateSystemGet + MODULE PROCEDURE cmfe_Region_CoordinateSystemGetNumber + MODULE PROCEDURE cmfe_Region_CoordinateSystemGetObj + END INTERFACE cmfe_Region_CoordinateSystemGet - !Module variables + !>Sets/changes the coordinate system of region. + INTERFACE cmfe_Region_CoordinateSystemSet + MODULE PROCEDURE cmfe_Region_CoordinateSystemSetNumber + MODULE PROCEDURE cmfe_Region_CoordinateSystemSetObj + END INTERFACE cmfe_Region_CoordinateSystemSet - !Interfaces + !>Finishes the creation of a region. \see OpenCMISS::Iron::cmfe_Region_CreateStart + INTERFACE cmfe_Region_CreateFinish + MODULE PROCEDURE cmfe_Region_CreateFinishNumber + MODULE PROCEDURE cmfe_Region_CreateFinishObj + END INTERFACE cmfe_Region_CreateFinish - !>Returns the coordinate system of region. - INTERFACE cmfe_Region_CoordinateSystemGet - MODULE PROCEDURE cmfe_Region_CoordinateSystemGetNumber - MODULE PROCEDURE cmfe_Region_CoordinateSystemGetObj - END INTERFACE cmfe_Region_CoordinateSystemGet + !>Starts the creation of a region. \see OpenCMISS::Iron::cmfe_Region_CreateFinish + INTERFACE cmfe_Region_CreateStart + MODULE PROCEDURE cmfe_Region_CreateStartNumber + MODULE PROCEDURE cmfe_Region_CreateStartObj + END INTERFACE cmfe_Region_CreateStart - !>Sets/changes the coordinate system of region. - INTERFACE cmfe_Region_CoordinateSystemSet - MODULE PROCEDURE cmfe_Region_CoordinateSystemSetNumber - MODULE PROCEDURE cmfe_Region_CoordinateSystemSetObj - END INTERFACE cmfe_Region_CoordinateSystemSet + !>Returns the data points for a region. + INTERFACE cmfe_Region_DataPointsGet + MODULE PROCEDURE cmfe_Region_DataPointsGetObj + END INTERFACE cmfe_Region_DataPointsGet - !>Finishes the creation of a region. \see OpenCMISS::Iron::cmfe_Region_CreateStart - INTERFACE cmfe_Region_CreateFinish - MODULE PROCEDURE cmfe_Region_CreateFinishNumber - MODULE PROCEDURE cmfe_Region_CreateFinishObj - END INTERFACE cmfe_Region_CreateFinish + !>Destroys a region. + INTERFACE cmfe_Region_Destroy + MODULE PROCEDURE cmfe_Region_DestroyNumber + MODULE PROCEDURE cmfe_Region_DestroyObj + END INTERFACE cmfe_Region_Destroy - !>Starts the creation of a region. \see OpenCMISS::Iron::cmfe_Region_CreateFinish - INTERFACE cmfe_Region_CreateStart - MODULE PROCEDURE cmfe_Region_CreateStartNumber - MODULE PROCEDURE cmfe_Region_CreateStartObj - END INTERFACE cmfe_Region_CreateStart + !>Returns the label of a region. + INTERFACE cmfe_Region_LabelGet + MODULE PROCEDURE cmfe_Region_LabelGetCNumber + MODULE PROCEDURE cmfe_Region_LabelGetCObj + MODULE PROCEDURE cmfe_Region_LabelGetVSNumber + MODULE PROCEDURE cmfe_Region_LabelGetVSObj + END INTERFACE cmfe_Region_LabelGet - !>Returns the data points for a region. - INTERFACE cmfe_Region_DataPointsGet - MODULE PROCEDURE cmfe_Region_DataPointsGetObj - END INTERFACE cmfe_Region_DataPointsGet + !>Sets/changes the label of a region. + INTERFACE cmfe_Region_LabelSet + MODULE PROCEDURE cmfe_Region_LabelSetCNumber + MODULE PROCEDURE cmfe_Region_LabelSetCObj + MODULE PROCEDURE cmfe_Region_LabelSetVSNumber + MODULE PROCEDURE cmfe_Region_LabelSetVSObj + END INTERFACE cmfe_Region_LabelSet - !>Destroys a region. - INTERFACE cmfe_Region_Destroy - MODULE PROCEDURE cmfe_Region_DestroyNumber - MODULE PROCEDURE cmfe_Region_DestroyObj - END INTERFACE cmfe_Region_Destroy + !>Returns the nodes for a region. + INTERFACE cmfe_Region_NodesGet + MODULE PROCEDURE cmfe_Region_NodesGetObj + END INTERFACE cmfe_Region_NodesGet - !>Returns the label of a region. - INTERFACE cmfe_Region_LabelGet - MODULE PROCEDURE cmfe_Region_LabelGetCNumber - MODULE PROCEDURE cmfe_Region_LabelGetCObj - MODULE PROCEDURE cmfe_Region_LabelGetVSNumber - MODULE PROCEDURE cmfe_Region_LabelGetVSObj - END INTERFACE cmfe_Region_LabelGet + PUBLIC cmfe_Region_CoordinateSystemGet,cmfe_Region_CoordinateSystemSet - !>Sets/changes the label of a region. - INTERFACE cmfe_Region_LabelSet - MODULE PROCEDURE cmfe_Region_LabelSetCNumber - MODULE PROCEDURE cmfe_Region_LabelSetCObj - MODULE PROCEDURE cmfe_Region_LabelSetVSNumber - MODULE PROCEDURE cmfe_Region_LabelSetVSObj - END INTERFACE cmfe_Region_LabelSet + PUBLIC cmfe_Region_CreateFinish,cmfe_Region_CreateStart - !>Returns the nodes for a region. - INTERFACE cmfe_Region_NodesGet - MODULE PROCEDURE cmfe_Region_NodesGetObj - END INTERFACE cmfe_Region_NodesGet + PUBLIC cmfe_Region_DataPointsGet - PUBLIC cmfe_Region_CoordinateSystemGet,cmfe_Region_CoordinateSystemSet + PUBLIC cmfe_Region_Destroy - PUBLIC cmfe_Region_CreateFinish,cmfe_Region_CreateStart + PUBLIC cmfe_Region_LabelGet,cmfe_Region_LabelSet - PUBLIC cmfe_Region_DataPointsGet + PUBLIC cmfe_Region_NodesGet - PUBLIC cmfe_Region_Destroy +!================================================================================================================================== +! +! SOLVER_ROUTINES +! +!================================================================================================================================== + + !Module parameters + + !> \addtogroup OpenCMISS_CellMLEquationsConstants OpenCMISS::Iron::CellMLEquations::Constants + !> \brief CellML equations constants. + !>@{ + !> \addtogroup OpenCMISS_CellMLEquationsLinearityTypes OpenCMISS::Iron::CellMLEquations::Constants::LinearityTypes + !> \brief The CellML equations linearity types + !> \see OpenCMISS::Iron::CellMLEquations,OpenCMISS + !>@{ + INTEGER(INTG), PARAMETER :: CMFE_CELLML_EQUATIONS_LINEAR = CELLML_EQUATIONS_LINEAR !@} + !> \addtogroup OpenCMISS_CellMLEquationsTimeDependenceTypes OpenCMISS::Iron::CellMLEquations::Constants:TimeDependenceTypes + !> \brief The CellML equations time dependence types + !> \see OpenCMISS::Iron::CellMLEquations,OpenCMISS + !>@{ + INTEGER(INTG), PARAMETER :: CMFE_CELLML_EQUATIONS_STATIC = CELLML_EQUATIONS_STATIC !@} + !>@} + + !> \addtogroup OpenCMISS_SolverConstants OpenCMISS::Iron::Solver::Constants + !> \brief Solver constants. + !>@{ + !> \addtogroup OpenCMISS_SolverTypes OpenCMISS::Iron::Solver::SolverTypes + !> \brief The types of solver + !> \see OpenCMISS::Iron::Solver::Constants,OpenCMISS + !>@{ + INTEGER(INTG), PARAMETER :: CMFE_SOLVER_LINEAR_TYPE = SOLVER_LINEAR_TYPE !@} + !> \addtogroup OpenCMISS_SolverLibraries OpenCMISS::Iron::Solver::SolverLibraries + !> \brief The types of solver libraries. + !> \see OpenCMISS::Iron::Solver::Constants,OpenCMISS + !>@{ + INTEGER(INTG), PARAMETER :: CMFE_SOLVER_CMISS_LIBRARY = SOLVER_CMISS_LIBRARY !@} + !> \addtogroup OpenCMISS_LinearSolverTypes OpenCMISS::Iron::Solver::LinearSolverTypes + !> \brief The types of linear solvers. + !> \see OpenCMISS::Iron::Solver::Constants,OpenCMISS + !>@{ + INTEGER(INTG), PARAMETER :: CMFE_SOLVER_LINEAR_DIRECT_SOLVE_TYPE = SOLVER_LINEAR_DIRECT_SOLVE_TYPE !@} + !> \addtogroup OpenCMISS_DirectLinearSolverTypes OpenCMISS::Iron::Solver::DirectLinearSolverTypes + !> \brief The types of direct linear solvers. \todo Move libraries to a more appropriate place. + !> \see OpenCMISS::Iron::Solver::Constants,OpenCMISS + !>@{ + INTEGER(INTG), PARAMETER :: CMFE_SOLVER_DIRECT_LU = SOLVER_DIRECT_LU !@} + !> \addtogroup OpenCMISS_IterativeLinearSolverTypes OpenCMISS::Iron::Solver::IterativeLinearSolverTypes + !> \brief The types of iterative linear solvers. + !> \see OpenCMISS::Iron::Solver::Constants,OpenCMISS + !>@{ + INTEGER(INTG), PARAMETER :: CMFE_SOLVER_ITERATIVE_RICHARDSON = SOLVER_ITERATIVE_RICHARDSON !@} + !> \addtogroup OpenCMISS_IterativePreconditionerTypes OpenCMISS::Iron::Solver::IterativePreconditionerTypes + !> \brief The types of iterative preconditioners. + !> \see OpenCMISS::Iron::Solver::Constants,OpenCMISS + !>@{ + INTEGER(INTG), PARAMETER :: CMFE_SOLVER_ITERATIVE_NO_PRECONDITIONER = SOLVER_ITERATIVE_NO_PRECONDITIONER !@} + !> \addtogroup OpenCMISS_NonlinearSolverTypes OpenCMISS::Iron::Solver::NonlinearSolverTypes + !> \brief The types of nonlinear solvers. + !> \see OpenCMISS::Iron::Solver::Constants,OpenCMISS + !>@{ + INTEGER(INTG), PARAMETER :: CMFE_SOLVER_NONLINEAR_NEWTON = SOLVER_NONLINEAR_NEWTON !@} + !> \addtogroup OpenCMISS_QuasiNewtonSolverTypes OpenCMISS::Iron::Solver::QuasiNewtonSolverTypes + !> \brief The types of nonlinear Quasi-Newton solvers + !> \see OpenCMISS::Iron::Solver::Constants,OpenCMISS + !>@{ + INTEGER(INTG), PARAMETER :: CMFE_SOLVER_QUASI_NEWTON_LINESEARCH=SOLVER_QUASI_NEWTON_LINESEARCH !@} + !> \addtogroup OpenCMISS_QuasiNewtonTypes OpenCMISS::Iron::Solver::QuasiNewtonTypes + !> \brief The nonlinear Quasi-Newton types + !> \see OpenCMISS::Iron::Solver::Constants,OpenCMISS + !>@{ + INTEGER(INTG), PARAMETER :: CMFE_SOLVER_QUASI_NEWTON_LBFGS=SOLVER_QUASI_NEWTON_LBFGS !@} + !> \addtogroup OpenCMISS_QuasiNewtonLineSearchTypes OpenCMISS::Iron::Solver::NonlinearQuasiNewtonLineSearchTypes + !> \brief The types of line search techniques for Quasi-Newton line search nonlinear solvers + !> \see OpenCMISS::Iron::Solver::Constants,OpenCMISS + !>@{ + INTEGER(INTG), PARAMETER :: CMFE_SOLVER_QUASI_NEWTON_LINESEARCH_BASIC=SOLVER_QUASI_NEWTON_LINESEARCH_BASIC !@} + !> \addtogroup OpenCMISS_QuasiNewtonRestartTypes OpenCMISS::Iron::Solver::QuasiNewtonRestartTypes + !> \brief The nonlinear Quasi-Newton restart types + !> \see OpenCMISS::Iron::Solver::Constants,OpenCMISS + !>@{ + INTEGER(INTG), PARAMETER :: CMFE_SOLVER_QUASI_NEWTON_RESTART_NONE=SOLVER_QUASI_NEWTON_RESTART_NONE !@} + !> \addtogroup OpenCMISS_QuasiNewtonScaleTypes OpenCMISS::Iron::Solver::QuasiNewtonScaleTypes + !> \brief The nonlinear Quasi-Newton scale types + !> \see OpenCMISS::Iron::Solver::Constants,OpenCMISS + !>@{ + INTEGER(INTG), PARAMETER :: CMFE_SOLVER_QUASI_NEWTON_SCALE_NONE=SOLVER_QUASI_NEWTON_SCALE_NONE !@} + !> \addtogroup OpenCMISS_NewtonSolverTypes OpenCMISS::Iron::Solver::NewtonSolverTypes + !> \brief The types of nonlinear Newton solvers. + !> \see OpenCMISS::Iron::Solver::Constants,OpenCMISS + !>@{ + INTEGER(INTG), PARAMETER :: CMFE_SOLVER_NEWTON_LINESEARCH = SOLVER_NEWTON_LINESEARCH !@} + !> \addtogroup OpenCMISS_NewtonLineSearchTypes OpenCMISS::Iron::Solver::NewtonLineSearchTypes + !> \brief The types line search techniques for Newton line search nonlinear solvers. + !> \see OpenCMISS::Iron::Solver::Constants,OpenCMISS + !>@{ + INTEGER(INTG), PARAMETER :: CMFE_SOLVER_NEWTON_LINESEARCH_LINEAR = SOLVER_NEWTON_LINESEARCH_LINEAR !@} + !> \addtogroup OpenCMISS_JacobianCalculationTypes OpenCMISS::Iron::Solver::JacobianCalculationTypes + !> \brief The Jacobian calculation types for a nonlinear solver. + !> \see OpenCMISS::Iron::Solver::Constants,OpenCMISS + !>@{ + INTEGER(INTG), PARAMETER :: CMFE_SOLVER_NEWTON_JACOBIAN_NOT_CALCULATED = SOLVER_NEWTON_JACOBIAN_NOT_CALCULATED !@} + !> \addtogroup OpenCMISS_NewtonConvergenceTypes OpenCMISS::Iron::Solver::NewtonConvergenceTypes + !> \brief The convergence test types for a nonlinear newton solver. + !> \see OpenCMISS::Iron::Solver::Constants,OpenCMISS + !>@{ + INTEGER(INTG), PARAMETER :: CMFE_SOLVER_NEWTON_CONVERGENCE_PETSC_DEFAULT = SOLVER_NEWTON_CONVERGENCE_PETSC_DEFAULT !@} + !> \addtogroup OpenCMISS_DynamicOrderTypes OpenCMISS::Iron::Solver::DynamicOrderTypes + !> \brief The order types for a dynamic solver. + !> \see OpenCMISS::Iron::Solver::Constants,OpenCMISS + !>@{ + INTEGER(INTG), PARAMETER :: CMFE_SOLVER_DYNAMIC_FIRST_ORDER = SOLVER_DYNAMIC_FIRST_ORDER !@} + !> \addtogroup OpenCMISS_DynamicLinearityTypes OpenCMISS::Iron::Solver::DynamicLinearityTypes + !> \brief The time linearity types for a dynamic solver. + !> \see OpenCMISS::Iron::Solver::Constants,OpenCMISS + !>@{ + INTEGER(INTG), PARAMETER :: CMFE_SOLVER_DYNAMIC_LINEAR = SOLVER_DYNAMIC_LINEAR !@} + !> \addtogroup OpenCMISS_DynamicDegreeTypes OpenCMISS::Iron::Solver::DynamicDegreeTypes + !> \brief The time interpolation polynomial degree types for a dynamic solver. + !> \see OpenCMISS::Iron::Solver::Constants,OpenCMISS + !>@{ + INTEGER(INTG), PARAMETER :: CMFE_SOLVER_DYNAMIC_FIRST_DEGREE = SOLVER_DYNAMIC_FIRST_DEGREE !@} + !> \addtogroup OpenCMISS_DynamicSchemeTypes OpenCMISS::Iron::Solver::DynamicSchemeTypes + !> \brief The types of dynamic solver scheme. + !> \see OpenCMISS::Iron::Solver::Constants,OpenCMISS + !>@{ + INTEGER(INTG), PARAMETER :: CMFE_SOLVER_DYNAMIC_EULER_SCHEME = SOLVER_DYNAMIC_EULER_SCHEME !@} + !> \addtogroup OpenCMISS_DAETypes OpenCMISS::Iron::Solver::DAETypes + !> \brief The type of differential-algebraic equation. + !> \see OpenCMISS::Iron::Solver::Constants,OpenCMISS + !>@{ + INTEGER(INTG), PARAMETER :: CMFE_SOLVER_DAE_DIFFERENTIAL_ONLY = SOLVER_DAE_DIFFERENTIAL_ONLY !@} + !> \addtogroup OpenCMISS_DAESolverTypes OpenCMISS::Iron::Solver::DAESolverTypes + !> \brief The differential-algebraic equation solver types for a differential-algebraic equation solver. + !> \see OpenCMISS::Iron::Solver::Constants,OpenCMISS + !>@{ + INTEGER(INTG), PARAMETER :: CMFE_SOLVER_DAE_EULER = SOLVER_DAE_EULER !@} + !> \addtogroup OpenCMISS_EulerDAESolverTypes OpenCMISS::Iron::Solver::EulerDAESolverTypes + !> \brief The Euler solver types for a differential-algebriac equation solver. + !> \see OpenCMISS::Iron::Solver::Constants,OpenCMISS + !>@{ + INTEGER(INTG), PARAMETER :: CMFE_SOLVER_DAE_EULER_FORWARD = SOLVER_DAE_EULER_FORWARD !@} + !> \addtogroup OpenCMISS_SolutionInitialiseTypes OpenCMISS::Iron::Solver::SolutionInitialiseTypes + !> \brief The types of solution initialisation. + !> \see OpenCMISS::Iron::Solver::Constants,OpenCMISS + !>@{ + INTEGER(INTG), PARAMETER :: CMFE_SOLVER_SOLUTION_INITIALISE_ZERO = SOLVER_SOLUTION_INITIALISE_ZERO !@} + !> \addtogroup OpenCMISS_SolverOutputTypes OpenCMISS::Iron::Solver::OutputTypes + !> \brief The types of output. + !> \see OpenCMISS::Iron::Solver::Constants,OpenCMISS + !>@{ + INTEGER(INTG), PARAMETER :: CMFE_SOLVER_NO_OUTPUT = SOLVER_NO_OUTPUT !@} + !> \addtogroup OpenCMISS_SolverEquationsSparsityTypes OpenCMISS::Iron::SolverEquations::SparsityTypes + !> \brief The types of sparse solver equations matrices. + !> \see OpenCMISS::Iron::Solver::Constants,OpenCMISS + !>@{ + INTEGER(INTG), PARAMETER :: CMFE_SOLVER_SPARSE_MATRICES = SOLVER_SPARSE_MATRICES !@} + !> \addtogroup OpenCMISS_SolverEquationsSymmetryTypes OpenCMISS::Iron::SolverEquations::SymmetryTypes + !> \brief The types of symmetry for the solver equations matrices. + !> \see OpenCMISS::Iron::Solver::Constants,OpenCMISS + !>@{ + INTEGER(INTG), PARAMETER :: CMFE_SOLVER_SYMMETRIC_MATRICES = SOLVER_SYMMETRIC_MATRICES !@} + !>@} + + !Module types + + !Module variables + + !Interfaces + + !>Returns the CellML equations for a solver. + INTERFACE cmfe_Solver_CellMLEquationsGet + MODULE PROCEDURE cmfe_Solver_CellMLEquationsGetNumber0 + MODULE PROCEDURE cmfe_Solver_CellMLEquationsGetNumber1 + MODULE PROCEDURE cmfe_Solver_CellMLEquationsGetObj + END INTERFACE cmfe_Solver_CellMLEquationsGet + + !>Adds CellML environments to CellML equations. + INTERFACE cmfe_CellMLEquations_CellMLAdd + MODULE PROCEDURE cmfe_CellMLEquations_CellMLAddNumber0 + MODULE PROCEDURE cmfe_CellMLEquations_CellMLAddNumber1 + MODULE PROCEDURE cmfe_CellMLEquations_CellMLAddObj + END INTERFACE cmfe_CellMLEquations_CellMLAdd + + !>Returns the linearity type of CellML equations. + INTERFACE cmfe_CellMLEquations_LinearityTypeGet + MODULE PROCEDURE cmfe_CellMLEquations_LinearityTypeGetNumber + MODULE PROCEDURE cmfe_CellMLEquations_LinearityTypeGetObj + END INTERFACE cmfe_CellMLEquations_LinearityTypeGet + + !>Sets/changes the linearity type of CellML equations. + INTERFACE cmfe_CellMLEquations_LinearityTypeSet + MODULE PROCEDURE cmfe_CellMLEquations_LinearityTypeSetNumber + MODULE PROCEDURE cmfe_CellMLEquations_LinearityTypeSetObj + END INTERFACE cmfe_CellMLEquations_LinearityTypeSet + + !>Returns the time dependence type of CellML equations. + INTERFACE cmfe_CellMLEquations_TimeDependenceTypeGet + MODULE PROCEDURE cmfe_CellMLEquations_TimeDependenceTypeGetNumber + MODULE PROCEDURE cmfe_CellMLEquations_TimeDependenceTypeGetObj + END INTERFACE cmfe_CellMLEquations_TimeDependenceTypeGet + + !>Sets/changes the time dependence type of CellML equations. + INTERFACE cmfe_CellMLEquations_TimeDependenceTypeSet + MODULE PROCEDURE cmfe_CellMLEquations_TimeDependenceTypeSetNumber + MODULE PROCEDURE cmfe_CellMLEquations_TimeDependenceTypeSetObj + END INTERFACE cmfe_CellMLEquations_TimeDependenceTypeSet + + !>Returns the solver type for an Euler differential-algebraic equation solver. \todo should this be CMISSSolver_DAEEulerSolverTypeGet??? + INTERFACE cmfe_Solver_DAEEulerSolverTypeGet + MODULE PROCEDURE cmfe_Solver_DAEEulerSolverTypeGetNumber0 + MODULE PROCEDURE cmfe_Solver_DAEEulerSolverTypeGetNumber1 + MODULE PROCEDURE cmfe_Solver_DAEEulerSolverTypeGetObj + END INTERFACE cmfe_Solver_DAEEulerSolverTypeGet + + !>Sets/changes the solver type for an Euler differential-algebraic equation solver. \todo should this be CMISSSolver_DAEEulerSolverTypeSet??? + INTERFACE cmfe_Solver_DAEEulerSolverTypeSet + MODULE PROCEDURE cmfe_Solver_DAEEulerSolverTypeSetNumber0 + MODULE PROCEDURE cmfe_Solver_DAEEulerSolverTypeSetNumber1 + MODULE PROCEDURE cmfe_Solver_DAEEulerSolverTypeSetObj + END INTERFACE cmfe_Solver_DAEEulerSolverTypeSet + + !>Returns the solver type for an differential-algebraic equation solver. + INTERFACE cmfe_Solver_DAESolverTypeGet + MODULE PROCEDURE cmfe_Solver_DAESolverTypeGetNumber0 + MODULE PROCEDURE cmfe_Solver_DAESolverTypeGetNumber1 + MODULE PROCEDURE cmfe_Solver_DAESolverTypeGetObj + END INTERFACE cmfe_Solver_DAESolverTypeGet + + !>Sets/changes the solver type for an differential-algebraic equation solver. + INTERFACE cmfe_Solver_DAESolverTypeSet + MODULE PROCEDURE cmfe_Solver_DAESolverTypeSetNumber0 + MODULE PROCEDURE cmfe_Solver_DAESolverTypeSetNumber1 + MODULE PROCEDURE cmfe_Solver_DAESolverTypeSetObj + END INTERFACE cmfe_Solver_DAESolverTypeSet + + !>Sets/changes the times for a differential-algebraic equation solver. + INTERFACE cmfe_Solver_DAETimesSet + MODULE PROCEDURE cmfe_Solver_DAETimesSetNumber0 + MODULE PROCEDURE cmfe_Solver_DAETimesSetNumber1 + MODULE PROCEDURE cmfe_Solver_DAETimesSetObj + END INTERFACE cmfe_Solver_DAETimesSet + + !>Sets/changes the (initial) time step for a differential-algebraic equation solver. + INTERFACE cmfe_Solver_DAETimeStepSet + MODULE PROCEDURE cmfe_Solver_DAETimeStepSetNumber0 + MODULE PROCEDURE cmfe_Solver_DAETimeStepSetNumber1 + MODULE PROCEDURE cmfe_Solver_DAETimeStepSetObj + END INTERFACE cmfe_Solver_DAETimeStepSet + + !>Returns the degree of the polynomial used to interpolate time for a dynamic solver. + INTERFACE cmfe_Solver_DynamicDegreeGet + MODULE PROCEDURE cmfe_Solver_DynamicDegreeGetNumber0 + MODULE PROCEDURE cmfe_Solver_DynamicDegreeGetNumber1 + MODULE PROCEDURE cmfe_Solver_DynamicDegreeGetObj + END INTERFACE cmfe_Solver_DynamicDegreeGet + + !>Sets/changes the degree of the polynomial used to interpolate time for a dynamic solver. + INTERFACE cmfe_Solver_DynamicDegreeSet + MODULE PROCEDURE cmfe_Solver_DynamicDegreeSetNumber0 + MODULE PROCEDURE cmfe_Solver_DynamicDegreeSetNumber1 + MODULE PROCEDURE cmfe_Solver_DynamicDegreeSetObj + END INTERFACE cmfe_Solver_DynamicDegreeSet + + !>Returns the linearity type for the dynamic solver. + INTERFACE cmfe_Solver_DynamicLinearityTypeGet + MODULE PROCEDURE cmfe_Solver_DynamicLinearityTypeGetNumber0 + MODULE PROCEDURE cmfe_Solver_DynamicLinearityTypeGetNumber1 + MODULE PROCEDURE cmfe_Solver_DynamicLinearityTypeGetObj + END INTERFACE cmfe_Solver_DynamicLinearityTypeGet + + !>Returns the linear solver associated with a linear dynamic solver. + INTERFACE cmfe_Solver_DynamicLinearSolverGet + MODULE PROCEDURE cmfe_Solver_DynamicLinearSolverGetNumber0 + MODULE PROCEDURE cmfe_Solver_DynamicLinearSolverGetNumber1 + MODULE PROCEDURE cmfe_Solver_DynamicLinearSolverGetObj + END INTERFACE cmfe_Solver_DynamicLinearSolverGet + + !>Returns the nonlinear solver associated with a nonlinear dynamic solver. + INTERFACE cmfe_Solver_DynamicNonlinearSolverGet + MODULE PROCEDURE cmfe_Solver_DynamicNonlinearSolverGetNumber0 + MODULE PROCEDURE cmfe_Solver_DynamicNonlinearSolverGetNumber1 + MODULE PROCEDURE cmfe_Solver_DynamicNonlinearSolverGetObj + END INTERFACE cmfe_Solver_DynamicNonlinearSolverGet + + !>Sets/changes the scheme for a dynamic solver. + INTERFACE cmfe_Solver_DynamicSchemeSet + MODULE PROCEDURE cmfe_Solver_DynamicSchemeSetNumber0 + MODULE PROCEDURE cmfe_Solver_DynamicSchemeSetNumber1 + MODULE PROCEDURE cmfe_Solver_DynamicSchemeSetObj + END INTERFACE cmfe_Solver_DynamicSchemeSet + + !>Sets/changes the theta scheme values for a dynamic solver. + INTERFACE cmfe_Solver_DynamicThetaSet + MODULE PROCEDURE cmfe_Solver_DynamicThetaSetNumber00 + MODULE PROCEDURE cmfe_Solver_DynamicThetaSetNumber01 + MODULE PROCEDURE cmfe_Solver_DynamicThetaSetNumber10 + MODULE PROCEDURE cmfe_Solver_DynamicThetaSetNumber11 + MODULE PROCEDURE cmfe_Solver_DynamicThetaSetObj0 + MODULE PROCEDURE cmfe_Solver_DynamicThetaSetObj1 + END INTERFACE cmfe_Solver_DynamicThetaSet + + !>Sets/changes the dynamic times for a dynamic solver. + INTERFACE cmfe_Solver_DynamicTimesSet + MODULE PROCEDURE cmfe_Solver_DynamicTimesSetNumber0 + MODULE PROCEDURE cmfe_Solver_DynamicTimesSetNumber1 + MODULE PROCEDURE cmfe_Solver_DynamicTimesSetObj + END INTERFACE cmfe_Solver_DynamicTimesSet + + !Sets the arbitrary path logical for the transformation + INTERFACE cmfe_Solver_GeometricTransformationArbitraryPathSet + MODULE PROCEDURE cmfe_Solver_GeometricTransformationArbitraryPathSetNumber + MODULE PROCEDURE cmfe_Solver_GeometricTransformationArbitraryPathSetObj + END INTERFACE cmfe_Solver_GeometricTransformationArbitraryPathSet + + !Clear transformation for a geometric transformation solver + INTERFACE cmfe_Solver_GeometricTransformationClear + MODULE PROCEDURE cmfe_Solver_GeometricTransformationClearNumber + MODULE PROCEDURE cmfe_Solver_GeometricTransformationClearObj + END INTERFACE cmfe_Solver_GeometricTransformationClear + + !Sets the field to transform + INTERFACE cmfe_Solver_GeometricTransformationFieldSet + MODULE PROCEDURE cmfe_Solver_GeometricTransformationFieldSetNumber + MODULE PROCEDURE cmfe_Solver_GeometricTransformationFieldSetObj + END INTERFACE cmfe_Solver_GeometricTransformationFieldSet + + !Sets the full transformation matrix for a geometric transformation + INTERFACE cmfe_Solver_GeometricTransformationMatrixSet + MODULE PROCEDURE cmfe_Solver_GeometricTransformationMatrixSetNumber0 + MODULE PROCEDURE cmfe_Solver_GeometricTransformationMatrixSetObj0 + MODULE PROCEDURE cmfe_Solver_GeometricTransformationMatrixSetNumber1 + MODULE PROCEDURE cmfe_Solver_GeometricTransformationMatrixSetObj1 + END INTERFACE cmfe_Solver_GeometricTransformationMatrixSet + + !Sets number of load increments for the transformation + INTERFACE cmfe_Solver_GeometricTransformationNumberOfLoadIncrementsSet + MODULE PROCEDURE cmfe_Solver_GeometricTransformationNoLoadIncrementsSetNumber + MODULE PROCEDURE cmfe_Solver_GeometricTransformationNoLoadIncrementsSetObj + END INTERFACE cmfe_Solver_GeometricTransformationNumberOfLoadIncrementsSet + + !Sets the rotation for a geometric transformation + INTERFACE cmfe_Solver_GeometricTransformationRotationSet + MODULE PROCEDURE cmfe_Solver_GeometricTransformationRotationSetNumber0 + MODULE PROCEDURE cmfe_Solver_GeometricTransformationRotationSetObj0 + MODULE PROCEDURE cmfe_Solver_GeometricTransformationRotationSetNumber1 + MODULE PROCEDURE cmfe_Solver_GeometricTransformationRotationSetObj1 + END INTERFACE cmfe_Solver_GeometricTransformationRotationSet + + !Sets the scalings for a uni-directional geometric transformation + INTERFACE cmfe_Solver_GeometricTransformationScalingsSet + MODULE PROCEDURE cmfe_Solver_GeometricTransformationScalingsSetNumber + MODULE PROCEDURE cmfe_Solver_GeometricTransformationScalingsSetObj + END INTERFACE cmfe_Solver_GeometricTransformationScalingsSet + + !Sets the translation for a geometric transformation + INTERFACE cmfe_Solver_GeometricTransformationTranslationSet + MODULE PROCEDURE cmfe_Solver_GeometricTransformationTranslationSetNumber0 + MODULE PROCEDURE cmfe_Solver_GeometricTransformationTranslationSetObj0 + MODULE PROCEDURE cmfe_Solver_GeometricTransformationTranslationSetNumber1 + MODULE PROCEDURE cmfe_Solver_GeometricTransformationTranslationSetObj1 + END INTERFACE cmfe_Solver_GeometricTransformationTranslationSet + + !>Returns the label of a solver. + INTERFACE cmfe_Solver_LabelGet + MODULE PROCEDURE cmfe_Solver_LabelGetCNumber0 + MODULE PROCEDURE cmfe_Solver_LabelGetCNumber1 + MODULE PROCEDURE cmfe_Solver_LabelGetCObj + MODULE PROCEDURE cmfe_Solver_LabelGetVSNumber0 + MODULE PROCEDURE cmfe_Solver_LabelGetVSNumber1 + MODULE PROCEDURE cmfe_Solver_LabelGetVSObj + END INTERFACE cmfe_Solver_LabelGet + + !>Sets/changes the label of a control loop. + INTERFACE cmfe_Solver_LabelSet + MODULE PROCEDURE cmfe_Solver_LabelSetCNumber0 + MODULE PROCEDURE cmfe_Solver_LabelSetCNumber1 + MODULE PROCEDURE cmfe_Solver_LabelSetCObj + MODULE PROCEDURE cmfe_Solver_LabelSetVSNumber0 + MODULE PROCEDURE cmfe_Solver_LabelSetVSNumber1 + MODULE PROCEDURE cmfe_Solver_LabelSetVSObj + END INTERFACE cmfe_Solver_LabelSet + + !>Returns the type of library to use for the solver. + INTERFACE cmfe_Solver_LibraryTypeGet + MODULE PROCEDURE cmfe_Solver_LibraryTypeGetNumber0 + MODULE PROCEDURE cmfe_Solver_LibraryTypeGetNumber1 + MODULE PROCEDURE cmfe_Solver_LibraryTypeGetObj + END INTERFACE cmfe_Solver_LibraryTypeGet + + !>Sets/changes the type of library to use for the solver. + INTERFACE cmfe_Solver_LibraryTypeSet + MODULE PROCEDURE cmfe_Solver_LibraryTypeSetNumber0 + MODULE PROCEDURE cmfe_Solver_LibraryTypeSetNumber1 + MODULE PROCEDURE cmfe_Solver_LibraryTypeSetObj + END INTERFACE cmfe_Solver_LibraryTypeSet + + !>Sets/changes the type of direct linear solver. + INTERFACE cmfe_Solver_LinearDirectTypeSet + MODULE PROCEDURE cmfe_Solver_LinearDirectTypeSetNumber0 + MODULE PROCEDURE cmfe_Solver_LinearDirectTypeSetNumber1 + MODULE PROCEDURE cmfe_Solver_LinearDirectTypeSetObj + END INTERFACE cmfe_Solver_LinearDirectTypeSet + + !>Sets/changes the absolute tolerance for an iterative linear solver. + INTERFACE cmfe_Solver_LinearIterativeAbsoluteToleranceSet + MODULE PROCEDURE cmfe_Solver_LinearIterativeAbsoluteToleranceSetNumber0 + MODULE PROCEDURE cmfe_Solver_LinearIterativeAbsoluteToleranceSetNumber1 + MODULE PROCEDURE cmfe_Solver_LinearIterativeAbsoluteToleranceSetObj + END INTERFACE cmfe_Solver_LinearIterativeAbsoluteToleranceSet + + !>Sets/changes the divergence tolerance for an iterative linear solver. + INTERFACE cmfe_Solver_LinearIterativeDivergenceToleranceSet + MODULE PROCEDURE cmfe_Solver_LinearIterativeDivergenceToleranceSetNumber0 + MODULE PROCEDURE cmfe_Solver_LinearIterativeDivergenceToleranceSetNumber1 + MODULE PROCEDURE cmfe_Solver_LinearIterativeDivergenceToleranceSetObj + END INTERFACE cmfe_Solver_LinearIterativeDivergenceToleranceSet + + !>Sets/changes the GMRES restart value for a GMRES iterative linear solver. + INTERFACE cmfe_Solver_LinearIterativeGMRESRestartSet + MODULE PROCEDURE cmfe_Solver_LinearIterativeGMRESRestartSetNumber0 + MODULE PROCEDURE cmfe_Solver_LinearIterativeGMRESRestartSetNumber1 + MODULE PROCEDURE cmfe_Solver_LinearIterativeGMRESRestartSetObj + END INTERFACE cmfe_Solver_LinearIterativeGMRESRestartSet + + !>Sets/changes the maximum number of iterations for an iterative linear solver. + INTERFACE cmfe_Solver_LinearIterativeMaximumIterationsSet + MODULE PROCEDURE cmfe_Solver_LinearIterativeMaximumIterationsSetNumber0 + MODULE PROCEDURE cmfe_Solver_LinearIterativeMaximumIterationsSetNumber1 + MODULE PROCEDURE cmfe_Solver_LinearIterativeMaximumIterationsSetObj + END INTERFACE cmfe_Solver_LinearIterativeMaximumIterationsSet + + !>Sets/changes the type of preconditioner for an iterative linear solver. + INTERFACE cmfe_Solver_LinearIterativePreconditionerTypeSet + MODULE PROCEDURE cmfe_Solver_LinearIterativePreconditionerTypeSetNumber0 + MODULE PROCEDURE cmfe_Solver_LinearIterativePreconditionerTypeSetNumber1 + MODULE PROCEDURE cmfe_Solver_LinearIterativePreconditionerTypeSetObj + END INTERFACE cmfe_Solver_LinearIterativePreconditionerTypeSet + + !>Sets/changes the relative tolerance for an iterative linear solver. + INTERFACE cmfe_Solver_LinearIterativeRelativeToleranceSet + MODULE PROCEDURE cmfe_Solver_LinearIterativeRelativeToleranceSetNumber0 + MODULE PROCEDURE cmfe_Solver_LinearIterativeRelativeToleranceSetNumber1 + MODULE PROCEDURE cmfe_Solver_LinearIterativeRelativeToleranceSetObj + END INTERFACE cmfe_Solver_LinearIterativeRelativeToleranceSet + + !>Sets/changes the type of iterative linear solver. + INTERFACE cmfe_Solver_LinearIterativeTypeSet + MODULE PROCEDURE cmfe_Solver_LinearIterativeTypeSetNumber0 + MODULE PROCEDURE cmfe_Solver_LinearIterativeTypeSetNumber1 + MODULE PROCEDURE cmfe_Solver_LinearIterativeTypeSetObj + END INTERFACE cmfe_Solver_LinearIterativeTypeSet + + !>Sets/changes the type of linear solver. + INTERFACE cmfe_Solver_LinearTypeSet + MODULE PROCEDURE cmfe_Solver_LinearTypeSetNumber0 + MODULE PROCEDURE cmfe_Solver_LinearTypeSetNumber1 + MODULE PROCEDURE cmfe_Solver_LinearTypeSetObj + END INTERFACE cmfe_Solver_LinearTypeSet + + !>Sets/changes the absolute tolerance for a nonlinear Quasi-Newton solver. + INTERFACE cmfe_Solver_QuasiNewtonAbsoluteToleranceSet + MODULE PROCEDURE cmfe_Solver_QuasiNewtonAbsoluteToleranceSetNumber0 + MODULE PROCEDURE cmfe_Solver_QuasiNewtonAbsoluteToleranceSetNumber1 + MODULE PROCEDURE cmfe_Solver_QuasiNewtonAbsoluteToleranceSetObj + END INTERFACE cmfe_Solver_QuasiNewtonAbsoluteToleranceSet + + !>Enables/disables output monitoring for a nonlinear Quasi-Newton line search solver. + INTERFACE cmfe_Solver_QuasiNewtonLineSearchMonitorOutputSet + MODULE PROCEDURE cmfe_Solver_QuasiNewtonLineSearchMonitorOutputSetNumber0 + MODULE PROCEDURE cmfe_Solver_QuasiNewtonLineSearchMonitorOutputSetNumber1 + MODULE PROCEDURE cmfe_Solver_QuasiNewtonLineSearchMonitorOutputSetObj + END INTERFACE cmfe_Solver_QuasiNewtonLineSearchMonitorOutputSet + + !>Sets/changes the Jacobian calculation type for a nonlinear Quasi-Newton solver. + INTERFACE cmfe_Solver_QuasiNewtonJacobianCalculationTypeSet + MODULE PROCEDURE cmfe_Solver_QuasiNewtonJacobianCalculationTypeSetNumber0 + MODULE PROCEDURE cmfe_Solver_QuasiNewtonJacobianCalculationTypeSetNumber1 + MODULE PROCEDURE cmfe_Solver_QuasiNewtonJacobianCalculationTypeSetObj + END INTERFACE cmfe_Solver_QuasiNewtonJacobianCalculationTypeSet + + !>Returns the linear solver associated with a nonlinear Quasi-Newton solver. + INTERFACE cmfe_Solver_QuasiNewtonLinearSolverGet + MODULE PROCEDURE cmfe_Solver_QuasiNewtonLinearSolverGetNumber0 + MODULE PROCEDURE cmfe_Solver_QuasiNewtonLinearSolverGetNumber1 + MODULE PROCEDURE cmfe_Solver_QuasiNewtonLinearSolverGetObj + END INTERFACE cmfe_Solver_QuasiNewtonLinearSolverGet + + !>Returns the linear solver associated with a nonlinear Quasi-Newton solver. + INTERFACE cmfe_Solver_QuasiNewtonCellMLSolverGet + MODULE PROCEDURE cmfe_Solver_QuasiNewtonCellMLSolverGetNumber0 + MODULE PROCEDURE cmfe_Solver_QuasiNewtonCellMLSolverGetNumber1 + MODULE PROCEDURE cmfe_Solver_QuasiNewtonCellMLSolverGetObj + END INTERFACE cmfe_Solver_QuasiNewtonCellMLSolverGet + + !>Sets/change the convergence test for a nonlinear Quasi-Newton solver. + INTERFACE cmfe_Solver_QuasiNewtonConvergenceTestTypeSet + MODULE PROCEDURE cmfe_Solver_QuasiNewtonConvergenceTestTypeSetNumber0 + MODULE PROCEDURE cmfe_Solver_QuasiNewtonConvergenceTestTypeSetNumber1 + MODULE PROCEDURE cmfe_Solver_QuasiNewtonConvergenceTestTypeSetObj + END INTERFACE cmfe_Solver_QuasiNewtonConvergenceTestTypeSet + + !>Sets/changes the line search maximum step for a nonlinear Quasi-Newton solver. + INTERFACE cmfe_Solver_QuasiNewtonLineSearchMaxStepSet + MODULE PROCEDURE cmfe_Solver_QuasiNewtonLineSearchMaxStepSetNumber0 + MODULE PROCEDURE cmfe_Solver_QuasiNewtonLineSearchMaxStepSetNumber1 + MODULE PROCEDURE cmfe_Solver_QuasiNewtonLineSearchMaxStepSetObj + END INTERFACE cmfe_Solver_QuasiNewtonLineSearchMaxStepSet + + !>Sets/changes the line search step tolerance for a nonlinear Quasi-Newton solver. + INTERFACE cmfe_Solver_QuasiNewtonLineSearchStepTolSet + MODULE PROCEDURE cmfe_Solver_QuasiNewtonLineSearchStepTolSetNumber0 + MODULE PROCEDURE cmfe_Solver_QuasiNewtonLineSearchStepTolSetNumber1 + MODULE PROCEDURE cmfe_Solver_QuasiNewtonLineSearchStepTolSetObj + END INTERFACE cmfe_Solver_QuasiNewtonLineSearchStepTolSet + + !>Sets/changes the type of line search for a nonlinear Quasi-Newton solver. + INTERFACE cmfe_Solver_QuasiNewtonLineSearchTypeSet + MODULE PROCEDURE cmfe_Solver_QuasiNewtonLineSearchTypeSetNumber0 + MODULE PROCEDURE cmfe_Solver_QuasiNewtonLineSearchTypeSetNumber1 + MODULE PROCEDURE cmfe_Solver_QuasiNewtonLineSearchTypeSetObj + END INTERFACE cmfe_Solver_QuasiNewtonLineSearchTypeSet + + !>Sets/changes the maximum number of function evaluations for a nonlinear Quasi-Newton solver. + INTERFACE cmfe_Solver_QuasiNewtonMaximumFunctionEvaluationsSet + MODULE PROCEDURE cmfe_Solver_QuasiNewtonMaximumFunctionEvaluationsSetNumber0 + MODULE PROCEDURE cmfe_Solver_QuasiNewtonMaximumFunctionEvaluationsSetNumber1 + MODULE PROCEDURE cmfe_Solver_QuasiNewtonMaximumFunctionEvaluationsSetObj + END INTERFACE cmfe_Solver_QuasiNewtonMaximumFunctionEvaluationsSet + + !>Sets/changes the maximum number of iterations for a nonlinear Quasi-Newton solver. + INTERFACE cmfe_Solver_QuasiNewtonMaximumIterationsSet + MODULE PROCEDURE cmfe_Solver_QuasiNewtonMaximumIterationsSetNumber0 + MODULE PROCEDURE cmfe_Solver_QuasiNewtonMaximumIterationsSetNumber1 + MODULE PROCEDURE cmfe_Solver_QuasiNewtonMaximumIterationsSetObj + END INTERFACE cmfe_Solver_QuasiNewtonMaximumIterationsSet + + !>Sets/changes the relative tolerance for a nonlinear Quasi-Newton solver. + INTERFACE cmfe_Solver_QuasiNewtonRelativeToleranceSet + MODULE PROCEDURE cmfe_Solver_QuasiNewtonRelativeToleranceSetNumber0 + MODULE PROCEDURE cmfe_Solver_QuasiNewtonRelativeToleranceSetNumber1 + MODULE PROCEDURE cmfe_Solver_QuasiNewtonRelativeToleranceSetObj + END INTERFACE cmfe_Solver_QuasiNewtonRelativeToleranceSet + + !>Sets/changes the solution tolerance for a nonlinear Quasi-Newton solver. + INTERFACE cmfe_Solver_QuasiNewtonSolutionToleranceSet + MODULE PROCEDURE cmfe_Solver_QuasiNewtonSolutionToleranceSetNumber0 + MODULE PROCEDURE cmfe_Solver_QuasiNewtonSolutionToleranceSetNumber1 + MODULE PROCEDURE cmfe_Solver_QuasiNewtonSolutionToleranceSetObj + END INTERFACE cmfe_Solver_QuasiNewtonSolutionToleranceSet + + !>Sets/changes the trust region delta0 tolerance for a nonlinear Quasi-Newton trust region solver. + INTERFACE cmfe_Solver_QuasiNewtonTrustRegionDelta0Set + MODULE PROCEDURE cmfe_Solver_QuasiNewtonTrustRegionDelta0SetNumber0 + MODULE PROCEDURE cmfe_Solver_QuasiNewtonTrustRegionDelta0SetNumber1 + MODULE PROCEDURE cmfe_Solver_QuasiNewtonTrustRegionDelta0SetObj + END INTERFACE cmfe_Solver_QuasiNewtonTrustRegionDelta0Set + + !>Sets/changes the trust region tolerance for a nonlinear Quasi-Newton trust region solver. + INTERFACE cmfe_Solver_QuasiNewtonTrustRegionToleranceSet + MODULE PROCEDURE cmfe_Solver_QuasiNewtonTrustRegionToleranceSetNumber0 + MODULE PROCEDURE cmfe_Solver_QuasiNewtonTrustRegionToleranceSetNumber1 + MODULE PROCEDURE cmfe_Solver_QuasiNewtonTrustRegionToleranceSetObj + END INTERFACE cmfe_Solver_QuasiNewtonTrustRegionToleranceSet + + !>Sets/changes the nonlinear Quasi-Newton restart. + INTERFACE cmfe_Solver_QuasiNewtonRestartSet + MODULE PROCEDURE cmfe_Solver_QuasiNewtonRestartSetNumber0 + MODULE PROCEDURE cmfe_Solver_QuasiNewtonRestartSetNumber1 + MODULE PROCEDURE cmfe_Solver_QuasiNewtonRestartSetObj + END INTERFACE cmfe_Solver_QuasiNewtonRestartSet + + !>Sets/changes the nonlinear Quasi-Newton restart type. + INTERFACE cmfe_Solver_QuasiNewtonRestartTypeSet + MODULE PROCEDURE cmfe_Solver_QuasiNewtonRestartTypeSetNumber0 + MODULE PROCEDURE cmfe_Solver_QuasiNewtonRestartTypeSetNumber1 + MODULE PROCEDURE cmfe_Solver_QuasiNewtonRestartTypeSetObj + END INTERFACE cmfe_Solver_QuasiNewtonRestartTypeSet + + !>Sets/changes the nonlinear Quasi-Newton scale type. + INTERFACE cmfe_Solver_QuasiNewtonScaleTypeSet + MODULE PROCEDURE cmfe_Solver_QuasiNewtonScaleTypeSetNumber0 + MODULE PROCEDURE cmfe_Solver_QuasiNewtonScaleTypeSetNumber1 + MODULE PROCEDURE cmfe_Solver_QuasiNewtonScaleTypeSetObj + END INTERFACE cmfe_Solver_QuasiNewtonScaleTypeSet + + !>Sets/changes the type of nonlinear Quasi-Newton solver. + INTERFACE cmfe_Solver_QuasiNewtonSolveTypeSet + MODULE PROCEDURE cmfe_Solver_QuasiNewtonSolveTypeSetNumber0 + MODULE PROCEDURE cmfe_Solver_QuasiNewtonSolveTypeSetNumber1 + MODULE PROCEDURE cmfe_Solver_QuasiNewtonSolveTypeSetObj + END INTERFACE cmfe_Solver_QuasiNewtonSolveTypeSet + + !>Sets/changes the nonlinear Quasi-Newton type. + INTERFACE cmfe_Solver_QuasiNewtonTypeSet + MODULE PROCEDURE cmfe_Solver_QuasiNewtonTypeSetNumber0 + MODULE PROCEDURE cmfe_Solver_QuasiNewtonTypeSetNumber1 + MODULE PROCEDURE cmfe_Solver_QuasiNewtonTypeSetObj + END INTERFACE cmfe_Solver_QuasiNewtonTypeSet + + !>Sets/changes the absolute tolerance for a nonlinear Newton solver. + INTERFACE cmfe_Solver_NewtonAbsoluteToleranceSet + MODULE PROCEDURE cmfe_Solver_NewtonAbsoluteToleranceSetNumber0 + MODULE PROCEDURE cmfe_Solver_NewtonAbsoluteToleranceSetNumber1 + MODULE PROCEDURE cmfe_Solver_NewtonAbsoluteToleranceSetObj + END INTERFACE cmfe_Solver_NewtonAbsoluteToleranceSet + + !>Enables/disables output monitoring for a nonlinear Newton line search solver. + INTERFACE cmfe_Solver_NewtonLineSearchMonitorOutputSet + MODULE PROCEDURE cmfe_Solver_NewtonLineSearchMonitorOutputSetNumber0 + MODULE PROCEDURE cmfe_Solver_NewtonLineSearchMonitorOutputSetNumber1 + MODULE PROCEDURE cmfe_Solver_NewtonLineSearchMonitorOutputSetObj + END INTERFACE cmfe_Solver_NewtonLineSearchMonitorOutputSet + + !>Sets/changes the Jacobian calculation type for a nonlinear Newton solver. + INTERFACE cmfe_Solver_NewtonJacobianCalculationTypeSet + MODULE PROCEDURE cmfe_Solver_NewtonJacobianCalculationTypeSetNumber0 + MODULE PROCEDURE cmfe_Solver_NewtonJacobianCalculationTypeSetNumber1 + MODULE PROCEDURE cmfe_Solver_NewtonJacobianCalculationTypeSetObj + END INTERFACE cmfe_Solver_NewtonJacobianCalculationTypeSet + + !>Returns the linear solver associated with a nonlinear Newton solver. + INTERFACE cmfe_Solver_NewtonLinearSolverGet + MODULE PROCEDURE cmfe_Solver_NewtonLinearSolverGetNumber0 + MODULE PROCEDURE cmfe_Solver_NewtonLinearSolverGetNumber1 + MODULE PROCEDURE cmfe_Solver_NewtonLinearSolverGetObj + END INTERFACE cmfe_Solver_NewtonLinearSolverGet + + !>Returns the linear solver associated with a nonlinear Newton solver. + INTERFACE cmfe_Solver_NewtonCellMLSolverGet + MODULE PROCEDURE cmfe_Solver_NewtonCellMLSolverGetNumber0 + MODULE PROCEDURE cmfe_Solver_NewtonCellMLSolverGetNumber1 + MODULE PROCEDURE cmfe_Solver_NewtonCellMLSolverGetObj + END INTERFACE cmfe_Solver_NewtonCellMLSolverGet + + !>Sets/change the convergence test for a nonlinear Newton solver. + INTERFACE cmfe_Solver_NewtonConvergenceTestTypeSet + MODULE PROCEDURE cmfe_Solver_NewtonConvergenceTestTypeSetNumber0 + MODULE PROCEDURE cmfe_Solver_NewtonConvergenceTestTypeSetNumber1 + MODULE PROCEDURE cmfe_Solver_NewtonConvergenceTestTypeSetObj + END INTERFACE cmfe_Solver_NewtonConvergenceTestTypeSet + + !>Sets/changes the line search alpha for a nonlinear Newton solver. + INTERFACE cmfe_Solver_NewtonLineSearchAlphaSet + MODULE PROCEDURE cmfe_Solver_NewtonLineSearchAlphaSetNumber0 + MODULE PROCEDURE cmfe_Solver_NewtonLineSearchAlphaSetNumber1 + MODULE PROCEDURE cmfe_Solver_NewtonLineSearchAlphaSetObj + END INTERFACE cmfe_Solver_NewtonLineSearchAlphaSet + + !>Sets/changes the line search maximum step for a nonlinear Newton solver. + INTERFACE cmfe_Solver_NewtonLineSearchMaxStepSet + MODULE PROCEDURE cmfe_Solver_NewtonLineSearchMaxStepSetNumber0 + MODULE PROCEDURE cmfe_Solver_NewtonLineSearchMaxStepSetNumber1 + MODULE PROCEDURE cmfe_Solver_NewtonLineSearchMaxStepSetObj + END INTERFACE cmfe_Solver_NewtonLineSearchMaxStepSet + + !>Sets/changes the line search step tolerance for a nonlinear Newton solver. + INTERFACE cmfe_Solver_NewtonLineSearchStepTolSet + MODULE PROCEDURE cmfe_Solver_NewtonLineSearchStepTolSetNumber0 + MODULE PROCEDURE cmfe_Solver_NewtonLineSearchStepTolSetNumber1 + MODULE PROCEDURE cmfe_Solver_NewtonLineSearchStepTolSetObj + END INTERFACE cmfe_Solver_NewtonLineSearchStepTolSet + + !>Sets/changes the type of line search for a nonlinear Newton solver. + INTERFACE cmfe_Solver_NewtonLineSearchTypeSet + MODULE PROCEDURE cmfe_Solver_NewtonLineSearchTypeSetNumber0 + MODULE PROCEDURE cmfe_Solver_NewtonLineSearchTypeSetNumber1 + MODULE PROCEDURE cmfe_Solver_NewtonLineSearchTypeSetObj + END INTERFACE cmfe_Solver_NewtonLineSearchTypeSet + + !>Sets/changes the maximum number of function evaluations for a nonlinear Newton solver. + INTERFACE cmfe_Solver_NewtonMaximumFunctionEvaluationsSet + MODULE PROCEDURE cmfe_Solver_NewtonMaximumFunctionEvaluationsSetNumber0 + MODULE PROCEDURE cmfe_Solver_NewtonMaximumFunctionEvaluationsSetNumber1 + MODULE PROCEDURE cmfe_Solver_NewtonMaximumFunctionEvaluationsSetObj + END INTERFACE cmfe_Solver_NewtonMaximumFunctionEvaluationsSet + + !>Sets/changes the maximum number of iterations for a nonlinear Newton solver. + INTERFACE cmfe_Solver_NewtonMaximumIterationsSet + MODULE PROCEDURE cmfe_Solver_NewtonMaximumIterationsSetNumber0 + MODULE PROCEDURE cmfe_Solver_NewtonMaximumIterationsSetNumber1 + MODULE PROCEDURE cmfe_Solver_NewtonMaximumIterationsSetObj + END INTERFACE cmfe_Solver_NewtonMaximumIterationsSet + + !>Sets/changes the relative tolerance for a nonlinear Newton solver. + INTERFACE cmfe_Solver_NewtonRelativeToleranceSet + MODULE PROCEDURE cmfe_Solver_NewtonRelativeToleranceSetNumber0 + MODULE PROCEDURE cmfe_Solver_NewtonRelativeToleranceSetNumber1 + MODULE PROCEDURE cmfe_Solver_NewtonRelativeToleranceSetObj + END INTERFACE cmfe_Solver_NewtonRelativeToleranceSet + + !>Sets/changes the solution tolerance for a nonlinear Newton solver. + INTERFACE cmfe_Solver_NewtonSolutionToleranceSet + MODULE PROCEDURE cmfe_Solver_NewtonSolutionToleranceSetNumber0 + MODULE PROCEDURE cmfe_Solver_NewtonSolutionToleranceSetNumber1 + MODULE PROCEDURE cmfe_Solver_NewtonSolutionToleranceSetObj + END INTERFACE cmfe_Solver_NewtonSolutionToleranceSet + + !>Sets/changes the trust region delta0 tolerance for a nonlinear Newton trust region solver. + INTERFACE cmfe_Solver_NewtonTrustRegionDelta0Set + MODULE PROCEDURE cmfe_Solver_NewtonTrustRegionDelta0SetNumber0 + MODULE PROCEDURE cmfe_Solver_NewtonTrustRegionDelta0SetNumber1 + MODULE PROCEDURE cmfe_Solver_NewtonTrustRegionDelta0SetObj + END INTERFACE cmfe_Solver_NewtonTrustRegionDelta0Set + + !>Sets/changes the trust region tolerance for a nonlinear Newton trust region solver. + INTERFACE cmfe_Solver_NewtonTrustRegionToleranceSet + MODULE PROCEDURE cmfe_Solver_NewtonTrustRegionToleranceSetNumber0 + MODULE PROCEDURE cmfe_Solver_NewtonTrustRegionToleranceSetNumber1 + MODULE PROCEDURE cmfe_Solver_NewtonTrustRegionToleranceSetObj + END INTERFACE cmfe_Solver_NewtonTrustRegionToleranceSet + + !>Sets/changes the type of nonlinear Newton trust region solver. + INTERFACE cmfe_Solver_NewtonTypeSet + MODULE PROCEDURE cmfe_Solver_NewtonTypeSetNumber0 + MODULE PROCEDURE cmfe_Solver_NewtonTypeSetNumber1 + MODULE PROCEDURE cmfe_Solver_NewtonTypeSetObj + END INTERFACE cmfe_Solver_NewtonTypeSet + + !>Sets/changes the type of nonlinear solver. + INTERFACE cmfe_Solver_NonlinearTypeSet + MODULE PROCEDURE cmfe_Solver_NonlinearTypeSetNumber0 + MODULE PROCEDURE cmfe_Solver_NonlinearTypeSetNumber1 + MODULE PROCEDURE cmfe_Solver_NonlinearTypeSetObj + END INTERFACE cmfe_Solver_NonlinearTypeSet + + !>Sets/changes the output type for a solver. + INTERFACE cmfe_Solver_OutputTypeSet + MODULE PROCEDURE cmfe_Solver_OutputTypeSetNumber0 + MODULE PROCEDURE cmfe_Solver_OutputTypeSetNumber1 + MODULE PROCEDURE cmfe_Solver_OutputTypeSetObj + END INTERFACE cmfe_Solver_OutputTypeSet + + !>Returns the solver equations for a solver. + INTERFACE cmfe_Solver_SolverEquationsGet + MODULE PROCEDURE cmfe_Solver_SolverEquationsGetNumber0 + MODULE PROCEDURE cmfe_Solver_SolverEquationsGetNumber1 + MODULE PROCEDURE cmfe_Solver_SolverEquationsGetObj + END INTERFACE cmfe_Solver_SolverEquationsGet + + !>Adds equations sets to solver equations. + INTERFACE cmfe_SolverEquations_EquationsSetAdd + MODULE PROCEDURE cmfe_SolverEquations_EquationsSetAddNumber0 + MODULE PROCEDURE cmfe_SolverEquations_EquationsSetAddNumber1 + MODULE PROCEDURE cmfe_SolverEquations_EquationsSetAddObj + END INTERFACE cmfe_SolverEquations_EquationsSetAdd + + !>Adds an interface condition to solver equations. + INTERFACE cmfe_SolverEquations_InterfaceConditionAdd + MODULE PROCEDURE cmfe_SolverEquations_InterfaceConditionAddNumber0 + MODULE PROCEDURE cmfe_SolverEquations_InterfaceConditionAddNumber1 + MODULE PROCEDURE cmfe_SolverEquations_InterfaceConditionAddObj + END INTERFACE cmfe_SolverEquations_InterfaceConditionAdd + + !>Sets/changes the sparsity type for solver equations. + INTERFACE cmfe_SolverEquations_SparsityTypeSet + MODULE PROCEDURE cmfe_SolverEquations_SparsityTypeSetNumber0 + MODULE PROCEDURE cmfe_SolverEquations_SparsityTypeSetNumber1 + MODULE PROCEDURE cmfe_SolverEquations_SparsityTypeSetObj + END INTERFACE cmfe_SolverEquations_SparsityTypeSet + + !>Gets the symmetry type for solver equations. + INTERFACE cmfe_SolverEquations_SymmetryTypeGet + MODULE PROCEDURE cmfe_SolverEquations_SymmetryTypeGetNumber0 + MODULE PROCEDURE cmfe_SolverEquations_SymmetryTypeGetNumber1 + MODULE PROCEDURE cmfe_SolverEquations_SymmetryTypeGetObj + END INTERFACE cmfe_SolverEquations_SymmetryTypeGet + + !>Sets/changes the symmetry type for solver equations. + INTERFACE cmfe_SolverEquations_SymmetryTypeSet + MODULE PROCEDURE cmfe_SolverEquations_SymmetryTypeSetNumber0 + MODULE PROCEDURE cmfe_SolverEquations_SymmetryTypeSetNumber1 + MODULE PROCEDURE cmfe_SolverEquations_SymmetryTypeSetObj + END INTERFACE cmfe_SolverEquations_SymmetryTypeSet + + !>Finish the creation of boundary conditions for solver equations. \see OpenCMISS::Iron::cmfe_SolverEquations_BoundaryConditionsCreateStart + INTERFACE cmfe_SolverEquations_BoundaryConditionsCreateFinish + MODULE PROCEDURE cmfe_SolverEquations_BoundaryConditionsCreateFinishNumber0 + MODULE PROCEDURE cmfe_SolverEquations_BoundaryConditionsCreateFinishNumber1 + MODULE PROCEDURE cmfe_SolverEquations_BoundaryConditionsCreateFinishObj + END INTERFACE cmfe_SolverEquations_BoundaryConditionsCreateFinish + + !>Start the creation of boundary conditions for solver equations. \see OpenCMISS::Iron::cmfe_SolverEquations_BoundaryConditionsCreateFinish + INTERFACE cmfe_SolverEquations_BoundaryConditionsCreateStart + MODULE PROCEDURE cmfe_SolverEquations_BoundaryConditionsCreateStartNumber0 + MODULE PROCEDURE cmfe_SolverEquations_BoundaryConditionsCreateStartNumber1 + MODULE PROCEDURE cmfe_SolverEquations_BoundaryConditionsCreateStartObj + END INTERFACE cmfe_SolverEquations_BoundaryConditionsCreateStart + + !>Get the boundary conditions for solver equations. \see OpenCMISS::Iron::cmfe_SolverEquations_BoundaryConditionsCreateFinish + INTERFACE cmfe_SolverEquations_BoundaryConditionsGet + MODULE PROCEDURE cmfe_SolverEquations_BoundaryConditionsGetNumber0 + MODULE PROCEDURE cmfe_SolverEquations_BoundaryConditionsGetNumber1 + MODULE PROCEDURE cmfe_SolverEquations_BoundaryConditionsGetObj + END INTERFACE cmfe_SolverEquations_BoundaryConditionsGet - PUBLIC cmfe_Region_LabelGet,cmfe_Region_LabelSet + PUBLIC CMFE_CELLML_EQUATIONS_LINEAR,CMFE_CELLML_EQUATIONS_NONLINEAR - PUBLIC cmfe_Region_NodesGet + PUBLIC CMFE_CELLML_EQUATIONS_STATIC,CMFE_CELLML_EQUATIONS_QUASISTATIC,CMFE_CELLML_EQUATIONS_DYNAMIC -!!================================================================================================================================== -!! -!! SOLVER_ROUTINES -!! -!!================================================================================================================================== + PUBLIC CMFE_SOLVER_LINEAR_TYPE,CMFE_SOLVER_NONLINEAR_TYPE,CMFE_SOLVER_DYNAMIC_TYPE,CMFE_SOLVER_DAE_TYPE, & + & CMFE_SOLVER_EIGENPROBLEM_TYPE, & + & CMFE_SOLVER_OPTIMISER_TYPE - !Module parameters + PUBLIC CMFE_SOLVER_CMISS_LIBRARY,CMFE_SOLVER_PETSC_LIBRARY,CMFE_SOLVER_MUMPS_LIBRARY,CMFE_SOLVER_SUPERLU_LIBRARY, & + & CMFE_SOLVER_SPOOLES_LIBRARY,CMFE_SOLVER_UMFPACK_LIBRARY,CMFE_SOLVER_LUSOL_LIBRARY,CMFE_SOLVER_ESSL_LIBRARY, & + & CMFE_SOLVER_LAPACK_LIBRARY,CMFE_SOLVER_HYPRE_LIBRARY,CMFE_SOLVER_PASTIX_LIBRARY - !> \addtogroup OpenCMISS_CellMLEquationsConstants OpenCMISS::Iron::CellMLEquations::Constants - !> \brief CellML equations constants. - !>@{ - !> \addtogroup OpenCMISS_CellMLEquationsLinearityTypes OpenCMISS::Iron::CellMLEquations::Constants::LinearityTypes - !> \brief The CellML equations linearity types - !> \see OpenCMISS::Iron::CellMLEquations,OpenCMISS - !>@{ - INTEGER(INTG), PARAMETER :: CMFE_CELLML_EQUATIONS_LINEAR = CELLML_EQUATIONS_LINEAR !@} - !> \addtogroup OpenCMISS_CellMLEquationsTimeDependenceTypes OpenCMISS::Iron::CellMLEquations::Constants:TimeDependenceTypes - !> \brief The CellML equations time dependence types - !> \see OpenCMISS::Iron::CellMLEquations,OpenCMISS - !>@{ - INTEGER(INTG), PARAMETER :: CMFE_CELLML_EQUATIONS_STATIC = CELLML_EQUATIONS_STATIC !@} - !>@} - - !> \addtogroup OpenCMISS_SolverConstants OpenCMISS::Iron::Solver::Constants - !> \brief Solver constants. - !>@{ - !> \addtogroup OpenCMISS_SolverTypes OpenCMISS::Iron::Solver::SolverTypes - !> \brief The types of solver - !> \see OpenCMISS::Iron::Solver::Constants,OpenCMISS - !>@{ - INTEGER(INTG), PARAMETER :: CMFE_SOLVER_LINEAR_TYPE = SOLVER_LINEAR_TYPE !@} - !> \addtogroup OpenCMISS_SolverLibraries OpenCMISS::Iron::Solver::SolverLibraries - !> \brief The types of solver libraries. - !> \see OpenCMISS::Iron::Solver::Constants,OpenCMISS - !>@{ - INTEGER(INTG), PARAMETER :: CMFE_SOLVER_CMISS_LIBRARY = SOLVER_CMISS_LIBRARY !@} - !> \addtogroup OpenCMISS_LinearSolverTypes OpenCMISS::Iron::Solver::LinearSolverTypes - !> \brief The types of linear solvers. - !> \see OpenCMISS::Iron::Solver::Constants,OpenCMISS - !>@{ - INTEGER(INTG), PARAMETER :: CMFE_SOLVER_LINEAR_DIRECT_SOLVE_TYPE = SOLVER_LINEAR_DIRECT_SOLVE_TYPE !@} - !> \addtogroup OpenCMISS_DirectLinearSolverTypes OpenCMISS::Iron::Solver::DirectLinearSolverTypes - !> \brief The types of direct linear solvers. \todo Move libraries to a more appropriate place. - !> \see OpenCMISS::Iron::Solver::Constants,OpenCMISS - !>@{ - INTEGER(INTG), PARAMETER :: CMFE_SOLVER_DIRECT_LU = SOLVER_DIRECT_LU !@} - !> \addtogroup OpenCMISS_IterativeLinearSolverTypes OpenCMISS::Iron::Solver::IterativeLinearSolverTypes - !> \brief The types of iterative linear solvers. - !> \see OpenCMISS::Iron::Solver::Constants,OpenCMISS - !>@{ - INTEGER(INTG), PARAMETER :: CMFE_SOLVER_ITERATIVE_RICHARDSON = SOLVER_ITERATIVE_RICHARDSON !@} - !> \addtogroup OpenCMISS_IterativePreconditionerTypes OpenCMISS::Iron::Solver::IterativePreconditionerTypes - !> \brief The types of iterative preconditioners. - !> \see OpenCMISS::Iron::Solver::Constants,OpenCMISS - !>@{ - INTEGER(INTG), PARAMETER :: CMFE_SOLVER_ITERATIVE_NO_PRECONDITIONER = SOLVER_ITERATIVE_NO_PRECONDITIONER !@} - !> \addtogroup OpenCMISS_NonlinearSolverTypes OpenCMISS::Iron::Solver::NonlinearSolverTypes - !> \brief The types of nonlinear solvers. - !> \see OpenCMISS::Iron::Solver::Constants,OpenCMISS - !>@{ - INTEGER(INTG), PARAMETER :: CMFE_SOLVER_NONLINEAR_NEWTON = SOLVER_NONLINEAR_NEWTON !@} - !> \addtogroup OpenCMISS_QuasiNewtonSolverTypes OpenCMISS::Iron::Solver::QuasiNewtonSolverTypes - !> \brief The types of nonlinear Quasi-Newton solvers - !> \see OpenCMISS::Iron::Solver::Constants,OpenCMISS - !>@{ - INTEGER(INTG), PARAMETER :: CMFE_SOLVER_QUASI_NEWTON_LINESEARCH=SOLVER_QUASI_NEWTON_LINESEARCH !@} - !> \addtogroup OpenCMISS_QuasiNewtonTypes OpenCMISS::Iron::Solver::QuasiNewtonTypes - !> \brief The nonlinear Quasi-Newton types - !> \see OpenCMISS::Iron::Solver::Constants,OpenCMISS - !>@{ - INTEGER(INTG), PARAMETER :: CMFE_SOLVER_QUASI_NEWTON_LBFGS=SOLVER_QUASI_NEWTON_LBFGS !@} - !> \addtogroup OpenCMISS_QuasiNewtonLineSearchTypes OpenCMISS::Iron::Solver::NonlinearQuasiNewtonLineSearchTypes - !> \brief The types of line search techniques for Quasi-Newton line search nonlinear solvers - !> \see OpenCMISS::Iron::Solver::Constants,OpenCMISS - !>@{ - INTEGER(INTG), PARAMETER :: CMFE_SOLVER_QUASI_NEWTON_LINESEARCH_BASIC=SOLVER_QUASI_NEWTON_LINESEARCH_BASIC !@} - !> \addtogroup OpenCMISS_QuasiNewtonRestartTypes OpenCMISS::Iron::Solver::QuasiNewtonRestartTypes - !> \brief The nonlinear Quasi-Newton restart types - !> \see OpenCMISS::Iron::Solver::Constants,OpenCMISS - !>@{ - INTEGER(INTG), PARAMETER :: CMFE_SOLVER_QUASI_NEWTON_RESTART_NONE=SOLVER_QUASI_NEWTON_RESTART_NONE !@} - !> \addtogroup OpenCMISS_QuasiNewtonScaleTypes OpenCMISS::Iron::Solver::QuasiNewtonScaleTypes - !> \brief The nonlinear Quasi-Newton scale types - !> \see OpenCMISS::Iron::Solver::Constants,OpenCMISS - !>@{ - INTEGER(INTG), PARAMETER :: CMFE_SOLVER_QUASI_NEWTON_SCALE_NONE=SOLVER_QUASI_NEWTON_SCALE_NONE !@} - !> \addtogroup OpenCMISS_NewtonSolverTypes OpenCMISS::Iron::Solver::NewtonSolverTypes - !> \brief The types of nonlinear Newton solvers. - !> \see OpenCMISS::Iron::Solver::Constants,OpenCMISS - !>@{ - INTEGER(INTG), PARAMETER :: CMFE_SOLVER_NEWTON_LINESEARCH = SOLVER_NEWTON_LINESEARCH !@} - !> \addtogroup OpenCMISS_NewtonLineSearchTypes OpenCMISS::Iron::Solver::NewtonLineSearchTypes - !> \brief The types line search techniques for Newton line search nonlinear solvers. - !> \see OpenCMISS::Iron::Solver::Constants,OpenCMISS - !>@{ - INTEGER(INTG), PARAMETER :: CMFE_SOLVER_NEWTON_LINESEARCH_LINEAR = SOLVER_NEWTON_LINESEARCH_LINEAR !@} - !> \addtogroup OpenCMISS_JacobianCalculationTypes OpenCMISS::Iron::Solver::JacobianCalculationTypes - !> \brief The Jacobian calculation types for a nonlinear solver. - !> \see OpenCMISS::Iron::Solver::Constants,OpenCMISS - !>@{ - INTEGER(INTG), PARAMETER :: CMFE_SOLVER_NEWTON_JACOBIAN_NOT_CALCULATED = SOLVER_NEWTON_JACOBIAN_NOT_CALCULATED !@} - !> \addtogroup OpenCMISS_NewtonConvergenceTypes OpenCMISS::Iron::Solver::NewtonConvergenceTypes - !> \brief The convergence test types for a nonlinear newton solver. - !> \see OpenCMISS::Iron::Solver::Constants,OpenCMISS - !>@{ - INTEGER(INTG), PARAMETER :: CMFE_SOLVER_NEWTON_CONVERGENCE_PETSC_DEFAULT = SOLVER_NEWTON_CONVERGENCE_PETSC_DEFAULT !@} - !> \addtogroup OpenCMISS_DynamicOrderTypes OpenCMISS::Iron::Solver::DynamicOrderTypes - !> \brief The order types for a dynamic solver. - !> \see OpenCMISS::Iron::Solver::Constants,OpenCMISS - !>@{ - INTEGER(INTG), PARAMETER :: CMFE_SOLVER_DYNAMIC_FIRST_ORDER = SOLVER_DYNAMIC_FIRST_ORDER !@} - !> \addtogroup OpenCMISS_DynamicLinearityTypes OpenCMISS::Iron::Solver::DynamicLinearityTypes - !> \brief The time linearity types for a dynamic solver. - !> \see OpenCMISS::Iron::Solver::Constants,OpenCMISS - !>@{ - INTEGER(INTG), PARAMETER :: CMFE_SOLVER_DYNAMIC_LINEAR = SOLVER_DYNAMIC_LINEAR !@} - !> \addtogroup OpenCMISS_DynamicDegreeTypes OpenCMISS::Iron::Solver::DynamicDegreeTypes - !> \brief The time interpolation polynomial degree types for a dynamic solver. - !> \see OpenCMISS::Iron::Solver::Constants,OpenCMISS - !>@{ - INTEGER(INTG), PARAMETER :: CMFE_SOLVER_DYNAMIC_FIRST_DEGREE = SOLVER_DYNAMIC_FIRST_DEGREE !@} - !> \addtogroup OpenCMISS_DynamicSchemeTypes OpenCMISS::Iron::Solver::DynamicSchemeTypes - !> \brief The types of dynamic solver scheme. - !> \see OpenCMISS::Iron::Solver::Constants,OpenCMISS - !>@{ - INTEGER(INTG), PARAMETER :: CMFE_SOLVER_DYNAMIC_EULER_SCHEME = SOLVER_DYNAMIC_EULER_SCHEME !@} - !> \addtogroup OpenCMISS_DAETypes OpenCMISS::Iron::Solver::DAETypes - !> \brief The type of differential-algebraic equation. - !> \see OpenCMISS::Iron::Solver::Constants,OpenCMISS - !>@{ - INTEGER(INTG), PARAMETER :: CMFE_SOLVER_DAE_DIFFERENTIAL_ONLY = SOLVER_DAE_DIFFERENTIAL_ONLY !@} - !> \addtogroup OpenCMISS_DAESolverTypes OpenCMISS::Iron::Solver::DAESolverTypes - !> \brief The differential-algebraic equation solver types for a differential-algebraic equation solver. - !> \see OpenCMISS::Iron::Solver::Constants,OpenCMISS - !>@{ - INTEGER(INTG), PARAMETER :: CMFE_SOLVER_DAE_EULER = SOLVER_DAE_EULER !@} - !> \addtogroup OpenCMISS_EulerDAESolverTypes OpenCMISS::Iron::Solver::EulerDAESolverTypes - !> \brief The Euler solver types for a differential-algebriac equation solver. - !> \see OpenCMISS::Iron::Solver::Constants,OpenCMISS - !>@{ - INTEGER(INTG), PARAMETER :: CMFE_SOLVER_DAE_EULER_FORWARD = SOLVER_DAE_EULER_FORWARD !@} - !> \addtogroup OpenCMISS_SolutionInitialiseTypes OpenCMISS::Iron::Solver::SolutionInitialiseTypes - !> \brief The types of solution initialisation. - !> \see OpenCMISS::Iron::Solver::Constants,OpenCMISS - !>@{ - INTEGER(INTG), PARAMETER :: CMFE_SOLVER_SOLUTION_INITIALISE_ZERO = SOLVER_SOLUTION_INITIALISE_ZERO !@} - !> \addtogroup OpenCMISS_SolverOutputTypes OpenCMISS::Iron::Solver::OutputTypes - !> \brief The types of output. - !> \see OpenCMISS::Iron::Solver::Constants,OpenCMISS - !>@{ - INTEGER(INTG), PARAMETER :: CMFE_SOLVER_NO_OUTPUT = SOLVER_NO_OUTPUT !@} - !> \addtogroup OpenCMISS_SolverEquationsSparsityTypes OpenCMISS::Iron::SolverEquations::SparsityTypes - !> \brief The types of sparse solver equations matrices. - !> \see OpenCMISS::Iron::Solver::Constants,OpenCMISS - !>@{ - INTEGER(INTG), PARAMETER :: CMFE_SOLVER_SPARSE_MATRICES = SOLVER_SPARSE_MATRICES !@} - !> \addtogroup OpenCMISS_SolverEquationsSymmetryTypes OpenCMISS::Iron::SolverEquations::SymmetryTypes - !> \brief The types of symmetry for the solver equations matrices. - !> \see OpenCMISS::Iron::Solver::Constants,OpenCMISS - !>@{ - INTEGER(INTG), PARAMETER :: CMFE_SOLVER_SYMMETRIC_MATRICES = SOLVER_SYMMETRIC_MATRICES !@} - !>@} - - !Module types - - !Module variables - - !Interfaces - - !>Returns the CellML equations for a solver. - INTERFACE cmfe_Solver_CellMLEquationsGet - MODULE PROCEDURE cmfe_Solver_CellMLEquationsGetNumber0 - MODULE PROCEDURE cmfe_Solver_CellMLEquationsGetNumber1 - MODULE PROCEDURE cmfe_Solver_CellMLEquationsGetObj - END INTERFACE cmfe_Solver_CellMLEquationsGet - - !>Adds CellML environments to CellML equations. - INTERFACE cmfe_CellMLEquations_CellMLAdd - MODULE PROCEDURE cmfe_CellMLEquations_CellMLAddNumber0 - MODULE PROCEDURE cmfe_CellMLEquations_CellMLAddNumber1 - MODULE PROCEDURE cmfe_CellMLEquations_CellMLAddObj - END INTERFACE cmfe_CellMLEquations_CellMLAdd - - !>Returns the linearity type of CellML equations. - INTERFACE cmfe_CellMLEquations_LinearityTypeGet - MODULE PROCEDURE cmfe_CellMLEquations_LinearityTypeGetNumber - MODULE PROCEDURE cmfe_CellMLEquations_LinearityTypeGetObj - END INTERFACE cmfe_CellMLEquations_LinearityTypeGet - - !>Sets/changes the linearity type of CellML equations. - INTERFACE cmfe_CellMLEquations_LinearityTypeSet - MODULE PROCEDURE cmfe_CellMLEquations_LinearityTypeSetNumber - MODULE PROCEDURE cmfe_CellMLEquations_LinearityTypeSetObj - END INTERFACE cmfe_CellMLEquations_LinearityTypeSet - - !>Returns the time dependence type of CellML equations. - INTERFACE cmfe_CellMLEquations_TimeDependenceTypeGet - MODULE PROCEDURE cmfe_CellMLEquations_TimeDependenceTypeGetNumber - MODULE PROCEDURE cmfe_CellMLEquations_TimeDependenceTypeGetObj - END INTERFACE cmfe_CellMLEquations_TimeDependenceTypeGet - - !>Sets/changes the time dependence type of CellML equations. - INTERFACE cmfe_CellMLEquations_TimeDependenceTypeSet - MODULE PROCEDURE cmfe_CellMLEquations_TimeDependenceTypeSetNumber - MODULE PROCEDURE cmfe_CellMLEquations_TimeDependenceTypeSetObj - END INTERFACE cmfe_CellMLEquations_TimeDependenceTypeSet - - !>Returns the solver type for an Euler differential-algebraic equation solver. \todo should this be CMISSSolver_DAEEulerSolverTypeGet??? - INTERFACE cmfe_Solver_DAEEulerSolverTypeGet - MODULE PROCEDURE cmfe_Solver_DAEEulerSolverTypeGetNumber0 - MODULE PROCEDURE cmfe_Solver_DAEEulerSolverTypeGetNumber1 - MODULE PROCEDURE cmfe_Solver_DAEEulerSolverTypeGetObj - END INTERFACE cmfe_Solver_DAEEulerSolverTypeGet - - !>Sets/changes the solver type for an Euler differential-algebraic equation solver. \todo should this be CMISSSolver_DAEEulerSolverTypeSet??? - INTERFACE cmfe_Solver_DAEEulerSolverTypeSet - MODULE PROCEDURE cmfe_Solver_DAEEulerSolverTypeSetNumber0 - MODULE PROCEDURE cmfe_Solver_DAEEulerSolverTypeSetNumber1 - MODULE PROCEDURE cmfe_Solver_DAEEulerSolverTypeSetObj - END INTERFACE cmfe_Solver_DAEEulerSolverTypeSet - - !>Returns the solver type for an differential-algebraic equation solver. - INTERFACE cmfe_Solver_DAESolverTypeGet - MODULE PROCEDURE cmfe_Solver_DAESolverTypeGetNumber0 - MODULE PROCEDURE cmfe_Solver_DAESolverTypeGetNumber1 - MODULE PROCEDURE cmfe_Solver_DAESolverTypeGetObj - END INTERFACE cmfe_Solver_DAESolverTypeGet - - !>Sets/changes the solver type for an differential-algebraic equation solver. - INTERFACE cmfe_Solver_DAESolverTypeSet - MODULE PROCEDURE cmfe_Solver_DAESolverTypeSetNumber0 - MODULE PROCEDURE cmfe_Solver_DAESolverTypeSetNumber1 - MODULE PROCEDURE cmfe_Solver_DAESolverTypeSetObj - END INTERFACE cmfe_Solver_DAESolverTypeSet - - !>Sets/changes the times for a differential-algebraic equation solver. - INTERFACE cmfe_Solver_DAETimesSet - MODULE PROCEDURE cmfe_Solver_DAETimesSetNumber0 - MODULE PROCEDURE cmfe_Solver_DAETimesSetNumber1 - MODULE PROCEDURE cmfe_Solver_DAETimesSetObj - END INTERFACE cmfe_Solver_DAETimesSet - - !>Sets/changes the (initial) time step for a differential-algebraic equation solver. - INTERFACE cmfe_Solver_DAETimeStepSet - MODULE PROCEDURE cmfe_Solver_DAETimeStepSetNumber0 - MODULE PROCEDURE cmfe_Solver_DAETimeStepSetNumber1 - MODULE PROCEDURE cmfe_Solver_DAETimeStepSetObj - END INTERFACE cmfe_Solver_DAETimeStepSet - - !>Returns the degree of the polynomial used to interpolate time for a dynamic solver. - INTERFACE cmfe_Solver_DynamicDegreeGet - MODULE PROCEDURE cmfe_Solver_DynamicDegreeGetNumber0 - MODULE PROCEDURE cmfe_Solver_DynamicDegreeGetNumber1 - MODULE PROCEDURE cmfe_Solver_DynamicDegreeGetObj - END INTERFACE cmfe_Solver_DynamicDegreeGet - - !>Sets/changes the degree of the polynomial used to interpolate time for a dynamic solver. - INTERFACE cmfe_Solver_DynamicDegreeSet - MODULE PROCEDURE cmfe_Solver_DynamicDegreeSetNumber0 - MODULE PROCEDURE cmfe_Solver_DynamicDegreeSetNumber1 - MODULE PROCEDURE cmfe_Solver_DynamicDegreeSetObj - END INTERFACE cmfe_Solver_DynamicDegreeSet - - !>Returns the linearity type for the dynamic solver. - INTERFACE cmfe_Solver_DynamicLinearityTypeGet - MODULE PROCEDURE cmfe_Solver_DynamicLinearityTypeGetNumber0 - MODULE PROCEDURE cmfe_Solver_DynamicLinearityTypeGetNumber1 - MODULE PROCEDURE cmfe_Solver_DynamicLinearityTypeGetObj - END INTERFACE cmfe_Solver_DynamicLinearityTypeGet - - !>Returns the linear solver associated with a linear dynamic solver. - INTERFACE cmfe_Solver_DynamicLinearSolverGet - MODULE PROCEDURE cmfe_Solver_DynamicLinearSolverGetNumber0 - MODULE PROCEDURE cmfe_Solver_DynamicLinearSolverGetNumber1 - MODULE PROCEDURE cmfe_Solver_DynamicLinearSolverGetObj - END INTERFACE cmfe_Solver_DynamicLinearSolverGet - - !>Returns the nonlinear solver associated with a nonlinear dynamic solver. - INTERFACE cmfe_Solver_DynamicNonlinearSolverGet - MODULE PROCEDURE cmfe_Solver_DynamicNonlinearSolverGetNumber0 - MODULE PROCEDURE cmfe_Solver_DynamicNonlinearSolverGetNumber1 - MODULE PROCEDURE cmfe_Solver_DynamicNonlinearSolverGetObj - END INTERFACE cmfe_Solver_DynamicNonlinearSolverGet - - !>Sets/changes the scheme for a dynamic solver. - INTERFACE cmfe_Solver_DynamicSchemeSet - MODULE PROCEDURE cmfe_Solver_DynamicSchemeSetNumber0 - MODULE PROCEDURE cmfe_Solver_DynamicSchemeSetNumber1 - MODULE PROCEDURE cmfe_Solver_DynamicSchemeSetObj - END INTERFACE cmfe_Solver_DynamicSchemeSet - - !>Sets/changes the theta scheme values for a dynamic solver. - INTERFACE cmfe_Solver_DynamicThetaSet - MODULE PROCEDURE cmfe_Solver_DynamicThetaSetNumber00 - MODULE PROCEDURE cmfe_Solver_DynamicThetaSetNumber01 - MODULE PROCEDURE cmfe_Solver_DynamicThetaSetNumber10 - MODULE PROCEDURE cmfe_Solver_DynamicThetaSetNumber11 - MODULE PROCEDURE cmfe_Solver_DynamicThetaSetObj0 - MODULE PROCEDURE cmfe_Solver_DynamicThetaSetObj1 - END INTERFACE cmfe_Solver_DynamicThetaSet - - !>Sets/changes the dynamic times for a dynamic solver. - INTERFACE cmfe_Solver_DynamicTimesSet - MODULE PROCEDURE cmfe_Solver_DynamicTimesSetNumber0 - MODULE PROCEDURE cmfe_Solver_DynamicTimesSetNumber1 - MODULE PROCEDURE cmfe_Solver_DynamicTimesSetObj - END INTERFACE cmfe_Solver_DynamicTimesSet - - !Sets the arbitrary path logical for the transformation - INTERFACE cmfe_Solver_GeometricTransformationArbitraryPathSet - MODULE PROCEDURE cmfe_Solver_GeometricTransformationArbitraryPathSetNumber - MODULE PROCEDURE cmfe_Solver_GeometricTransformationArbitraryPathSetObj - END INTERFACE cmfe_Solver_GeometricTransformationArbitraryPathSet - - !Clear transformation for a geometric transformation solver - INTERFACE cmfe_Solver_GeometricTransformationClear - MODULE PROCEDURE cmfe_Solver_GeometricTransformationClearNumber - MODULE PROCEDURE cmfe_Solver_GeometricTransformationClearObj - END INTERFACE cmfe_Solver_GeometricTransformationClear - - !Sets the field to transform - INTERFACE cmfe_Solver_GeometricTransformationFieldSet - MODULE PROCEDURE cmfe_Solver_GeometricTransformationFieldSetNumber - MODULE PROCEDURE cmfe_Solver_GeometricTransformationFieldSetObj - END INTERFACE cmfe_Solver_GeometricTransformationFieldSet - - !Sets the full transformation matrix for a geometric transformation - INTERFACE cmfe_Solver_GeometricTransformationMatrixSet - MODULE PROCEDURE cmfe_Solver_GeometricTransformationMatrixSetNumber0 - MODULE PROCEDURE cmfe_Solver_GeometricTransformationMatrixSetObj0 - MODULE PROCEDURE cmfe_Solver_GeometricTransformationMatrixSetNumber1 - MODULE PROCEDURE cmfe_Solver_GeometricTransformationMatrixSetObj1 - END INTERFACE cmfe_Solver_GeometricTransformationMatrixSet - - !Sets number of load increments for the transformation - INTERFACE cmfe_Solver_GeometricTransformationNumberOfLoadIncrementsSet - MODULE PROCEDURE cmfe_Solver_GeometricTransformationNoLoadIncrementsSetNumber - MODULE PROCEDURE cmfe_Solver_GeometricTransformationNoLoadIncrementsSetObj - END INTERFACE cmfe_Solver_GeometricTransformationNumberOfLoadIncrementsSet - - !Sets the rotation for a geometric transformation - INTERFACE cmfe_Solver_GeometricTransformationRotationSet - MODULE PROCEDURE cmfe_Solver_GeometricTransformationRotationSetNumber0 - MODULE PROCEDURE cmfe_Solver_GeometricTransformationRotationSetObj0 - MODULE PROCEDURE cmfe_Solver_GeometricTransformationRotationSetNumber1 - MODULE PROCEDURE cmfe_Solver_GeometricTransformationRotationSetObj1 - END INTERFACE cmfe_Solver_GeometricTransformationRotationSet - - !Sets the scalings for a uni-directional geometric transformation - INTERFACE cmfe_Solver_GeometricTransformationScalingsSet - MODULE PROCEDURE cmfe_Solver_GeometricTransformationScalingsSetNumber - MODULE PROCEDURE cmfe_Solver_GeometricTransformationScalingsSetObj - END INTERFACE cmfe_Solver_GeometricTransformationScalingsSet - - !Sets the translation for a geometric transformation - INTERFACE cmfe_Solver_GeometricTransformationTranslationSet - MODULE PROCEDURE cmfe_Solver_GeometricTransformationTranslationSetNumber0 - MODULE PROCEDURE cmfe_Solver_GeometricTransformationTranslationSetObj0 - MODULE PROCEDURE cmfe_Solver_GeometricTransformationTranslationSetNumber1 - MODULE PROCEDURE cmfe_Solver_GeometricTransformationTranslationSetObj1 - END INTERFACE cmfe_Solver_GeometricTransformationTranslationSet - - !>Returns the label of a solver. - INTERFACE cmfe_Solver_LabelGet - MODULE PROCEDURE cmfe_Solver_LabelGetCNumber0 - MODULE PROCEDURE cmfe_Solver_LabelGetCNumber1 - MODULE PROCEDURE cmfe_Solver_LabelGetCObj - MODULE PROCEDURE cmfe_Solver_LabelGetVSNumber0 - MODULE PROCEDURE cmfe_Solver_LabelGetVSNumber1 - MODULE PROCEDURE cmfe_Solver_LabelGetVSObj - END INTERFACE cmfe_Solver_LabelGet - - !>Sets/changes the label of a control loop. - INTERFACE cmfe_Solver_LabelSet - MODULE PROCEDURE cmfe_Solver_LabelSetCNumber0 - MODULE PROCEDURE cmfe_Solver_LabelSetCNumber1 - MODULE PROCEDURE cmfe_Solver_LabelSetCObj - MODULE PROCEDURE cmfe_Solver_LabelSetVSNumber0 - MODULE PROCEDURE cmfe_Solver_LabelSetVSNumber1 - MODULE PROCEDURE cmfe_Solver_LabelSetVSObj - END INTERFACE cmfe_Solver_LabelSet - - !>Returns the type of library to use for the solver. - INTERFACE cmfe_Solver_LibraryTypeGet - MODULE PROCEDURE cmfe_Solver_LibraryTypeGetNumber0 - MODULE PROCEDURE cmfe_Solver_LibraryTypeGetNumber1 - MODULE PROCEDURE cmfe_Solver_LibraryTypeGetObj - END INTERFACE cmfe_Solver_LibraryTypeGet - - !>Sets/changes the type of library to use for the solver. - INTERFACE cmfe_Solver_LibraryTypeSet - MODULE PROCEDURE cmfe_Solver_LibraryTypeSetNumber0 - MODULE PROCEDURE cmfe_Solver_LibraryTypeSetNumber1 - MODULE PROCEDURE cmfe_Solver_LibraryTypeSetObj - END INTERFACE cmfe_Solver_LibraryTypeSet - - !>Sets/changes the type of direct linear solver. - INTERFACE cmfe_Solver_LinearDirectTypeSet - MODULE PROCEDURE cmfe_Solver_LinearDirectTypeSetNumber0 - MODULE PROCEDURE cmfe_Solver_LinearDirectTypeSetNumber1 - MODULE PROCEDURE cmfe_Solver_LinearDirectTypeSetObj - END INTERFACE cmfe_Solver_LinearDirectTypeSet - - !>Sets/changes the absolute tolerance for an iterative linear solver. - INTERFACE cmfe_Solver_LinearIterativeAbsoluteToleranceSet - MODULE PROCEDURE cmfe_Solver_LinearIterativeAbsoluteToleranceSetNumber0 - MODULE PROCEDURE cmfe_Solver_LinearIterativeAbsoluteToleranceSetNumber1 - MODULE PROCEDURE cmfe_Solver_LinearIterativeAbsoluteToleranceSetObj - END INTERFACE cmfe_Solver_LinearIterativeAbsoluteToleranceSet - - !>Sets/changes the divergence tolerance for an iterative linear solver. - INTERFACE cmfe_Solver_LinearIterativeDivergenceToleranceSet - MODULE PROCEDURE cmfe_Solver_LinearIterativeDivergenceToleranceSetNumber0 - MODULE PROCEDURE cmfe_Solver_LinearIterativeDivergenceToleranceSetNumber1 - MODULE PROCEDURE cmfe_Solver_LinearIterativeDivergenceToleranceSetObj - END INTERFACE cmfe_Solver_LinearIterativeDivergenceToleranceSet - - !>Sets/changes the GMRES restart value for a GMRES iterative linear solver. - INTERFACE cmfe_Solver_LinearIterativeGMRESRestartSet - MODULE PROCEDURE cmfe_Solver_LinearIterativeGMRESRestartSetNumber0 - MODULE PROCEDURE cmfe_Solver_LinearIterativeGMRESRestartSetNumber1 - MODULE PROCEDURE cmfe_Solver_LinearIterativeGMRESRestartSetObj - END INTERFACE cmfe_Solver_LinearIterativeGMRESRestartSet - - !>Sets/changes the maximum number of iterations for an iterative linear solver. - INTERFACE cmfe_Solver_LinearIterativeMaximumIterationsSet - MODULE PROCEDURE cmfe_Solver_LinearIterativeMaximumIterationsSetNumber0 - MODULE PROCEDURE cmfe_Solver_LinearIterativeMaximumIterationsSetNumber1 - MODULE PROCEDURE cmfe_Solver_LinearIterativeMaximumIterationsSetObj - END INTERFACE cmfe_Solver_LinearIterativeMaximumIterationsSet - - !>Sets/changes the type of preconditioner for an iterative linear solver. - INTERFACE cmfe_Solver_LinearIterativePreconditionerTypeSet - MODULE PROCEDURE cmfe_Solver_LinearIterativePreconditionerTypeSetNumber0 - MODULE PROCEDURE cmfe_Solver_LinearIterativePreconditionerTypeSetNumber1 - MODULE PROCEDURE cmfe_Solver_LinearIterativePreconditionerTypeSetObj - END INTERFACE cmfe_Solver_LinearIterativePreconditionerTypeSet - - !>Sets/changes the relative tolerance for an iterative linear solver. - INTERFACE cmfe_Solver_LinearIterativeRelativeToleranceSet - MODULE PROCEDURE cmfe_Solver_LinearIterativeRelativeToleranceSetNumber0 - MODULE PROCEDURE cmfe_Solver_LinearIterativeRelativeToleranceSetNumber1 - MODULE PROCEDURE cmfe_Solver_LinearIterativeRelativeToleranceSetObj - END INTERFACE cmfe_Solver_LinearIterativeRelativeToleranceSet - - !>Sets/changes the type of iterative linear solver. - INTERFACE cmfe_Solver_LinearIterativeTypeSet - MODULE PROCEDURE cmfe_Solver_LinearIterativeTypeSetNumber0 - MODULE PROCEDURE cmfe_Solver_LinearIterativeTypeSetNumber1 - MODULE PROCEDURE cmfe_Solver_LinearIterativeTypeSetObj - END INTERFACE cmfe_Solver_LinearIterativeTypeSet - - !>Sets/changes the type of linear solver. - INTERFACE cmfe_Solver_LinearTypeSet - MODULE PROCEDURE cmfe_Solver_LinearTypeSetNumber0 - MODULE PROCEDURE cmfe_Solver_LinearTypeSetNumber1 - MODULE PROCEDURE cmfe_Solver_LinearTypeSetObj - END INTERFACE cmfe_Solver_LinearTypeSet - - !>Sets/changes the absolute tolerance for a nonlinear Quasi-Newton solver. - INTERFACE cmfe_Solver_QuasiNewtonAbsoluteToleranceSet - MODULE PROCEDURE cmfe_Solver_QuasiNewtonAbsoluteToleranceSetNumber0 - MODULE PROCEDURE cmfe_Solver_QuasiNewtonAbsoluteToleranceSetNumber1 - MODULE PROCEDURE cmfe_Solver_QuasiNewtonAbsoluteToleranceSetObj - END INTERFACE cmfe_Solver_QuasiNewtonAbsoluteToleranceSet - - !>Enables/disables output monitoring for a nonlinear Quasi-Newton line search solver. - INTERFACE cmfe_Solver_QuasiNewtonLineSearchMonitorOutputSet - MODULE PROCEDURE cmfe_Solver_QuasiNewtonLineSearchMonitorOutputSetNumber0 - MODULE PROCEDURE cmfe_Solver_QuasiNewtonLineSearchMonitorOutputSetNumber1 - MODULE PROCEDURE cmfe_Solver_QuasiNewtonLineSearchMonitorOutputSetObj - END INTERFACE cmfe_Solver_QuasiNewtonLineSearchMonitorOutputSet - - !>Sets/changes the Jacobian calculation type for a nonlinear Quasi-Newton solver. - INTERFACE cmfe_Solver_QuasiNewtonJacobianCalculationTypeSet - MODULE PROCEDURE cmfe_Solver_QuasiNewtonJacobianCalculationTypeSetNumber0 - MODULE PROCEDURE cmfe_Solver_QuasiNewtonJacobianCalculationTypeSetNumber1 - MODULE PROCEDURE cmfe_Solver_QuasiNewtonJacobianCalculationTypeSetObj - END INTERFACE cmfe_Solver_QuasiNewtonJacobianCalculationTypeSet - - !>Returns the linear solver associated with a nonlinear Quasi-Newton solver. - INTERFACE cmfe_Solver_QuasiNewtonLinearSolverGet - MODULE PROCEDURE cmfe_Solver_QuasiNewtonLinearSolverGetNumber0 - MODULE PROCEDURE cmfe_Solver_QuasiNewtonLinearSolverGetNumber1 - MODULE PROCEDURE cmfe_Solver_QuasiNewtonLinearSolverGetObj - END INTERFACE cmfe_Solver_QuasiNewtonLinearSolverGet - - !>Returns the linear solver associated with a nonlinear Quasi-Newton solver. - INTERFACE cmfe_Solver_QuasiNewtonCellMLSolverGet - MODULE PROCEDURE cmfe_Solver_QuasiNewtonCellMLSolverGetNumber0 - MODULE PROCEDURE cmfe_Solver_QuasiNewtonCellMLSolverGetNumber1 - MODULE PROCEDURE cmfe_Solver_QuasiNewtonCellMLSolverGetObj - END INTERFACE cmfe_Solver_QuasiNewtonCellMLSolverGet - - !>Sets/change the convergence test for a nonlinear Quasi-Newton solver. - INTERFACE cmfe_Solver_QuasiNewtonConvergenceTestTypeSet - MODULE PROCEDURE cmfe_Solver_QuasiNewtonConvergenceTestTypeSetNumber0 - MODULE PROCEDURE cmfe_Solver_QuasiNewtonConvergenceTestTypeSetNumber1 - MODULE PROCEDURE cmfe_Solver_QuasiNewtonConvergenceTestTypeSetObj - END INTERFACE cmfe_Solver_QuasiNewtonConvergenceTestTypeSet - - !>Sets/changes the line search maximum step for a nonlinear Quasi-Newton solver. - INTERFACE cmfe_Solver_QuasiNewtonLineSearchMaxStepSet - MODULE PROCEDURE cmfe_Solver_QuasiNewtonLineSearchMaxStepSetNumber0 - MODULE PROCEDURE cmfe_Solver_QuasiNewtonLineSearchMaxStepSetNumber1 - MODULE PROCEDURE cmfe_Solver_QuasiNewtonLineSearchMaxStepSetObj - END INTERFACE cmfe_Solver_QuasiNewtonLineSearchMaxStepSet - - !>Sets/changes the line search step tolerance for a nonlinear Quasi-Newton solver. - INTERFACE cmfe_Solver_QuasiNewtonLineSearchStepTolSet - MODULE PROCEDURE cmfe_Solver_QuasiNewtonLineSearchStepTolSetNumber0 - MODULE PROCEDURE cmfe_Solver_QuasiNewtonLineSearchStepTolSetNumber1 - MODULE PROCEDURE cmfe_Solver_QuasiNewtonLineSearchStepTolSetObj - END INTERFACE cmfe_Solver_QuasiNewtonLineSearchStepTolSet - - !>Sets/changes the type of line search for a nonlinear Quasi-Newton solver. - INTERFACE cmfe_Solver_QuasiNewtonLineSearchTypeSet - MODULE PROCEDURE cmfe_Solver_QuasiNewtonLineSearchTypeSetNumber0 - MODULE PROCEDURE cmfe_Solver_QuasiNewtonLineSearchTypeSetNumber1 - MODULE PROCEDURE cmfe_Solver_QuasiNewtonLineSearchTypeSetObj - END INTERFACE cmfe_Solver_QuasiNewtonLineSearchTypeSet - - !>Sets/changes the maximum number of function evaluations for a nonlinear Quasi-Newton solver. - INTERFACE cmfe_Solver_QuasiNewtonMaximumFunctionEvaluationsSet - MODULE PROCEDURE cmfe_Solver_QuasiNewtonMaximumFunctionEvaluationsSetNumber0 - MODULE PROCEDURE cmfe_Solver_QuasiNewtonMaximumFunctionEvaluationsSetNumber1 - MODULE PROCEDURE cmfe_Solver_QuasiNewtonMaximumFunctionEvaluationsSetObj - END INTERFACE cmfe_Solver_QuasiNewtonMaximumFunctionEvaluationsSet - - !>Sets/changes the maximum number of iterations for a nonlinear Quasi-Newton solver. - INTERFACE cmfe_Solver_QuasiNewtonMaximumIterationsSet - MODULE PROCEDURE cmfe_Solver_QuasiNewtonMaximumIterationsSetNumber0 - MODULE PROCEDURE cmfe_Solver_QuasiNewtonMaximumIterationsSetNumber1 - MODULE PROCEDURE cmfe_Solver_QuasiNewtonMaximumIterationsSetObj - END INTERFACE cmfe_Solver_QuasiNewtonMaximumIterationsSet - - !>Sets/changes the relative tolerance for a nonlinear Quasi-Newton solver. - INTERFACE cmfe_Solver_QuasiNewtonRelativeToleranceSet - MODULE PROCEDURE cmfe_Solver_QuasiNewtonRelativeToleranceSetNumber0 - MODULE PROCEDURE cmfe_Solver_QuasiNewtonRelativeToleranceSetNumber1 - MODULE PROCEDURE cmfe_Solver_QuasiNewtonRelativeToleranceSetObj - END INTERFACE cmfe_Solver_QuasiNewtonRelativeToleranceSet - - !>Sets/changes the solution tolerance for a nonlinear Quasi-Newton solver. - INTERFACE cmfe_Solver_QuasiNewtonSolutionToleranceSet - MODULE PROCEDURE cmfe_Solver_QuasiNewtonSolutionToleranceSetNumber0 - MODULE PROCEDURE cmfe_Solver_QuasiNewtonSolutionToleranceSetNumber1 - MODULE PROCEDURE cmfe_Solver_QuasiNewtonSolutionToleranceSetObj - END INTERFACE cmfe_Solver_QuasiNewtonSolutionToleranceSet - - !>Sets/changes the trust region delta0 tolerance for a nonlinear Quasi-Newton trust region solver. - INTERFACE cmfe_Solver_QuasiNewtonTrustRegionDelta0Set - MODULE PROCEDURE cmfe_Solver_QuasiNewtonTrustRegionDelta0SetNumber0 - MODULE PROCEDURE cmfe_Solver_QuasiNewtonTrustRegionDelta0SetNumber1 - MODULE PROCEDURE cmfe_Solver_QuasiNewtonTrustRegionDelta0SetObj - END INTERFACE cmfe_Solver_QuasiNewtonTrustRegionDelta0Set - - !>Sets/changes the trust region tolerance for a nonlinear Quasi-Newton trust region solver. - INTERFACE cmfe_Solver_QuasiNewtonTrustRegionToleranceSet - MODULE PROCEDURE cmfe_Solver_QuasiNewtonTrustRegionToleranceSetNumber0 - MODULE PROCEDURE cmfe_Solver_QuasiNewtonTrustRegionToleranceSetNumber1 - MODULE PROCEDURE cmfe_Solver_QuasiNewtonTrustRegionToleranceSetObj - END INTERFACE cmfe_Solver_QuasiNewtonTrustRegionToleranceSet - - !>Sets/changes the nonlinear Quasi-Newton restart. - INTERFACE cmfe_Solver_QuasiNewtonRestartSet - MODULE PROCEDURE cmfe_Solver_QuasiNewtonRestartSetNumber0 - MODULE PROCEDURE cmfe_Solver_QuasiNewtonRestartSetNumber1 - MODULE PROCEDURE cmfe_Solver_QuasiNewtonRestartSetObj - END INTERFACE cmfe_Solver_QuasiNewtonRestartSet - - !>Sets/changes the nonlinear Quasi-Newton restart type. - INTERFACE cmfe_Solver_QuasiNewtonRestartTypeSet - MODULE PROCEDURE cmfe_Solver_QuasiNewtonRestartTypeSetNumber0 - MODULE PROCEDURE cmfe_Solver_QuasiNewtonRestartTypeSetNumber1 - MODULE PROCEDURE cmfe_Solver_QuasiNewtonRestartTypeSetObj - END INTERFACE cmfe_Solver_QuasiNewtonRestartTypeSet - - !>Sets/changes the nonlinear Quasi-Newton scale type. - INTERFACE cmfe_Solver_QuasiNewtonScaleTypeSet - MODULE PROCEDURE cmfe_Solver_QuasiNewtonScaleTypeSetNumber0 - MODULE PROCEDURE cmfe_Solver_QuasiNewtonScaleTypeSetNumber1 - MODULE PROCEDURE cmfe_Solver_QuasiNewtonScaleTypeSetObj - END INTERFACE cmfe_Solver_QuasiNewtonScaleTypeSet - - !>Sets/changes the type of nonlinear Quasi-Newton solver. - INTERFACE cmfe_Solver_QuasiNewtonSolveTypeSet - MODULE PROCEDURE cmfe_Solver_QuasiNewtonSolveTypeSetNumber0 - MODULE PROCEDURE cmfe_Solver_QuasiNewtonSolveTypeSetNumber1 - MODULE PROCEDURE cmfe_Solver_QuasiNewtonSolveTypeSetObj - END INTERFACE cmfe_Solver_QuasiNewtonSolveTypeSet - - !>Sets/changes the nonlinear Quasi-Newton type. - INTERFACE cmfe_Solver_QuasiNewtonTypeSet - MODULE PROCEDURE cmfe_Solver_QuasiNewtonTypeSetNumber0 - MODULE PROCEDURE cmfe_Solver_QuasiNewtonTypeSetNumber1 - MODULE PROCEDURE cmfe_Solver_QuasiNewtonTypeSetObj - END INTERFACE cmfe_Solver_QuasiNewtonTypeSet - - !>Sets/changes the absolute tolerance for a nonlinear Newton solver. - INTERFACE cmfe_Solver_NewtonAbsoluteToleranceSet - MODULE PROCEDURE cmfe_Solver_NewtonAbsoluteToleranceSetNumber0 - MODULE PROCEDURE cmfe_Solver_NewtonAbsoluteToleranceSetNumber1 - MODULE PROCEDURE cmfe_Solver_NewtonAbsoluteToleranceSetObj - END INTERFACE cmfe_Solver_NewtonAbsoluteToleranceSet - - !>Enables/disables output monitoring for a nonlinear Newton line search solver. - INTERFACE cmfe_Solver_NewtonLineSearchMonitorOutputSet - MODULE PROCEDURE cmfe_Solver_NewtonLineSearchMonitorOutputSetNumber0 - MODULE PROCEDURE cmfe_Solver_NewtonLineSearchMonitorOutputSetNumber1 - MODULE PROCEDURE cmfe_Solver_NewtonLineSearchMonitorOutputSetObj - END INTERFACE cmfe_Solver_NewtonLineSearchMonitorOutputSet - - !>Sets/changes the Jacobian calculation type for a nonlinear Newton solver. - INTERFACE cmfe_Solver_NewtonJacobianCalculationTypeSet - MODULE PROCEDURE cmfe_Solver_NewtonJacobianCalculationTypeSetNumber0 - MODULE PROCEDURE cmfe_Solver_NewtonJacobianCalculationTypeSetNumber1 - MODULE PROCEDURE cmfe_Solver_NewtonJacobianCalculationTypeSetObj - END INTERFACE cmfe_Solver_NewtonJacobianCalculationTypeSet - - !>Returns the linear solver associated with a nonlinear Newton solver. - INTERFACE cmfe_Solver_NewtonLinearSolverGet - MODULE PROCEDURE cmfe_Solver_NewtonLinearSolverGetNumber0 - MODULE PROCEDURE cmfe_Solver_NewtonLinearSolverGetNumber1 - MODULE PROCEDURE cmfe_Solver_NewtonLinearSolverGetObj - END INTERFACE cmfe_Solver_NewtonLinearSolverGet - - !>Returns the linear solver associated with a nonlinear Newton solver. - INTERFACE cmfe_Solver_NewtonCellMLSolverGet - MODULE PROCEDURE cmfe_Solver_NewtonCellMLSolverGetNumber0 - MODULE PROCEDURE cmfe_Solver_NewtonCellMLSolverGetNumber1 - MODULE PROCEDURE cmfe_Solver_NewtonCellMLSolverGetObj - END INTERFACE cmfe_Solver_NewtonCellMLSolverGet - - !>Sets/change the convergence test for a nonlinear Newton solver. - INTERFACE cmfe_Solver_NewtonConvergenceTestTypeSet - MODULE PROCEDURE cmfe_Solver_NewtonConvergenceTestTypeSetNumber0 - MODULE PROCEDURE cmfe_Solver_NewtonConvergenceTestTypeSetNumber1 - MODULE PROCEDURE cmfe_Solver_NewtonConvergenceTestTypeSetObj - END INTERFACE cmfe_Solver_NewtonConvergenceTestTypeSet - - !>Sets/changes the line search alpha for a nonlinear Newton solver. - INTERFACE cmfe_Solver_NewtonLineSearchAlphaSet - MODULE PROCEDURE cmfe_Solver_NewtonLineSearchAlphaSetNumber0 - MODULE PROCEDURE cmfe_Solver_NewtonLineSearchAlphaSetNumber1 - MODULE PROCEDURE cmfe_Solver_NewtonLineSearchAlphaSetObj - END INTERFACE cmfe_Solver_NewtonLineSearchAlphaSet - - !>Sets/changes the line search maximum step for a nonlinear Newton solver. - INTERFACE cmfe_Solver_NewtonLineSearchMaxStepSet - MODULE PROCEDURE cmfe_Solver_NewtonLineSearchMaxStepSetNumber0 - MODULE PROCEDURE cmfe_Solver_NewtonLineSearchMaxStepSetNumber1 - MODULE PROCEDURE cmfe_Solver_NewtonLineSearchMaxStepSetObj - END INTERFACE cmfe_Solver_NewtonLineSearchMaxStepSet - - !>Sets/changes the line search step tolerance for a nonlinear Newton solver. - INTERFACE cmfe_Solver_NewtonLineSearchStepTolSet - MODULE PROCEDURE cmfe_Solver_NewtonLineSearchStepTolSetNumber0 - MODULE PROCEDURE cmfe_Solver_NewtonLineSearchStepTolSetNumber1 - MODULE PROCEDURE cmfe_Solver_NewtonLineSearchStepTolSetObj - END INTERFACE cmfe_Solver_NewtonLineSearchStepTolSet - - !>Sets/changes the type of line search for a nonlinear Newton solver. - INTERFACE cmfe_Solver_NewtonLineSearchTypeSet - MODULE PROCEDURE cmfe_Solver_NewtonLineSearchTypeSetNumber0 - MODULE PROCEDURE cmfe_Solver_NewtonLineSearchTypeSetNumber1 - MODULE PROCEDURE cmfe_Solver_NewtonLineSearchTypeSetObj - END INTERFACE cmfe_Solver_NewtonLineSearchTypeSet - - !>Sets/changes the maximum number of function evaluations for a nonlinear Newton solver. - INTERFACE cmfe_Solver_NewtonMaximumFunctionEvaluationsSet - MODULE PROCEDURE cmfe_Solver_NewtonMaximumFunctionEvaluationsSetNumber0 - MODULE PROCEDURE cmfe_Solver_NewtonMaximumFunctionEvaluationsSetNumber1 - MODULE PROCEDURE cmfe_Solver_NewtonMaximumFunctionEvaluationsSetObj - END INTERFACE cmfe_Solver_NewtonMaximumFunctionEvaluationsSet - - !>Sets/changes the maximum number of iterations for a nonlinear Newton solver. - INTERFACE cmfe_Solver_NewtonMaximumIterationsSet - MODULE PROCEDURE cmfe_Solver_NewtonMaximumIterationsSetNumber0 - MODULE PROCEDURE cmfe_Solver_NewtonMaximumIterationsSetNumber1 - MODULE PROCEDURE cmfe_Solver_NewtonMaximumIterationsSetObj - END INTERFACE cmfe_Solver_NewtonMaximumIterationsSet - - !>Sets/changes the relative tolerance for a nonlinear Newton solver. - INTERFACE cmfe_Solver_NewtonRelativeToleranceSet - MODULE PROCEDURE cmfe_Solver_NewtonRelativeToleranceSetNumber0 - MODULE PROCEDURE cmfe_Solver_NewtonRelativeToleranceSetNumber1 - MODULE PROCEDURE cmfe_Solver_NewtonRelativeToleranceSetObj - END INTERFACE cmfe_Solver_NewtonRelativeToleranceSet - - !>Sets/changes the solution tolerance for a nonlinear Newton solver. - INTERFACE cmfe_Solver_NewtonSolutionToleranceSet - MODULE PROCEDURE cmfe_Solver_NewtonSolutionToleranceSetNumber0 - MODULE PROCEDURE cmfe_Solver_NewtonSolutionToleranceSetNumber1 - MODULE PROCEDURE cmfe_Solver_NewtonSolutionToleranceSetObj - END INTERFACE cmfe_Solver_NewtonSolutionToleranceSet - - !>Sets/changes the trust region delta0 tolerance for a nonlinear Newton trust region solver. - INTERFACE cmfe_Solver_NewtonTrustRegionDelta0Set - MODULE PROCEDURE cmfe_Solver_NewtonTrustRegionDelta0SetNumber0 - MODULE PROCEDURE cmfe_Solver_NewtonTrustRegionDelta0SetNumber1 - MODULE PROCEDURE cmfe_Solver_NewtonTrustRegionDelta0SetObj - END INTERFACE cmfe_Solver_NewtonTrustRegionDelta0Set - - !>Sets/changes the trust region tolerance for a nonlinear Newton trust region solver. - INTERFACE cmfe_Solver_NewtonTrustRegionToleranceSet - MODULE PROCEDURE cmfe_Solver_NewtonTrustRegionToleranceSetNumber0 - MODULE PROCEDURE cmfe_Solver_NewtonTrustRegionToleranceSetNumber1 - MODULE PROCEDURE cmfe_Solver_NewtonTrustRegionToleranceSetObj - END INTERFACE cmfe_Solver_NewtonTrustRegionToleranceSet - - !>Sets/changes the type of nonlinear Newton trust region solver. - INTERFACE cmfe_Solver_NewtonTypeSet - MODULE PROCEDURE cmfe_Solver_NewtonTypeSetNumber0 - MODULE PROCEDURE cmfe_Solver_NewtonTypeSetNumber1 - MODULE PROCEDURE cmfe_Solver_NewtonTypeSetObj - END INTERFACE cmfe_Solver_NewtonTypeSet - - !>Sets/changes the type of nonlinear solver. - INTERFACE cmfe_Solver_NonlinearTypeSet - MODULE PROCEDURE cmfe_Solver_NonlinearTypeSetNumber0 - MODULE PROCEDURE cmfe_Solver_NonlinearTypeSetNumber1 - MODULE PROCEDURE cmfe_Solver_NonlinearTypeSetObj - END INTERFACE cmfe_Solver_NonlinearTypeSet - - !>Sets/changes the output type for a solver. - INTERFACE cmfe_Solver_OutputTypeSet - MODULE PROCEDURE cmfe_Solver_OutputTypeSetNumber0 - MODULE PROCEDURE cmfe_Solver_OutputTypeSetNumber1 - MODULE PROCEDURE cmfe_Solver_OutputTypeSetObj - END INTERFACE cmfe_Solver_OutputTypeSet - - !>Returns the solver equations for a solver. - INTERFACE cmfe_Solver_SolverEquationsGet - MODULE PROCEDURE cmfe_Solver_SolverEquationsGetNumber0 - MODULE PROCEDURE cmfe_Solver_SolverEquationsGetNumber1 - MODULE PROCEDURE cmfe_Solver_SolverEquationsGetObj - END INTERFACE cmfe_Solver_SolverEquationsGet - - !>Adds equations sets to solver equations. - INTERFACE cmfe_SolverEquations_EquationsSetAdd - MODULE PROCEDURE cmfe_SolverEquations_EquationsSetAddNumber0 - MODULE PROCEDURE cmfe_SolverEquations_EquationsSetAddNumber1 - MODULE PROCEDURE cmfe_SolverEquations_EquationsSetAddObj - END INTERFACE cmfe_SolverEquations_EquationsSetAdd - - !>Adds an interface condition to solver equations. - INTERFACE cmfe_SolverEquations_InterfaceConditionAdd - MODULE PROCEDURE cmfe_SolverEquations_InterfaceConditionAddNumber0 - MODULE PROCEDURE cmfe_SolverEquations_InterfaceConditionAddNumber1 - MODULE PROCEDURE cmfe_SolverEquations_InterfaceConditionAddObj - END INTERFACE cmfe_SolverEquations_InterfaceConditionAdd - - !>Sets/changes the sparsity type for solver equations. - INTERFACE cmfe_SolverEquations_SparsityTypeSet - MODULE PROCEDURE cmfe_SolverEquations_SparsityTypeSetNumber0 - MODULE PROCEDURE cmfe_SolverEquations_SparsityTypeSetNumber1 - MODULE PROCEDURE cmfe_SolverEquations_SparsityTypeSetObj - END INTERFACE cmfe_SolverEquations_SparsityTypeSet - - !>Gets the symmetry type for solver equations. - INTERFACE cmfe_SolverEquations_SymmetryTypeGet - MODULE PROCEDURE cmfe_SolverEquations_SymmetryTypeGetNumber0 - MODULE PROCEDURE cmfe_SolverEquations_SymmetryTypeGetNumber1 - MODULE PROCEDURE cmfe_SolverEquations_SymmetryTypeGetObj - END INTERFACE cmfe_SolverEquations_SymmetryTypeGet - - !>Sets/changes the symmetry type for solver equations. - INTERFACE cmfe_SolverEquations_SymmetryTypeSet - MODULE PROCEDURE cmfe_SolverEquations_SymmetryTypeSetNumber0 - MODULE PROCEDURE cmfe_SolverEquations_SymmetryTypeSetNumber1 - MODULE PROCEDURE cmfe_SolverEquations_SymmetryTypeSetObj - END INTERFACE cmfe_SolverEquations_SymmetryTypeSet - - !>Finish the creation of boundary conditions for solver equations. \see OpenCMISS::Iron::cmfe_SolverEquations_BoundaryConditionsCreateStart - INTERFACE cmfe_SolverEquations_BoundaryConditionsCreateFinish - MODULE PROCEDURE cmfe_SolverEquations_BoundaryConditionsCreateFinishNumber0 - MODULE PROCEDURE cmfe_SolverEquations_BoundaryConditionsCreateFinishNumber1 - MODULE PROCEDURE cmfe_SolverEquations_BoundaryConditionsCreateFinishObj - END INTERFACE cmfe_SolverEquations_BoundaryConditionsCreateFinish - - !>Start the creation of boundary conditions for solver equations. \see OpenCMISS::Iron::cmfe_SolverEquations_BoundaryConditionsCreateFinish - INTERFACE cmfe_SolverEquations_BoundaryConditionsCreateStart - MODULE PROCEDURE cmfe_SolverEquations_BoundaryConditionsCreateStartNumber0 - MODULE PROCEDURE cmfe_SolverEquations_BoundaryConditionsCreateStartNumber1 - MODULE PROCEDURE cmfe_SolverEquations_BoundaryConditionsCreateStartObj - END INTERFACE cmfe_SolverEquations_BoundaryConditionsCreateStart - - !>Get the boundary conditions for solver equations. \see OpenCMISS::Iron::cmfe_SolverEquations_BoundaryConditionsCreateFinish - INTERFACE cmfe_SolverEquations_BoundaryConditionsGet - MODULE PROCEDURE cmfe_SolverEquations_BoundaryConditionsGetNumber0 - MODULE PROCEDURE cmfe_SolverEquations_BoundaryConditionsGetNumber1 - MODULE PROCEDURE cmfe_SolverEquations_BoundaryConditionsGetObj - END INTERFACE cmfe_SolverEquations_BoundaryConditionsGet + PUBLIC CMFE_SOLVER_LINEAR_DIRECT_SOLVE_TYPE,CMFE_SOLVER_LINEAR_ITERATIVE_SOLVE_TYPE - PUBLIC CMFE_CELLML_EQUATIONS_LINEAR,CMFE_CELLML_EQUATIONS_NONLINEAR + PUBLIC CMFE_SOLVER_DIRECT_LU,CMFE_SOLVER_DIRECT_CHOLESKY,CMFE_SOLVER_DIRECT_SVD - PUBLIC CMFE_CELLML_EQUATIONS_STATIC,CMFE_CELLML_EQUATIONS_QUASISTATIC,CMFE_CELLML_EQUATIONS_DYNAMIC + PUBLIC CMFE_SOLVER_ITERATIVE_RICHARDSON,CMFE_SOLVER_ITERATIVE_CONJUGATE_GRADIENT,CMFE_SOLVER_ITERATIVE_CHEBYSHEV, & + & CMFE_SOLVER_ITERATIVE_BICONJUGATE_GRADIENT,CMFE_SOLVER_ITERATIVE_GMRES,CMFE_SOLVER_ITERATIVE_BiCGSTAB, & + & CMFE_SOLVER_ITERATIVE_CONJGRAD_SQUARED - PUBLIC CMFE_SOLVER_LINEAR_TYPE,CMFE_SOLVER_NONLINEAR_TYPE,CMFE_SOLVER_DYNAMIC_TYPE,CMFE_SOLVER_DAE_TYPE, & - & CMFE_SOLVER_EIGENPROBLEM_TYPE, & - & CMFE_SOLVER_OPTIMISER_TYPE + PUBLIC CMFE_SOLVER_ITERATIVE_NO_PRECONDITIONER,CMFE_SOLVER_ITERATIVE_JACOBI_PRECONDITIONER, & + & CMFE_SOLVER_ITERATIVE_BLOCK_JACOBI_PRECONDITIONER,CMFE_SOLVER_ITERATIVE_SOR_PRECONDITIONER, & + & CMFE_SOLVER_ITERATIVE_INCOMPLETE_CHOLESKY_PRECONDITIONER,CMFE_SOLVER_ITERATIVE_INCOMPLETE_LU_PRECONDITIONER, & + & CMFE_SOLVER_ITERATIVE_ADDITIVE_SCHWARZ_PRECONDITIONER - PUBLIC CMFE_SOLVER_CMISS_LIBRARY,CMFE_SOLVER_PETSC_LIBRARY,CMFE_SOLVER_MUMPS_LIBRARY,CMFE_SOLVER_SUPERLU_LIBRARY, & - & CMFE_SOLVER_SPOOLES_LIBRARY,CMFE_SOLVER_UMFPACK_LIBRARY,CMFE_SOLVER_LUSOL_LIBRARY,CMFE_SOLVER_ESSL_LIBRARY, & - & CMFE_SOLVER_LAPACK_LIBRARY,CMFE_SOLVER_HYPRE_LIBRARY,CMFE_SOLVER_PASTIX_LIBRARY + PUBLIC CMFE_SOLVER_NONLINEAR_NEWTON,CMFE_SOLVER_NONLINEAR_BFGS_INVERSE,CMFE_SOLVER_NONLINEAR_SQP - PUBLIC CMFE_SOLVER_LINEAR_DIRECT_SOLVE_TYPE,CMFE_SOLVER_LINEAR_ITERATIVE_SOLVE_TYPE + PUBLIC CMFE_SOLVER_NONLINEAR_QUASI_NEWTON - PUBLIC CMFE_SOLVER_DIRECT_LU,CMFE_SOLVER_DIRECT_CHOLESKY,CMFE_SOLVER_DIRECT_SVD + PUBLIC CMFE_SOLVER_QUASI_NEWTON_LINESEARCH,CMFE_SOLVER_QUASI_NEWTON_TRUSTREGION - PUBLIC CMFE_SOLVER_ITERATIVE_RICHARDSON,CMFE_SOLVER_ITERATIVE_CONJUGATE_GRADIENT,CMFE_SOLVER_ITERATIVE_CHEBYSHEV, & - & CMFE_SOLVER_ITERATIVE_BICONJUGATE_GRADIENT,CMFE_SOLVER_ITERATIVE_GMRES,CMFE_SOLVER_ITERATIVE_BiCGSTAB, & - & CMFE_SOLVER_ITERATIVE_CONJGRAD_SQUARED + PUBLIC CMFE_SOLVER_QUASI_NEWTON_LBFGS,CMFE_SOLVER_QUASI_NEWTON_GOODBROYDEN,CMFE_SOLVER_QUASI_NEWTON_BADBROYDEN - PUBLIC CMFE_SOLVER_ITERATIVE_NO_PRECONDITIONER,CMFE_SOLVER_ITERATIVE_JACOBI_PRECONDITIONER, & - & CMFE_SOLVER_ITERATIVE_BLOCK_JACOBI_PRECONDITIONER,CMFE_SOLVER_ITERATIVE_SOR_PRECONDITIONER, & - & CMFE_SOLVER_ITERATIVE_INCOMPLETE_CHOLESKY_PRECONDITIONER,CMFE_SOLVER_ITERATIVE_INCOMPLETE_LU_PRECONDITIONER, & - & CMFE_SOLVER_ITERATIVE_ADDITIVE_SCHWARZ_PRECONDITIONER + PUBLIC CMFE_SOLVER_QUASI_NEWTON_LINESEARCH_BASIC,CMFE_SOLVER_QUASI_NEWTON_LINESEARCH_L2, & + & CMFE_SOLVER_QUASI_NEWTON_LINESEARCH_CP - PUBLIC CMFE_SOLVER_NONLINEAR_NEWTON,CMFE_SOLVER_NONLINEAR_BFGS_INVERSE,CMFE_SOLVER_NONLINEAR_SQP + PUBLIC CMFE_SOLVER_QUASI_NEWTON_RESTART_NONE,CMFE_SOLVER_QUASI_NEWTON_RESTART_POWELL, & + & CMFE_SOLVER_QUASI_NEWTON_RESTART_PERIODIC - PUBLIC CMFE_SOLVER_NONLINEAR_QUASI_NEWTON + PUBLIC CMFE_SOLVER_QUASI_NEWTON_SCALE_NONE,CMFE_SOLVER_QUASI_NEWTON_SCALE_SHANNO, & + & CMFE_SOLVER_QUASI_NEWTON_SCALE_LINESEARCH,CMFE_SOLVER_QUASI_NEWTON_SCALE_JACOBIAN - PUBLIC CMFE_SOLVER_QUASI_NEWTON_LINESEARCH,CMFE_SOLVER_QUASI_NEWTON_TRUSTREGION + PUBLIC CMFE_SOLVER_NEWTON_LINESEARCH,CMFE_SOLVER_NEWTON_TRUSTREGION - PUBLIC CMFE_SOLVER_QUASI_NEWTON_LBFGS,CMFE_SOLVER_QUASI_NEWTON_GOODBROYDEN,CMFE_SOLVER_QUASI_NEWTON_BADBROYDEN + PUBLIC CMFE_SOLVER_NEWTON_LINESEARCH_LINEAR,CMFE_SOLVER_NEWTON_LINESEARCH_QUADRATIC,CMFE_SOLVER_NEWTON_LINESEARCH_CUBIC - PUBLIC CMFE_SOLVER_QUASI_NEWTON_LINESEARCH_BASIC,CMFE_SOLVER_QUASI_NEWTON_LINESEARCH_L2, & - & CMFE_SOLVER_QUASI_NEWTON_LINESEARCH_CP + PUBLIC CMFE_SOLVER_NEWTON_JACOBIAN_NOT_CALCULATED,CMFE_SOLVER_NEWTON_JACOBIAN_EQUATIONS_CALCULATED, & + & CMFE_SOLVER_NEWTON_JACOBIAN_FD_CALCULATED - PUBLIC CMFE_SOLVER_QUASI_NEWTON_RESTART_NONE,CMFE_SOLVER_QUASI_NEWTON_RESTART_POWELL, & - & CMFE_SOLVER_QUASI_NEWTON_RESTART_PERIODIC + PUBLIC CMFE_SOLVER_NEWTON_CONVERGENCE_PETSC_DEFAULT,CMFE_SOLVER_NEWTON_CONVERGENCE_ENERGY_NORM, & + & CMFE_SOLVER_NEWTON_CONVERGENCE_DIFFERENTIATED_RATIO - PUBLIC CMFE_SOLVER_QUASI_NEWTON_SCALE_NONE,CMFE_SOLVER_QUASI_NEWTON_SCALE_SHANNO, & - & CMFE_SOLVER_QUASI_NEWTON_SCALE_LINESEARCH,CMFE_SOLVER_QUASI_NEWTON_SCALE_JACOBIAN + PUBLIC CMFE_SOLVER_DYNAMIC_FIRST_ORDER,CMFE_SOLVER_DYNAMIC_SECOND_ORDER - PUBLIC CMFE_SOLVER_NEWTON_LINESEARCH,CMFE_SOLVER_NEWTON_TRUSTREGION + PUBLIC CMFE_SOLVER_DYNAMIC_LINEAR,CMFE_SOLVER_DYNAMIC_NONLINEAR - PUBLIC CMFE_SOLVER_NEWTON_LINESEARCH_LINEAR,CMFE_SOLVER_NEWTON_LINESEARCH_QUADRATIC,CMFE_SOLVER_NEWTON_LINESEARCH_CUBIC + PUBLIC CMFE_SOLVER_DYNAMIC_FIRST_DEGREE,CMFE_SOLVER_DYNAMIC_SECOND_DEGREE,CMFE_SOLVER_DYNAMIC_THIRD_DEGREE - PUBLIC CMFE_SOLVER_NEWTON_JACOBIAN_NOT_CALCULATED,CMFE_SOLVER_NEWTON_JACOBIAN_EQUATIONS_CALCULATED, & - & CMFE_SOLVER_NEWTON_JACOBIAN_FD_CALCULATED + PUBLIC CMFE_SOLVER_DYNAMIC_EULER_SCHEME,CMFE_SOLVER_DYNAMIC_BACKWARD_EULER_SCHEME,CMFE_SOLVER_DYNAMIC_CRANK_NICOLSON_SCHEME, & + & CMFE_SOLVER_DYNAMIC_GALERKIN_SCHEME,CMFE_SOLVER_DYNAMIC_ZLAMAL_SCHEME,CMFE_SOLVER_DYNAMIC_SECOND_DEGREE_GEAR_SCHEME, & + & CMFE_SOLVER_DYNAMIC_SECOND_DEGREE_LINIGER1_SCHEME,CMFE_SOLVER_DYNAMIC_SECOND_DEGREE_LINIGER2_SCHEME, & + & CMFE_SOLVER_DYNAMIC_NEWMARK1_SCHEME,CMFE_SOLVER_DYNAMIC_NEWMARK2_SCHEME,CMFE_SOLVER_DYNAMIC_NEWMARK3_SCHEME, & + & CMFE_SOLVER_DYNAMIC_THIRD_DEGREE_GEAR_SCHEME,CMFE_SOLVER_DYNAMIC_THIRD_DEGREE_LINIGER1_SCHEME, & + & CMFE_SOLVER_DYNAMIC_THIRD_DEGREE_LINIGER2_SCHEME,CMFE_SOLVER_DYNAMIC_HOUBOLT_SCHEME,CMFE_SOLVER_DYNAMIC_WILSON_SCHEME, & + & CMFE_SOLVER_DYNAMIC_BOSSAK_NEWMARK1_SCHEME,CMFE_SOLVER_DYNAMIC_BOSSAK_NEWMARK2_SCHEME, & + & CMFE_SOLVER_DYNAMIC_HILBERT_HUGHES_TAYLOR1_SCHEME, & + & CMFE_SOLVER_DYNAMIC_HILBERT_HUGHES_TAYLOR2_SCHEME,CMFE_SOLVER_DYNAMIC_USER_DEFINED_SCHEME - PUBLIC CMFE_SOLVER_NEWTON_CONVERGENCE_PETSC_DEFAULT,CMFE_SOLVER_NEWTON_CONVERGENCE_ENERGY_NORM, & - & CMFE_SOLVER_NEWTON_CONVERGENCE_DIFFERENTIATED_RATIO + PUBLIC CMFE_SOLVER_DAE_DIFFERENTIAL_ONLY,CMFE_SOLVER_DAE_INDEX_1,CMFE_SOLVER_DAE_INDEX_2,CMFE_SOLVER_DAE_INDEX_3 - PUBLIC CMFE_SOLVER_DYNAMIC_FIRST_ORDER,CMFE_SOLVER_DYNAMIC_SECOND_ORDER + PUBLIC CMFE_SOLVER_DAE_EULER,CMFE_SOLVER_DAE_CRANK_NICOLSON,CMFE_SOLVER_DAE_RUNGE_KUTTA,CMFE_SOLVER_DAE_ADAMS_MOULTON, & + & CMFE_SOLVER_DAE_BDF, & + & CMFE_SOLVER_DAE_RUSH_LARSON,CMFE_SOLVER_DAE_EXTERNAL - PUBLIC CMFE_SOLVER_DYNAMIC_LINEAR,CMFE_SOLVER_DYNAMIC_NONLINEAR + PUBLIC CMFE_SOLVER_DAE_EULER_FORWARD,CMFE_SOLVER_DAE_EULER_BACKWARD,CMFE_SOLVER_DAE_EULER_IMPROVED - PUBLIC CMFE_SOLVER_DYNAMIC_FIRST_DEGREE,CMFE_SOLVER_DYNAMIC_SECOND_DEGREE,CMFE_SOLVER_DYNAMIC_THIRD_DEGREE + PUBLIC CMFE_SOLVER_SOLUTION_INITIALISE_ZERO,CMFE_SOLVER_SOLUTION_INITIALISE_CURRENT_FIELD, & + & CMFE_SOLVER_SOLUTION_INITIALISE_NO_CHANGE - PUBLIC CMFE_SOLVER_DYNAMIC_EULER_SCHEME,CMFE_SOLVER_DYNAMIC_BACKWARD_EULER_SCHEME,CMFE_SOLVER_DYNAMIC_CRANK_NICOLSON_SCHEME, & - & CMFE_SOLVER_DYNAMIC_GALERKIN_SCHEME,CMFE_SOLVER_DYNAMIC_ZLAMAL_SCHEME,CMFE_SOLVER_DYNAMIC_SECOND_DEGREE_GEAR_SCHEME, & - & CMFE_SOLVER_DYNAMIC_SECOND_DEGREE_LINIGER1_SCHEME,CMFE_SOLVER_DYNAMIC_SECOND_DEGREE_LINIGER2_SCHEME, & - & CMFE_SOLVER_DYNAMIC_NEWMARK1_SCHEME,CMFE_SOLVER_DYNAMIC_NEWMARK2_SCHEME,CMFE_SOLVER_DYNAMIC_NEWMARK3_SCHEME, & - & CMFE_SOLVER_DYNAMIC_THIRD_DEGREE_GEAR_SCHEME,CMFE_SOLVER_DYNAMIC_THIRD_DEGREE_LINIGER1_SCHEME, & - & CMFE_SOLVER_DYNAMIC_THIRD_DEGREE_LINIGER2_SCHEME,CMFE_SOLVER_DYNAMIC_HOUBOLT_SCHEME,CMFE_SOLVER_DYNAMIC_WILSON_SCHEME, & - & CMFE_SOLVER_DYNAMIC_BOSSAK_NEWMARK1_SCHEME,CMFE_SOLVER_DYNAMIC_BOSSAK_NEWMARK2_SCHEME, & - & CMFE_SOLVER_DYNAMIC_HILBERT_HUGHES_TAYLOR1_SCHEME, & - & CMFE_SOLVER_DYNAMIC_HILBERT_HUGHES_TAYLOR2_SCHEME,CMFE_SOLVER_DYNAMIC_USER_DEFINED_SCHEME + PUBLIC CMFE_SOLVER_NO_OUTPUT,CMFE_SOLVER_MONITOR_OUTPUT,CMFE_SOLVER_PROGRESS_OUTPUT,CMFE_SOLVER_TIMING_OUTPUT, & + & CMFE_SOLVER_SOLVER_OUTPUT,CMFE_SOLVER_MATRIX_OUTPUT - PUBLIC CMFE_SOLVER_DAE_DIFFERENTIAL_ONLY,CMFE_SOLVER_DAE_INDEX_1,CMFE_SOLVER_DAE_INDEX_2,CMFE_SOLVER_DAE_INDEX_3 + PUBLIC CMFE_SOLVER_SPARSE_MATRICES,CMFE_SOLVER_FULL_MATRICES - PUBLIC CMFE_SOLVER_DAE_EULER,CMFE_SOLVER_DAE_CRANK_NICOLSON,CMFE_SOLVER_DAE_RUNGE_KUTTA,CMFE_SOLVER_DAE_ADAMS_MOULTON, & - & CMFE_SOLVER_DAE_BDF, & - & CMFE_SOLVER_DAE_RUSH_LARSON,CMFE_SOLVER_DAE_EXTERNAL + PUBLIC CMFE_SOLVER_SYMMETRIC_MATRICES,CMFE_SOLVER_UNSYMMETRIC_MATRICES - PUBLIC CMFE_SOLVER_DAE_EULER_FORWARD,CMFE_SOLVER_DAE_EULER_BACKWARD,CMFE_SOLVER_DAE_EULER_IMPROVED + PUBLIC cmfe_Solver_CellMLEquationsGet - PUBLIC CMFE_SOLVER_SOLUTION_INITIALISE_ZERO,CMFE_SOLVER_SOLUTION_INITIALISE_CURRENT_FIELD, & - & CMFE_SOLVER_SOLUTION_INITIALISE_NO_CHANGE + PUBLIC cmfe_CellMLEquations_CellMLAdd - PUBLIC CMFE_SOLVER_NO_OUTPUT,CMFE_SOLVER_MONITOR_OUTPUT,CMFE_SOLVER_PROGRESS_OUTPUT,CMFE_SOLVER_TIMING_OUTPUT, & - & CMFE_SOLVER_SOLVER_OUTPUT,CMFE_SOLVER_MATRIX_OUTPUT + PUBLIC cmfe_CellMLEquations_LinearityTypeGet,cmfe_CellMLEquations_LinearityTypeSet - PUBLIC CMFE_SOLVER_SPARSE_MATRICES,CMFE_SOLVER_FULL_MATRICES + PUBLIC cmfe_CellMLEquations_TimeDependenceTypeGet,cmfe_CellMLEquations_TimeDependenceTypeSet - PUBLIC CMFE_SOLVER_SYMMETRIC_MATRICES,CMFE_SOLVER_UNSYMMETRIC_MATRICES + PUBLIC cmfe_Solver_DAEEulerSolverTypeGet,cmfe_Solver_DAEEulerSolverTypeSet - PUBLIC cmfe_Solver_CellMLEquationsGet + PUBLIC cmfe_Solver_DAESolverTypeGet,cmfe_Solver_DAESolverTypeSet - PUBLIC cmfe_CellMLEquations_CellMLAdd + PUBLIC cmfe_Solver_DAETimesSet,cmfe_Solver_DAETimeStepSet - PUBLIC cmfe_CellMLEquations_LinearityTypeGet,cmfe_CellMLEquations_LinearityTypeSet + PUBLIC cmfe_Solver_DynamicDegreeGet,cmfe_Solver_DynamicDegreeSet - PUBLIC cmfe_CellMLEquations_TimeDependenceTypeGet,cmfe_CellMLEquations_TimeDependenceTypeSet + PUBLIC cmfe_Solver_DynamicLinearityTypeGet - PUBLIC cmfe_Solver_DAEEulerSolverTypeGet,cmfe_Solver_DAEEulerSolverTypeSet + PUBLIC cmfe_Solver_DynamicLinearSolverGet,cmfe_Solver_DynamicNonlinearSolverGet - PUBLIC cmfe_Solver_DAESolverTypeGet,cmfe_Solver_DAESolverTypeSet + PUBLIC cmfe_Solver_DynamicSchemeSet - PUBLIC cmfe_Solver_DAETimesSet,cmfe_Solver_DAETimeStepSet + PUBLIC cmfe_Solver_DynamicThetaSet - PUBLIC cmfe_Solver_DynamicDegreeGet,cmfe_Solver_DynamicDegreeSet + PUBLIC cmfe_Solver_DynamicTimesSet - PUBLIC cmfe_Solver_DynamicLinearityTypeGet + PUBLIC cmfe_Solver_GeometricTransformationArbitraryPathSet,cmfe_Solver_GeometricTransformationClear - PUBLIC cmfe_Solver_DynamicLinearSolverGet,cmfe_Solver_DynamicNonlinearSolverGet + PUBLIC cmfe_Solver_GeometricTransformationNumberOfLoadIncrementsSet - PUBLIC cmfe_Solver_DynamicSchemeSet + PUBLIC cmfe_Solver_GeometricTransformationScalingsSet - PUBLIC cmfe_Solver_DynamicThetaSet + PUBLIC cmfe_Solver_GeometricTransformationFieldSet - PUBLIC cmfe_Solver_DynamicTimesSet + PUBLIC cmfe_Solver_GeometricTransformationMatrixSet - PUBLIC cmfe_Solver_GeometricTransformationArbitraryPathSet,cmfe_Solver_GeometricTransformationClear + PUBLIC cmfe_Solver_GeometricTransformationRotationSet,cmfe_Solver_GeometricTransformationTranslationSet - PUBLIC cmfe_Solver_GeometricTransformationNumberOfLoadIncrementsSet + PUBLIC cmfe_Solver_LabelGet,cmfe_Solver_LabelSet - PUBLIC cmfe_Solver_GeometricTransformationScalingsSet + PUBLIC cmfe_Solver_LibraryTypeGet,cmfe_Solver_LibraryTypeSet - PUBLIC cmfe_Solver_GeometricTransformationFieldSet + PUBLIC cmfe_Solver_LinearDirectTypeSet - PUBLIC cmfe_Solver_GeometricTransformationMatrixSet + PUBLIC cmfe_Solver_MumpsSetIcntl,cmfe_Solver_MumpsSetCntl - PUBLIC cmfe_Solver_GeometricTransformationRotationSet,cmfe_Solver_GeometricTransformationTranslationSet + PUBLIC cmfe_Solver_LinearIterativeAbsoluteToleranceSet - PUBLIC cmfe_Solver_LabelGet,cmfe_Solver_LabelSet + PUBLIC cmfe_Solver_LinearIterativeDivergenceToleranceSet - PUBLIC cmfe_Solver_LibraryTypeGet,cmfe_Solver_LibraryTypeSet + PUBLIC cmfe_Solver_LinearIterativeGMRESRestartSet - PUBLIC cmfe_Solver_LinearDirectTypeSet + PUBLIC cmfe_Solver_LinearIterativeMaximumIterationsSet - PUBLIC cmfe_Solver_MumpsSetIcntl,cmfe_Solver_MumpsSetCntl + PUBLIC cmfe_Solver_LinearIterativePreconditionerTypeSet - PUBLIC cmfe_Solver_LinearIterativeAbsoluteToleranceSet + PUBLIC cmfe_Solver_LinearIterativeRelativeToleranceSet - PUBLIC cmfe_Solver_LinearIterativeDivergenceToleranceSet + PUBLIC cmfe_Solver_LinearIterativeTypeSet - PUBLIC cmfe_Solver_LinearIterativeGMRESRestartSet + PUBLIC cmfe_Solver_LinearTypeSet - PUBLIC cmfe_Solver_LinearIterativeMaximumIterationsSet + PUBLIC cmfe_Solver_NewtonAbsoluteToleranceSet - PUBLIC cmfe_Solver_LinearIterativePreconditionerTypeSet + PUBLIC cmfe_Solver_NewtonLineSearchMonitorOutputSet - PUBLIC cmfe_Solver_LinearIterativeRelativeToleranceSet + PUBLIC cmfe_Solver_NewtonJacobianCalculationTypeSet - PUBLIC cmfe_Solver_LinearIterativeTypeSet + PUBLIC cmfe_Solver_NewtonLinearSolverGet - PUBLIC cmfe_Solver_LinearTypeSet + PUBLIC cmfe_Solver_NewtonCellMLSolverGet - PUBLIC cmfe_Solver_NewtonAbsoluteToleranceSet + PUBLIC cmfe_Solver_NewtonConvergenceTestTypeSet - PUBLIC cmfe_Solver_NewtonLineSearchMonitorOutputSet + PUBLIC cmfe_Solver_NewtonLineSearchAlphaSet - PUBLIC cmfe_Solver_NewtonJacobianCalculationTypeSet + PUBLIC cmfe_Solver_NewtonLineSearchMaxStepSet - PUBLIC cmfe_Solver_NewtonLinearSolverGet + PUBLIC cmfe_Solver_NewtonLineSearchStepTolSet - PUBLIC cmfe_Solver_NewtonCellMLSolverGet + PUBLIC cmfe_Solver_NewtonLineSearchTypeSet - PUBLIC cmfe_Solver_NewtonConvergenceTestTypeSet + PUBLIC cmfe_Solver_NewtonMaximumFunctionEvaluationsSet - PUBLIC cmfe_Solver_NewtonLineSearchAlphaSet + PUBLIC cmfe_Solver_NewtonMaximumIterationsSet - PUBLIC cmfe_Solver_NewtonLineSearchMaxStepSet + PUBLIC cmfe_Solver_NewtonRelativeToleranceSet - PUBLIC cmfe_Solver_NewtonLineSearchStepTolSet + PUBLIC cmfe_Solver_NewtonSolutionToleranceSet - PUBLIC cmfe_Solver_NewtonLineSearchTypeSet + PUBLIC cmfe_Solver_NewtonTrustRegionDelta0Set - PUBLIC cmfe_Solver_NewtonMaximumFunctionEvaluationsSet + PUBLIC cmfe_Solver_NewtonTrustRegionToleranceSet - PUBLIC cmfe_Solver_NewtonMaximumIterationsSet + PUBLIC cmfe_Solver_NewtonTypeSet - PUBLIC cmfe_Solver_NewtonRelativeToleranceSet + PUBLIC cmfe_Solver_QuasiNewtonAbsoluteToleranceSet - PUBLIC cmfe_Solver_NewtonSolutionToleranceSet + PUBLIC cmfe_Solver_QuasiNewtonLineSearchMonitorOutputSet - PUBLIC cmfe_Solver_NewtonTrustRegionDelta0Set + PUBLIC cmfe_Solver_QuasiNewtonJacobianCalculationTypeSet - PUBLIC cmfe_Solver_NewtonTrustRegionToleranceSet + PUBLIC cmfe_Solver_QuasiNewtonLinearSolverGet - PUBLIC cmfe_Solver_NewtonTypeSet + PUBLIC cmfe_Solver_QuasiNewtonCellMLSolverGet - PUBLIC cmfe_Solver_QuasiNewtonAbsoluteToleranceSet + PUBLIC cmfe_Solver_QuasiNewtonConvergenceTestTypeSet - PUBLIC cmfe_Solver_QuasiNewtonLineSearchMonitorOutputSet + PUBLIC cmfe_Solver_QuasiNewtonLineSearchMaxStepSet - PUBLIC cmfe_Solver_QuasiNewtonJacobianCalculationTypeSet + PUBLIC cmfe_Solver_QuasiNewtonLineSearchStepTolSet - PUBLIC cmfe_Solver_QuasiNewtonLinearSolverGet + PUBLIC cmfe_Solver_QuasiNewtonLineSearchTypeSet - PUBLIC cmfe_Solver_QuasiNewtonCellMLSolverGet + PUBLIC cmfe_Solver_QuasiNewtonMaximumFunctionEvaluationsSet - PUBLIC cmfe_Solver_QuasiNewtonConvergenceTestTypeSet + PUBLIC cmfe_Solver_QuasiNewtonMaximumIterationsSet - PUBLIC cmfe_Solver_QuasiNewtonLineSearchMaxStepSet + PUBLIC cmfe_Solver_QuasiNewtonRelativeToleranceSet - PUBLIC cmfe_Solver_QuasiNewtonLineSearchStepTolSet + PUBLIC cmfe_Solver_QuasiNewtonSolutionToleranceSet - PUBLIC cmfe_Solver_QuasiNewtonLineSearchTypeSet + PUBLIC cmfe_Solver_QuasiNewtonTrustRegionDelta0Set - PUBLIC cmfe_Solver_QuasiNewtonMaximumFunctionEvaluationsSet + PUBLIC cmfe_Solver_QuasiNewtonTrustRegionToleranceSet - PUBLIC cmfe_Solver_QuasiNewtonMaximumIterationsSet + PUBLIC cmfe_Solver_QuasiNewtonRestartSet - PUBLIC cmfe_Solver_QuasiNewtonRelativeToleranceSet + PUBLIC cmfe_Solver_QuasiNewtonRestartTypeSet - PUBLIC cmfe_Solver_QuasiNewtonSolutionToleranceSet + PUBLIC cmfe_Solver_QuasiNewtonScaleTypeSet - PUBLIC cmfe_Solver_QuasiNewtonTrustRegionDelta0Set + PUBLIC cmfe_Solver_QuasiNewtonSolveTypeSet - PUBLIC cmfe_Solver_QuasiNewtonTrustRegionToleranceSet + PUBLIC cmfe_Solver_QuasiNewtonTypeSet - PUBLIC cmfe_Solver_QuasiNewtonRestartSet + PUBLIC cmfe_Solver_NonlinearTypeSet - PUBLIC cmfe_Solver_QuasiNewtonRestartTypeSet + PUBLIC cmfe_Solver_OutputTypeSet - PUBLIC cmfe_Solver_QuasiNewtonScaleTypeSet + PUBLIC cmfe_Solver_SolverEquationsGet - PUBLIC cmfe_Solver_QuasiNewtonSolveTypeSet + PUBLIC cmfe_SolverEquations_BoundaryConditionsCreateFinish,cmfe_SolverEquations_BoundaryConditionsCreateStart - PUBLIC cmfe_Solver_QuasiNewtonTypeSet + PUBLIC cmfe_SolverEquations_BoundaryConditionsGet - PUBLIC cmfe_Solver_NonlinearTypeSet + PUBLIC cmfe_SolverEquations_EquationsSetAdd - PUBLIC cmfe_Solver_OutputTypeSet + PUBLIC cmfe_SolverEquations_InterfaceConditionAdd - PUBLIC cmfe_Solver_SolverEquationsGet + PUBLIC cmfe_SolverEquations_JacobianMatrixGet - PUBLIC cmfe_SolverEquations_BoundaryConditionsCreateFinish,cmfe_SolverEquations_BoundaryConditionsCreateStart + PUBLIC cmfe_SolverEquations_MatrixGet - PUBLIC cmfe_SolverEquations_BoundaryConditionsGet + PUBLIC cmfe_SolverEquations_NumberOfMatricesGet - PUBLIC cmfe_SolverEquations_EquationsSetAdd + PUBLIC cmfe_SolverEquations_ResidualVectorGet - PUBLIC cmfe_SolverEquations_InterfaceConditionAdd + PUBLIC cmfe_SolverEquations_RhsVectorGet - PUBLIC cmfe_SolverEquations_JacobianMatrixGet + PUBLIC cmfe_SolverEquations_SparsityTypeSet - PUBLIC cmfe_SolverEquations_MatrixGet + PUBLIC cmfe_SolverEquations_SymmetryTypeGet,cmfe_SolverEquations_SymmetryTypeSet - PUBLIC cmfe_SolverEquations_NumberOfMatricesGet + PUBLIC cmfe_SolverEquations_VectorGet - PUBLIC cmfe_SolverEquations_ResidualVectorGet + PUBLIC cmfe_BioelectricsFiniteElasticity_UpdateGeometricField - PUBLIC cmfe_SolverEquations_RhsVectorGet +!================================================================================================================================== +! +! FieldML routines +! +!================================================================================================================================== - PUBLIC cmfe_SolverEquations_SparsityTypeSet + !> Provides input and output of fields through the FieldML API + TYPE cmfe_FieldMLIOType + PRIVATE +#ifdef WITH_FIELDML + TYPE(FIELDML_IO_TYPE), POINTER :: fieldmlInfo +#endif + END TYPE cmfe_FieldMLIOType + + !> Creates a mesh component using the given FieldML evaluator. + INTERFACE cmfe_FieldML_InputCreateMeshComponent + MODULE PROCEDURE cmfe_FieldML_InputCreateMeshComponentObjVS + MODULE PROCEDURE cmfe_FieldML_InputCreateMeshComponentNumberVS + MODULE PROCEDURE cmfe_FieldML_InputCreateMeshComponentObjC + MODULE PROCEDURE cmfe_FieldML_InputCreateMeshComponentNumberC + END INTERFACE cmfe_FieldML_InputCreateMeshComponent + + !> Creates a field component using the given FieldML evaluator. + INTERFACE cmfe_FieldML_InputFieldCreateStart + MODULE PROCEDURE cmfe_FieldML_InputFieldCreateStartObjVS + MODULE PROCEDURE cmfe_FieldML_InputFieldCreateStartNumberVS + MODULE PROCEDURE cmfe_FieldML_InputFieldCreateStartObjC + MODULE PROCEDURE cmfe_FieldML_InputFieldCreateStartNumberC + END INTERFACE cmfe_FieldML_InputFieldCreateStart + + !> Updates the given field's dofs using the given parameter evaluator. + INTERFACE cmfe_FieldML_InputFieldParametersUpdate + MODULE PROCEDURE cmfe_FieldML_InputFieldParametersUpdateObjVS + MODULE PROCEDURE cmfe_FieldML_InputFieldParametersUpdateNumberVS + MODULE PROCEDURE cmfe_FieldML_InputFieldParametersUpdateObjC + MODULE PROCEDURE cmfe_FieldML_InputFieldParametersUpdateNumberC + END INTERFACE cmfe_FieldML_InputFieldParametersUpdate + + !> Creates a basis using the given FieldML evaluator. + INTERFACE cmfe_FieldML_InputBasisCreateStart + MODULE PROCEDURE cmfe_FieldML_InputBasisCreateStartObjVS + MODULE PROCEDURE cmfe_FieldML_InputBasisCreateStartNumberVS + MODULE PROCEDURE cmfe_FieldML_InputBasisCreateStartObjC + MODULE PROCEDURE cmfe_FieldML_InputBasisCreateStartNumberC + END INTERFACE cmfe_FieldML_InputBasisCreateStart + + !> Creates the region's nodes using the given FieldML evaluator. + INTERFACE cmfe_FieldML_InputNodesCreateStart + MODULE PROCEDURE cmfe_FieldML_InputNodesCreateStartObjVS + MODULE PROCEDURE cmfe_FieldML_InputNodesCreateStartNumberVS + MODULE PROCEDURE cmfe_FieldML_InputNodesCreateStartObjC + MODULE PROCEDURE cmfe_FieldML_InputNodesCreateStartNumberC + END INTERFACE cmfe_FieldML_InputNodesCreateStart + + !> Creates the region's coordinate system using the given FieldML evaluator. + INTERFACE cmfe_FieldML_InputCoordinateSystemCreateStart + MODULE PROCEDURE cmfe_FieldML_InputCoordinateSystemCreateStartObjVS + MODULE PROCEDURE cmfe_FieldML_InputCoordinateSystemCreateStartNumberVS + MODULE PROCEDURE cmfe_FieldML_InputCoordinateSystemCreateStartObjC + MODULE PROCEDURE cmfe_FieldML_InputCoordinateSystemCreateStartNumberC + END INTERFACE cmfe_FieldML_InputCoordinateSystemCreateStart + + !> Creates a mesh using the given FieldML evaluator. + INTERFACE cmfe_FieldML_InputMeshCreateStart + MODULE PROCEDURE cmfe_FieldML_InputMeshCreateStartObjVS + MODULE PROCEDURE cmfe_FieldML_InputMeshCreateStartNumberVS + MODULE PROCEDURE cmfe_FieldML_InputMeshCreateStartObjC + MODULE PROCEDURE cmfe_FieldML_InputMeshCreateStartNumberC + END INTERFACE cmfe_FieldML_InputMeshCreateStart + + !> Initialise the given FieldML context using the given FieldML XML file. + INTERFACE cmfe_FieldML_InputCreateFromFile + MODULE PROCEDURE cmfe_FieldML_InputCreateFromFileVS + MODULE PROCEDURE cmfe_FieldML_InputCreateFromFileC + END INTERFACE cmfe_FieldML_InputCreateFromFile + + PUBLIC :: cmfe_FieldML_InputCreateFromFile,cmfe_FieldML_InputMeshCreateStart, & + & cmfe_FieldML_InputCoordinateSystemCreateStart,cmfe_FieldML_InputCreateMeshComponent, & + & cmfe_FieldML_InputFieldCreateStart,cmfe_FieldML_InputBasisCreateStart,cmfe_FieldML_InputNodesCreateStart, & + & cmfe_FieldML_InputFieldParametersUpdate + + PUBLIC :: cmfe_FieldMLIO_Finalise,cmfe_FieldMLIO_Initialise,cmfe_FieldMLIO_GetSession + + !> Add the given field to the current FieldML context. + INTERFACE cmfe_FieldML_OutputAddField + MODULE PROCEDURE cmfe_FieldML_OutputAddFieldNoTypeObjVS + MODULE PROCEDURE cmfe_FieldML_OutputAddFieldNoTypeNumberVS + MODULE PROCEDURE cmfe_FieldML_OutputAddFieldWithTypeObjVS + MODULE PROCEDURE cmfe_FieldML_OutputAddFieldWithTypeNumberVS + MODULE PROCEDURE cmfe_FieldML_OutputAddFieldNoTypeObjC + MODULE PROCEDURE cmfe_FieldML_OutputAddFieldNoTypeNumberC + MODULE PROCEDURE cmfe_FieldML_OutputAddFieldWithTypeObjC + MODULE PROCEDURE cmfe_FieldML_OutputAddFieldWithTypeNumberC + END INTERFACE cmfe_FieldML_OutputAddField + + !> Initialise a new FieldML context. + INTERFACE cmfe_FieldML_OutputCreate + MODULE PROCEDURE cmfe_FieldML_OutputCreateObjVS + MODULE PROCEDURE cmfe_FieldML_OutputCreateNumberVS + MODULE PROCEDURE cmfe_FieldML_OutputCreateObjC + MODULE PROCEDURE cmfe_FieldML_OutputCreateNumberC + END INTERFACE cmfe_FieldML_OutputCreate + + !> Add the given field to the current FieldML context, using only the given components. + INTERFACE cmfe_FieldML_OutputAddFieldComponents + MODULE PROCEDURE cmfe_FieldML_OutputAddFieldComponentsObjVS + MODULE PROCEDURE cmfe_FieldML_OutputAddFieldComponentsNumberVS + MODULE PROCEDURE cmfe_FieldML_OutputAddFieldComponentsObjC + MODULE PROCEDURE cmfe_FieldML_OutputAddFieldComponentsNumberC + END INTERFACE cmfe_FieldML_OutputAddFieldComponents + + !> Write the current FieldML document to the given file. + INTERFACE cmfe_FieldML_OutputWrite + MODULE PROCEDURE cmfe_FieldML_OutputWriteVS + MODULE PROCEDURE cmfe_FieldML_OutputWriteC + END INTERFACE cmfe_FieldML_OutputWrite + + PUBLIC :: cmfe_FieldMLIOType + + PUBLIC :: cmfe_FieldML_OutputWrite,cmfe_FieldML_OutputAddField,cmfe_FieldML_OutputCreate, & + & cmfe_FieldML_OutputAddFieldComponents, & + & cmfe_FieldML_OutputAddImport + +!================================================================================================================================== +! +! GENERAL_ROUTINES +! +!================================================================================================================================== - PUBLIC cmfe_SolverEquations_SymmetryTypeGet,cmfe_SolverEquations_SymmetryTypeSet + !>Returns the user number of an object. + INTERFACE cmfe_UserNumberGet + MODULE PROCEDURE cmfe_Region_UserNumberGet + MODULE PROCEDURE cmfe_Mesh_UserNumberGet + MODULE PROCEDURE cmfe_Basis_UserNumberGet + END INTERFACE cmfe_UserNumberGet - PUBLIC cmfe_SolverEquations_VectorGet + PUBLIC cmfe_UserNumberGet - PUBLIC cmfe_BioelectricsFiniteElasticity_UpdateGeometricField -!!================================================================================================================================== -!! -!! FieldML routines -!! -!!================================================================================================================================== +!================================================================================================================================== - !> Provides input and output of fields through the FieldML API - TYPE cmfe_FieldMLIOType - PRIVATE -#ifdef WITH_FIELDML - TYPE(FIELDML_IO_TYPE), POINTER :: fieldmlInfo -#endif - END TYPE cmfe_FieldMLIOType - - !> Creates a mesh component using the given FieldML evaluator. - INTERFACE cmfe_FieldML_InputCreateMeshComponent - MODULE PROCEDURE cmfe_FieldML_InputCreateMeshComponentObjVS - MODULE PROCEDURE cmfe_FieldML_InputCreateMeshComponentNumberVS - MODULE PROCEDURE cmfe_FieldML_InputCreateMeshComponentObjC - MODULE PROCEDURE cmfe_FieldML_InputCreateMeshComponentNumberC - END INTERFACE cmfe_FieldML_InputCreateMeshComponent - - !> Creates a field component using the given FieldML evaluator. - INTERFACE cmfe_FieldML_InputFieldCreateStart - MODULE PROCEDURE cmfe_FieldML_InputFieldCreateStartObjVS - MODULE PROCEDURE cmfe_FieldML_InputFieldCreateStartNumberVS - MODULE PROCEDURE cmfe_FieldML_InputFieldCreateStartObjC - MODULE PROCEDURE cmfe_FieldML_InputFieldCreateStartNumberC - END INTERFACE cmfe_FieldML_InputFieldCreateStart - - !> Updates the given field's dofs using the given parameter evaluator. - INTERFACE cmfe_FieldML_InputFieldParametersUpdate - MODULE PROCEDURE cmfe_FieldML_InputFieldParametersUpdateObjVS - MODULE PROCEDURE cmfe_FieldML_InputFieldParametersUpdateNumberVS - MODULE PROCEDURE cmfe_FieldML_InputFieldParametersUpdateObjC - MODULE PROCEDURE cmfe_FieldML_InputFieldParametersUpdateNumberC - END INTERFACE cmfe_FieldML_InputFieldParametersUpdate - - !> Creates a basis using the given FieldML evaluator. - INTERFACE cmfe_FieldML_InputBasisCreateStart - MODULE PROCEDURE cmfe_FieldML_InputBasisCreateStartObjVS - MODULE PROCEDURE cmfe_FieldML_InputBasisCreateStartNumberVS - MODULE PROCEDURE cmfe_FieldML_InputBasisCreateStartObjC - MODULE PROCEDURE cmfe_FieldML_InputBasisCreateStartNumberC - END INTERFACE cmfe_FieldML_InputBasisCreateStart - - !> Creates the region's nodes using the given FieldML evaluator. - INTERFACE cmfe_FieldML_InputNodesCreateStart - MODULE PROCEDURE cmfe_FieldML_InputNodesCreateStartObjVS - MODULE PROCEDURE cmfe_FieldML_InputNodesCreateStartNumberVS - MODULE PROCEDURE cmfe_FieldML_InputNodesCreateStartObjC - MODULE PROCEDURE cmfe_FieldML_InputNodesCreateStartNumberC - END INTERFACE cmfe_FieldML_InputNodesCreateStart - - !> Creates the region's coordinate system using the given FieldML evaluator. - INTERFACE cmfe_FieldML_InputCoordinateSystemCreateStart - MODULE PROCEDURE cmfe_FieldML_InputCoordinateSystemCreateStartObjVS - MODULE PROCEDURE cmfe_FieldML_InputCoordinateSystemCreateStartNumberVS - MODULE PROCEDURE cmfe_FieldML_InputCoordinateSystemCreateStartObjC - MODULE PROCEDURE cmfe_FieldML_InputCoordinateSystemCreateStartNumberC - END INTERFACE cmfe_FieldML_InputCoordinateSystemCreateStart - !> Creates a mesh using the given FieldML evaluator. - INTERFACE cmfe_FieldML_InputMeshCreateStart - MODULE PROCEDURE cmfe_FieldML_InputMeshCreateStartObjVS - MODULE PROCEDURE cmfe_FieldML_InputMeshCreateStartNumberVS - MODULE PROCEDURE cmfe_FieldML_InputMeshCreateStartObjC - MODULE PROCEDURE cmfe_FieldML_InputMeshCreateStartNumberC - END INTERFACE cmfe_FieldML_InputMeshCreateStart +CONTAINS - !> Initialise the given FieldML context using the given FieldML XML file. - INTERFACE cmfe_FieldML_InputCreateFromFile - MODULE PROCEDURE cmfe_FieldML_InputCreateFromFileVS - MODULE PROCEDURE cmfe_FieldML_InputCreateFromFileC - END INTERFACE cmfe_FieldML_InputCreateFromFile - - PUBLIC :: cmfe_FieldML_InputCreateFromFile,cmfe_FieldML_InputMeshCreateStart, & - & cmfe_FieldML_InputCoordinateSystemCreateStart,cmfe_FieldML_InputCreateMeshComponent, & - & cmfe_FieldML_InputFieldCreateStart,cmfe_FieldML_InputBasisCreateStart,cmfe_FieldML_InputNodesCreateStart, & - & cmfe_FieldML_InputFieldParametersUpdate - - PUBLIC :: cmfe_FieldMLIO_Finalise,cmfe_FieldMLIO_Initialise,cmfe_FieldMLIO_GetSession - - !> Add the given field to the current FieldML context. - INTERFACE cmfe_FieldML_OutputAddField - MODULE PROCEDURE cmfe_FieldML_OutputAddFieldNoTypeObjVS - MODULE PROCEDURE cmfe_FieldML_OutputAddFieldNoTypeNumberVS - MODULE PROCEDURE cmfe_FieldML_OutputAddFieldWithTypeObjVS - MODULE PROCEDURE cmfe_FieldML_OutputAddFieldWithTypeNumberVS - MODULE PROCEDURE cmfe_FieldML_OutputAddFieldNoTypeObjC - MODULE PROCEDURE cmfe_FieldML_OutputAddFieldNoTypeNumberC - MODULE PROCEDURE cmfe_FieldML_OutputAddFieldWithTypeObjC - MODULE PROCEDURE cmfe_FieldML_OutputAddFieldWithTypeNumberC - END INTERFACE cmfe_FieldML_OutputAddField - - !> Initialise a new FieldML context. - INTERFACE cmfe_FieldML_OutputCreate - MODULE PROCEDURE cmfe_FieldML_OutputCreateObjVS - MODULE PROCEDURE cmfe_FieldML_OutputCreateNumberVS - MODULE PROCEDURE cmfe_FieldML_OutputCreateObjC - MODULE PROCEDURE cmfe_FieldML_OutputCreateNumberC - END INTERFACE cmfe_FieldML_OutputCreate - - !> Add the given field to the current FieldML context, using only the given components. - INTERFACE cmfe_FieldML_OutputAddFieldComponents - MODULE PROCEDURE cmfe_FieldML_OutputAddFieldComponentsObjVS - MODULE PROCEDURE cmfe_FieldML_OutputAddFieldComponentsNumberVS - MODULE PROCEDURE cmfe_FieldML_OutputAddFieldComponentsObjC - MODULE PROCEDURE cmfe_FieldML_OutputAddFieldComponentsNumberC - END INTERFACE cmfe_FieldML_OutputAddFieldComponents - - !> Write the current FieldML document to the given file. - INTERFACE cmfe_FieldML_OutputWrite - MODULE PROCEDURE cmfe_FieldML_OutputWriteVS - MODULE PROCEDURE cmfe_FieldML_OutputWriteC - END INTERFACE cmfe_FieldML_OutputWrite - - PUBLIC :: cmfe_FieldMLIOType - - PUBLIC :: cmfe_FieldML_OutputWrite,cmfe_FieldML_OutputAddField,cmfe_FieldML_OutputCreate, & - & cmfe_FieldML_OutputAddFieldComponents, & - & cmfe_FieldML_OutputAddImport + ! + !================================================================================================================================ + ! -!!================================================================================================================================== -!! -!! GENERAL_ROUTINES -!! -!!================================================================================================================================== + !>Finalises an OpenCMISS context specified by user number. + SUBROUTINE cmfe_FinaliseNumber(contextUserNumber,err) + !DLLEXPORT(cmfe_Finalise) - !>Returns the user number of an object. - INTERFACE cmfe_UserNumberGet - MODULE PROCEDURE cmfe_Region_UserNumberGet - MODULE PROCEDURE cmfe_Mesh_UserNumberGet - MODULE PROCEDURE cmfe_Basis_UserNumberGet - END INTERFACE cmfe_UserNumberGet + !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Finalises CMISS. - SUBROUTINE cmfe_Finalise(err) - !DLLEXPORT(cmfe_Finalise) + !>Finalises an OpenCMISS context specified by an object. + SUBROUTINE cmfe_FinaliseObj(context,err) + !DLLEXPORT(cmfe_Finalise) - !Argument variables - INTEGER(INTG), INTENT(OUT) :: err !Initialises OpenCMISS context returning a user number new context. - SUBROUTINE cmfe_InitialiseNumber(newContextUserNumber,err) - !DLLEXPORT(cmfe_InitialiseNumber) + !>Initialises OpenCMISS context returning a user number new context. + SUBROUTINE cmfe_InitialiseNumber(newContextUserNumber,err) + !DLLEXPORT(cmfe_InitialiseNumber) !Argument variables INTEGER(INTG), INTENT(OUT) :: newContextUserNumber !Returns the computation environment for an OpenCMISS context given by user number. - SUBROUTINE cmfe_Context_ComputationEnvironmentGetNumber(contextUserNumber,computationEnvironment,err) - !DLLEXPORT(cmfe_Context_WorldCoordinateSystemGetNumber) - - !Argument variables - INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns a computation environment object for an OpenCMISS context object. - SUBROUTINE cmfe_Context_ComputationEnvironmentGetObj(context,computationEnvironment,err) - !DLLEXPORT(cmfe_Context_ComputationEnvironmentGetObj) - - !Argument variables - TYPE(cmfe_ContextType), INTENT(IN) :: context !Returns the world coordinate system user number for an OpenCMISS context given by user number. - SUBROUTINE cmfe_Context_WorldCoordinateSystemGetNumber(contextUserNumber,worldCoordinateSystemUserNumber,err) - !DLLEXPORT(cmfe_Context_WorldCoordinateSystemGetNumber) + !>Finalises a cmfe_ContextType object. + SUBROUTINE cmfe_Context_Finalise(cmfe_Context,err) + !DLLEXPORT(cmfe_Context_Finalise) !Argument variables - INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns a world coordinate system object for an OpenCMISS context object. - SUBROUTINE cmfe_Context_WorldCoordinateSystemGetObj(context,worldCoordinateSystem,err) - !DLLEXPORT(cmfe_Context_WorldCoordinateSystemGetObj) + IF(ASSOCIATED(cmfe_Context%context)) & + & CALL Context_Destroy(cmfe_Context%context,err,error,*999) - !Argument variables - TYPE(cmfe_ContextType), INTENT(IN) :: context !Returns the world region user number for an OpenCMISS context given by user number. - SUBROUTINE cmfe_Context_WorldRegionGetNumber(contextUserNumber,worldRegionUserNumber,err) - !DLLEXPORT(cmfe_Context_WorldRegionGetNumber) + !>Initialises a cmfe_ContextType object. + SUBROUTINE cmfe_Context_Initialise(cmfe_Context,err) + !DLLEXPORT(cmfe_Context_Initialise) !Argument variables - INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns a world region object for an OpenCMISS context object. - SUBROUTINE cmfe_Context_WorldRegionGetObj(context,worldRegion,err) - !DLLEXPORT(cmfe_Context_WorldRegionGetObj) + NULLIFY(cmfe_Context%context) - !Argument variables - TYPE(cmfe_ContextType), INTENT(IN) :: context !computationEnvironment + NULLIFY(cmfe_ComputationEnvironment%computationEnvironment) EXITS("cmfe_ComputationEnvironment_Initialise") RETURN @@ -9843,22 +9867,29 @@ END SUBROUTINE cmfe_WorkGroup_Initialise !!================================================================================================================================== !>Output the analytic error analysis for a field specified by a user number compared to the analytic values parameter set. - SUBROUTINE cmfe_AnalyticAnalysis_OutputNumber(regionUserNumber,fieldUserNumber,fileName,err) + SUBROUTINE cmfe_AnalyticAnalysis_OutputNumber(contextUserNumber,regionUserNumber,fieldUserNumber,fileName,err) !DLLEXPORT(cmfe_AnalyticAnalysis_OutputNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Get absolute error value for the node in a field specified by a user number compared to the analytic value. - SUBROUTINE cmfe_AnalyticAnalysis_AbsoluteErrorGetNodeNumber(regionUserNumber,fieldUserNumber,variableType,versionNumber, & - & derivativeNumber, nodeNumber,componentNumber,value,err) + SUBROUTINE cmfe_AnalyticAnalysis_AbsoluteErrorGetNodeNumber(contextUserNumber,regionUserNumber,fieldUserNumber,variableType, & + & versionNumber,derivativeNumber, nodeNumber,componentNumber,value,err) !DLLEXPORT(cmfe_AnalyticAnalysis_AbsoluteErrorGetNodeNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Get percentage error value for the node in a field specified by a user number compared to the analytic value. - SUBROUTINE cmfe_AnalyticAnalysis_PercentageErrorGetNodeNumber(regionUserNumber,fieldUserNumber,variableType,versionNumber, & - & derivativeNumber,nodeNumber,componentNumber,value,err) + SUBROUTINE cmfe_AnalyticAnalysis_PercentageErrorGetNodeNumber(contextUserNumber,regionUserNumber,fieldUserNumber,variableType, & + & versionNumber,derivativeNumber,nodeNumber,componentNumber,value,err) !DLLEXPORT(cmfe_AnalyticAnalysis_PercentageErrorGetNodeNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Get relative error value for the node in a field specified by a user number compared to the analytic value. - SUBROUTINE cmfe_AnalyticAnalysis_RelativeErrorGetNodeNumber(regionUserNumber,fieldUserNumber,variableType,versionNumber, & - & derivativeNumber,nodeNumber,componentNumber,value,err) + SUBROUTINE cmfe_AnalyticAnalysis_RelativeErrorGetNodeNumber(contextUserNumber,regionUserNumber,fieldUserNumber,variableType, & + & versionNumber,derivativeNumber,nodeNumber,componentNumber,value,err) !DLLEXPORT(cmfe_AnalyticAnalysis_RelativeErrorGetNodeNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Get absolute error value for the element in a field specified by a user number compared to the analytic value. - SUBROUTINE cmfe_AnalyticAnalysis_AbsoluteErrorGetElementNumber(regionUserNumber,fieldUserNumber,variableType,elementNumber, & - & componentNumber,value,err) + SUBROUTINE cmfe_AnalyticAnalysis_AbsoluteErrorGetElementNumber(contextUserNumber,regionUserNumber,fieldUserNumber,variableType, & + & elementNumber,componentNumber,value,err) !DLLEXPORT(cmfe_AnalyticAnalysis_AbsoluteErrorGetElementNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Get percentage error value for the element in a field specified by a user number compared to the analytic value. - SUBROUTINE cmfe_AnalyticAnalysis_PercentageErrorGetElementNumber(regionUserNumber,fieldUserNumber,variableType,elementNumber, & - & componentNumber,value,err) + SUBROUTINE cmfe_AnalyticAnalysis_PercentageErrorGetElementNumber(contextUserNumber,regionUserNumber,fieldUserNumber, & + & variableType,elementNumber,componentNumber,value,err) !DLLEXPORT(cmfe_AnalyticAnalysis_PercentageErrorGetElementNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Get relative error value for the element in a field specified by a user number compared to the analytic value. - SUBROUTINE cmfe_AnalyticAnalysis_RelativeErrorGetElementNumber(regionUserNumber,fieldUserNumber,variableType,elementNumber, & - & componentNumber,value,err) + SUBROUTINE cmfe_AnalyticAnalysis_RelativeErrorGetElementNumber(contextUserNumber,regionUserNumber,fieldUserNumber,variableType, & + & elementNumber,componentNumber,value,err) !DLLEXPORT(cmfe_AnalyticAnalysis_RelativeErrorGetElementNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Get absolute error value for the constant in a field specified by a user number compared to the analytic value. - SUBROUTINE cmfe_AnalyticAnalysis_AbsoluteErrorGetConstantNumber(regionUserNumber,fieldUserNumber,variableType,componentNumber, & - & value,err) + SUBROUTINE cmfe_AnalyticAnalysis_AbsoluteErrorGetConstantNumber(contextUserNumber,regionUserNumber,fieldUserNumber, & + & variableType,componentNumber,value,err) !DLLEXPORT(cmfe_AnalyticAnalysis_AbsoluteErrorGetConstantNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Get percentage error value for the constant in a field specified by a user number compared to the analytic value. - SUBROUTINE cmfe_AnalyticAnalysis_PercentageErrorGetConstantNumber(regionUserNumber,fieldUserNumber,variableType,componentNumber, & - & value,err) + SUBROUTINE cmfe_AnalyticAnalysis_PercentageErrorGetConstantNumber(contextUserNumber,regionUserNumber,fieldUserNumber, & + & variableType,componentNumber,value,err) !DLLEXPORT(cmfe_AnalyticAnalysis_PercentageErrorGetConstantNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Get relative error value for the constant in a field specified by a user number compared to the analytic value. - SUBROUTINE cmfe_AnalyticAnalysis_RelativeErrorGetConstantNumber(regionUserNumber,fieldUserNumber,variableType,componentNumber, & - & value,err) + SUBROUTINE cmfe_AnalyticAnalysis_RelativeErrorGetConstantNumber(contextUserNumber,regionUserNumber,fieldUserNumber, & + & variableType,componentNumber,value,err) !DLLEXPORT(cmfe_AnalyticAnalysis_RelativeErrorGetConstantNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Get rms error value for nodes in a field compared to the analytic value. - SUBROUTINE cmfe_AnalyticAnalysis_RMSErrorGetNodeNumber(regionUserNumber,fieldUserNumber,variableType,componentNumber,errorType, & - & localValue,localGhostValue,globalValue,err) + SUBROUTINE cmfe_AnalyticAnalysis_RMSErrorGetNodeNumber(contextUserNumber,regionUserNumber,fieldUserNumber,variableType, & + & componentNumber,errorType,localValue,localGhostValue,globalValue,err) !DLLEXPORT(cmfe_AnalyticAnalysis_RMSErrorGetNodeNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Get rms error value for elements in a field compared to the analytic value. - SUBROUTINE cmfe_AnalyticAnalysis_RMSErrorGetElementNumber(regionUserNumber,fieldUserNumber,variableType,componentNumber, & - & errorType,localValue,localGhostValue,globalValue,err) + SUBROUTINE cmfe_AnalyticAnalysis_RMSErrorGetElementNumber(contextUserNumber,regionUserNumber,fieldUserNumber,variableType, & + & componentNumber,errorType,localValue,localGhostValue,globalValue,err) !DLLEXPORT(cmfe_AnalyticAnalysis_RMSErrorGetElementNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Get integral value for the numerical values. - SUBROUTINE cmfe_AnalyticAnalysis_IntegralNumericalValueGetNumber(regionUserNumber,fieldUserNumber,variableType,componentNumber, & - & integralValue,ghostIntegralValue,err) + SUBROUTINE cmfe_AnalyticAnalysis_IntegralNumericalValueGetNumber(contextUserNumber,regionUserNumber,fieldUserNumber, & + & variableType,componentNumber,integralValue,ghostIntegralValue,err) !DLLEXPORT(cmfe_AnalyticAnalysis_IntegralNumericalValueGetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Get integral value for the analytic values. - SUBROUTINE cmfe_AnalyticAnalysis_IntegralAnalyticValueGetNumber(regionUserNumber,fieldUserNumber,variableType,componentNumber, & - & integralValue,ghostIntegralValue,err) + SUBROUTINE cmfe_AnalyticAnalysis_IntegralAnalyticValueGetNumber(contextUserNumber,regionUserNumber,fieldUserNumber,variableType, & + & componentNumber,integralValue,ghostIntegralValue,err) !DLLEXPORT(cmfe_AnalyticAnalysis_IntegralAnalyticValueGetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Get integral value for the percentage errors. - SUBROUTINE cmfe_AnalyticAnalysis_IntegralPercentageErrorGetNumber(regionUserNumber,fieldUserNumber,variableType,componentNumber, & - & integralValue,ghostIntegralValue,err) + SUBROUTINE cmfe_AnalyticAnalysis_IntegralPercentageErrorGetNumber(contextUserNumber,regionUserNumber,fieldUserNumber, & + & variableType,componentNumber,integralValue,ghostIntegralValue,err) !DLLEXPORT(cmfe_AnalyticAnalysis_IntegralPercentageErrorGetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Get integral value for the absolute errors. - SUBROUTINE cmfe_AnalyticAnalysis_IntegralAbsoluteErrorGetNumber(regionUserNumber,fieldUserNumber,variableType,componentNumber, & - & integralValue,ghostIntegralValue,err) + SUBROUTINE cmfe_AnalyticAnalysis_IntegralAbsoluteErrorGetNumber(contextUserNumber,regionUserNumber,fieldUserNumber, & + & variableType,componentNumber,integralValue,ghostIntegralValue,err) !DLLEXPORT(cmfe_AnalyticAnalysis_IntegralAbsoluteErrorGetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Get integral value for the relative error. - SUBROUTINE cmfe_AnalyticAnalysis_IntegralRelativeErrorGetNumber(regionUserNumber,fieldUserNumber,variableType,componentNumber, & - & integralValue,ghostIntegralValue,err) + SUBROUTINE cmfe_AnalyticAnalysis_IntegralRelativeErrorGetNumber(contextUserNumber,regionUserNumber,fieldUserNumber, & + & variableType,componentNumber,integralValue,ghostIntegralValue,err) !DLLEXPORT(cmfe_AnalyticAnalysis_IntegralRelativeErrorGetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Get integral value for the nid numerical. - SUBROUTINE cmfe_AnalyticAnalysis_IntegralNIDNumericalValueGetNumber(regionUserNumber,fieldUserNumber,variableType, & - & componentNumber,integralValue,ghostIntegralValue,err) + SUBROUTINE cmfe_AnalyticAnalysis_IntegralNIDNumericalValueGetNumber(contextUserNumber,regionUserNumber,fieldUserNumber, & + & variableType,componentNumber,integralValue,ghostIntegralValue,err) !DLLEXPORT(cmfe_AnalyticAnalysis_IntegralNIDNumericalValueGetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Get integral value for the nid error. - SUBROUTINE cmfe_AnalyticAnalysis_IntegralNIDErrorGetNumber(regionUserNumber,fieldUserNumber,variableType,componentNumber, & - & integralValue,ghostIntegralValue,err) + SUBROUTINE cmfe_AnalyticAnalysis_IntegralNIDErrorGetNumber(contextUserNumber,regionUserNumber,fieldUserNumber,variableType, & + & componentNumber,integralValue,ghostIntegralValue,err) !DLLEXPORT(cmfe_AnalyticAnalysis_IntegralNIDErrorGetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the collapsed Xi flags of a basis identified by a user number. - SUBROUTINE cmfe_Basis_CollapsedXiGetNumber(userNumber,collapsedXi,err) + !>Returns the collapsed Xi flags of a basis identified by user number. + SUBROUTINE cmfe_Basis_CollapsedXiGetNumber(contextUserNumber,basisUserNumber,collapsedXi,err) !DLLEXPORT(cmfe_Basis_CollapsedXiGetNumber) !Argument variables - INTEGER(INTG), INTENT(IN) :: userNumber !Sets/changes the collapsed Xi flags of a basis identified by a user number. - SUBROUTINE cmfe_Basis_CollapsedXiSetNumber(userNumber,collapsedXi,err) + SUBROUTINE cmfe_Basis_CollapsedXiSetNumber(contextUserNumber,basisUserNumber,collapsedXi,err) !DLLEXPORT(cmfe_Basis_CollapsedXiSetNumber) !Argument variables - INTEGER(INTG), INTENT(IN) :: userNumber !Finishes the creation of a new basis identified by a user number. - SUBROUTINE cmfe_Basis_CreateFinishNumber(userNumber,err) + SUBROUTINE cmfe_Basis_CreateFinishNumber(contextUserNumber,basisUserNumber,err) !DLLEXPORT(cmfe_Basis_CreateFinishNumber) !Argument variables - INTEGER(INTG), INTENT(IN) :: userNumber !Starts the creation of a new basis for a basis identified by a user number. - SUBROUTINE cmfe_Basis_CreateStartNumber(userNumber,err) + SUBROUTINE cmfe_Basis_CreateStartNumber(basisUserNumber,contextUserNumber,err) !DLLEXPORT(cmfe_Basis_CreateStartNumber) !Argument variables - INTEGER(INTG), INTENT(IN) :: userNumber !Starts the creation of a new basis for a basis identified by an object. - SUBROUTINE cmfe_Basis_CreateStartObj(userNumber,basis,err) + SUBROUTINE cmfe_Basis_CreateStartObj(userNumber,context,basis,err) !DLLEXPORT(cmfe_Basis_CreateStartObj) !Argument variables INTEGER(INTG), INTENT(IN) :: userNumber !Destroys a basis identified by its basis user number. - SUBROUTINE cmfe_Basis_DestroyNumber(userNumber,err) + SUBROUTINE cmfe_Basis_DestroyNumber(contextUserNumber,basisUserNumber,err) !DLLEXPORT(cmfe_Basis_DestroyNumber) !Argument variables - INTEGER(INTG), INTENT(IN) :: userNumber !Get the interpolation type in each xi directions for a basis identified by a user number. - SUBROUTINE cmfe_Basis_InterpolationXiGetNumber(userNumber,interpolationXi,err) + SUBROUTINE cmfe_Basis_InterpolationXiGetNumber(contextUserNumber,basisUserNumber,interpolationXi,err) !DLLEXPORT(cmfe_Basis_InterpolationXiGetNumber) !Argument variables - INTEGER(INTG), INTENT(IN) :: userNumber !Sets/changes the interpolation type in each xi directions for a basis identified by a user number. - SUBROUTINE cmfe_Basis_InterpolationXiSetNumber(userNumber,interpolationXi,err) + SUBROUTINE cmfe_Basis_InterpolationXiSetNumber(contextUserNumber,basisUserNumber,interpolationXi,err) !DLLEXPORT(cmfe_Basis_InterpolationXiSetNumber) !Argument variables - INTEGER(INTG), INTENT(IN) :: userNumber !Returns the number of local nodes in a basis identified by a user number. - SUBROUTINE cmfe_Basis_NumberOfLocalNodesGetNumber(userNumber,numberOfLocalNodes,err) + SUBROUTINE cmfe_Basis_NumberOfLocalNodesGetNumber(contextUserNumber,basisUserNumber,numberOfLocalNodes,err) !DLLEXPORT(cmfe_Basis_NumberOfLocalNodesGetNumber) !Argument variables - INTEGER(INTG), INTENT(IN) :: userNumber !Returns the number of Xi directions in a basis identified by a user number. - SUBROUTINE cmfe_Basis_NumberOfXiGetNumber(userNumber,numberOfXi,err) + SUBROUTINE cmfe_Basis_NumberOfXiGetNumber(contextUserNumber,basisUserNumber,numberOfXi,err) !DLLEXPORT(cmfe_Basis_NumberOfXiGetNumber) !Argument variables - INTEGER(INTG), INTENT(IN) :: userNumber !Sets/changes the number of Xi directions in a basis identified by a user number. - SUBROUTINE cmfe_Basis_NumberOfXiSetNumber(userNumber,numberOfXi,err) + SUBROUTINE cmfe_Basis_NumberOfXiSetNumber(contextUserNumber,basisUserNumber,numberOfXi,err) !DLLEXPORT(cmfe_Basis_NumberOfXiSetNumber) !Argument variables - INTEGER(INTG), INTENT(IN) :: userNumber !Returns the number of Gauss points in each Xi directions for a basis quadrature identified by a user number. - SUBROUTINE cmfe_Basis_QuadratureNumberOfGaussXiGetNumber(userNumber,numberOfGaussXi,err) + SUBROUTINE cmfe_Basis_QuadratureNumberOfGaussXiGetNumber(contextUserNumber,basisUserNumber,numberOfGaussXi,err) !DLLEXPORT(cmfe_Basis_QuadratureNumberOfGaussXiGetNumber) !Argument variables - INTEGER(INTG), INTENT(IN) :: userNumber !Sets/changes the number of Gauss points in each Xi directions for a basis quadrature identified by a user number. - SUBROUTINE cmfe_Basis_QuadratureNumberOfGaussXiSetNumber(userNumber,numberOfGaussXi,err) + SUBROUTINE cmfe_Basis_QuadratureNumberOfGaussXiSetNumber(contextUserNumber,basisUserNumber,numberOfGaussXi,err) !DLLEXPORT(cmfe_Basis_QuadratureNumberOfGaussXiSetNumber) !Argument variables - INTEGER(INTG), INTENT(IN) :: userNumber !Returns the xi position of a Gauss point on a basis quadrature identified by a user number. - SUBROUTINE cmfe_Basis_QuadratureSingleGaussXiGetNumber(userNumber,quadratureScheme,gaussPoint,gaussXi,err) + SUBROUTINE cmfe_Basis_QuadratureSingleGaussXiGetNumber(contextUserNumber,basisUserNumber,quadratureScheme,gaussPoint,gaussXi,err) !DLLEXPORT(cmfe_Basis_QuadratureSingleGaussXiGetNumber) !Argument variables - INTEGER(INTG), INTENT(IN) :: userNumber !Returns the xi positions of Gauss points on a basis quadrature identified by a user number. - SUBROUTINE cmfe_Basis_QuadratureMultipleGaussXiGetNumber(userNumber,quadratureScheme,gaussPoints,gaussXi,err) + SUBROUTINE cmfe_Basis_QuadratureMultipleGaussXiGetNumber(contextUserNumber,basisUserNumber,quadratureScheme,gaussPoints,gaussXi, & + & err) !DLLEXPORT(cmfe_Basis_QuadratureMultipleGaussXiGetNumber) !Argument variables - INTEGER(INTG), INTENT(IN) :: userNumber !Returns the order of quadrature a basis quadrature identified by a user number. - SUBROUTINE cmfe_Basis_QuadratureOrderGetNumber(userNumber,quadratureOrder,err) + SUBROUTINE cmfe_Basis_QuadratureOrderGetNumber(contextUserNumber,basisUserNumber,quadratureOrder,err) !DLLEXPORT(cmfe_Basis_QuadratureOrderGetNumber) !Argument variables - INTEGER(INTG), INTENT(IN) :: userNumber !Sets/changes the order of quadrature a basis quadrature identified by a user number. - SUBROUTINE cmfe_Basis_QuadratureOrderSetNumber(userNumber,quadratureOrder,err) + SUBROUTINE cmfe_Basis_QuadratureOrderSetNumber(contextUserNumber,basisUserNumber,quadratureOrder,err) !DLLEXPORT(cmfe_Basis_QuadratureOrderSetNumber) !Argument variables - INTEGER(INTG), INTENT(IN) :: userNumber !Returns the type of quadrature a basis quadrature identified by a user number. - SUBROUTINE cmfe_Basis_QuadratureTypeGetNumber(userNumber,quadratureType,err) + SUBROUTINE cmfe_Basis_QuadratureTypeGetNumber(contextUserNumber,basisUserNumber,quadratureType,err) !DLLEXPORT(cmfe_Basis_QuadratureTypeGetNumber) !Argument variables - INTEGER(INTG), INTENT(IN) :: userNumber !Sets/changes the type of quadrature a basis quadrature identified by a user number. - SUBROUTINE cmfe_Basis_QuadratureTypeSetNumber(userNumber,quadratureType,err) + SUBROUTINE cmfe_Basis_QuadratureTypeSetNumber(contextUserNumber,basisUserNumber,quadratureType,err) !DLLEXPORT(cmfe_Basis_QuadratureTypeSetNumber) !Argument variables - INTEGER(INTG), INTENT(IN) :: userNumber !Sets/changes the local face Gauss scheme calculation, on a basis identified by a user number. - SUBROUTINE cmfe_Basis_QuadratureLocalFaceGaussEvaluateSetNumber(userNumber,faceGaussEvaluate,err) + SUBROUTINE cmfe_Basis_QuadratureLocalFaceGaussEvaluateSetNumber(contextUserNumber,basisUserNumber,faceGaussEvaluate,err) !DLLEXPORT(cmfe_Basis_QuadratureLocalFaceGaussEvaluateSetNumber) !Argument variables - INTEGER(INTG), INTENT(IN) :: userNumber !Returns the type of a basis identified by a user number. - SUBROUTINE cmfe_Basis_TypeGetNumber(userNumber,basisType,err) + SUBROUTINE cmfe_Basis_TypeGetNumber(contextUserNumber,basisUserNumber,basisType,err) !DLLEXPORT(cmfe_Basis_TypeGetNumber) !Argument variables - INTEGER(INTG), INTENT(IN) :: userNumber !Sets/changes the type of a basis identified by a user number. - SUBROUTINE cmfe_Basis_TypeSetNumber(userNumber,basisType,err) + SUBROUTINE cmfe_Basis_TypeSetNumber(contextUserNumber,basisUserNumber,basisType,err) !DLLEXPORT(cmfe_Basis_TypeSetNumber) !Argument variables - INTEGER(INTG), INTENT(IN) :: userNumber !Destroys the boundary conditions for solver equations identified by a control loop identifier. - SUBROUTINE cmfe_BoundaryConditions_DestroyNumber0(problemUserNumber,controlLoopIdentifier,solverIndex,err) + SUBROUTINE cmfe_BoundaryConditions_DestroyNumber0(contextUserNumber,problemUserNumber,controlLoopIdentifier,solverIndex,err) !DLLEXPORT(cmfe_BoundaryConditions_DestroyNumber0) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Destroys the boundary conditions for solver equations identified by a control loop identifier. - SUBROUTINE cmfe_BoundaryConditions_DestroyNumber1(problemUserNumber,controlLoopIdentifiers,solverIndex,err) + SUBROUTINE cmfe_BoundaryConditions_DestroyNumber1(contextUserNumber,problemUserNumber,controlLoopIdentifiers,solverIndex,err) !DLLEXPORT(cmfe_BoundaryConditions_DestroyNumber1) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Adds to the value of the specified constant and sets this as a boundary condition on the specified constant for boundary conditions identified by a user number. - SUBROUTINE cmfe_BoundaryConditions_AddConstantNumber(regionUserNumber,problemUserNumber,controlLoopIdentifiers,solverIndex, & - & fieldUserNumber,variableType,componentNumber,condition,value,err) + SUBROUTINE cmfe_BoundaryConditions_AddConstantNumber(contextUserNumber,regionUserNumber,problemUserNumber, & + & controlLoopIdentifiers,solverIndex,fieldUserNumber,variableType,componentNumber,condition,value,err) !DLLEXPORT(cmfe_BoundaryConditions_AddConstantNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets the value of the specified constant as a boundary condition on the specified constant for boundary conditions identified by a user number. - SUBROUTINE cmfe_BoundaryConditions_SetConstantNumber(regionUserNumber,problemUserNumber,controlLoopIdentifiers,solverIndex, & - & variableType,fieldUserNumber,componentNumber,condition,value,err) + SUBROUTINE cmfe_BoundaryConditions_SetConstantNumber(contextUserNumber,regionUserNumber,problemUserNumber, & + & controlLoopIdentifiers,solverIndex,variableType,fieldUserNumber,componentNumber,condition,value,err) !DLLEXPORT(cmfe_BoundaryConditions_SetConstantNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Adds the value to the specified element and sets this as a boundary condition on the specified element for boundary conditions identified by a user number. - SUBROUTINE cmfe_BoundaryConditions_AddElementNumber(regionUserNumber,problemUserNumber,controlLoopIdentifiers,solverIndex, & - & fieldUserNumber,variableType,elementUserNumber,componentNumber,condition,value,err) + SUBROUTINE cmfe_BoundaryConditions_AddElementNumber(contextUserNumber,regionUserNumber,problemUserNumber, & + & controlLoopIdentifiers,solverIndex,fieldUserNumber,variableType,elementUserNumber,componentNumber,condition,value,err) !DLLEXPORT(cmfe_BoundaryConditions_AddElementNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets the value of the specified element as a boundary condition on the specified element for boundary conditions identified by a user number. - SUBROUTINE cmfe_BoundaryConditions_SetElementNumber(regionUserNumber,problemUserNumber,controlLoopIdentifiers,solverIndex, & - & fieldUserNumber,variableType,elementUserNumber,componentNumber,condition,value,err) + SUBROUTINE cmfe_BoundaryConditions_SetElementNumber(contextUserNumber,regionUserNumber,problemUserNumber, & + & controlLoopIdentifiers,solverIndex,fieldUserNumber,variableType,elementUserNumber,componentNumber,condition,value,err) !DLLEXPORT(cmfe_BoundaryConditions_SetElementNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Adds the value to the specified node and sets this as a boundary condition on the specified node for boundary conditions identified by a user number. - SUBROUTINE cmfe_BoundaryConditions_AddNodeNumber(regionUserNumber,problemUserNumber,controlLoopIdentifiers,solverIndex, & - & fieldUserNumber,variableType,versionNumber,derivativeNumber,nodeUserNumber,componentNumber,condition,value,err) + SUBROUTINE cmfe_BoundaryConditions_AddNodeNumber(contextUserNumber,regionUserNumber,problemUserNumber, & + & controlLoopIdentifiers,solverIndex,fieldUserNumber,variableType,versionNumber,derivativeNumber,nodeUserNumber, & + & componentNumber,condition,value,err) !DLLEXPORT(cmfe_BoundaryConditions_AddNodeNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets the value of the specified node as a boundary condition on the specified node for boundary conditions identified by a user number. - SUBROUTINE cmfe_BoundaryConditions_SetNodeNumber0(regionUserNumber,problemUserNumber,controlLoopIdentifier,solverIndex, & - & fieldUserNumber,variableType,versionNumber,derivativeNumber,nodeUserNumber,componentNumber,condition,value,err) + SUBROUTINE cmfe_BoundaryConditions_SetNodeNumber0(contextUserNumber,regionUserNumber,problemUserNumber,controlLoopIdentifier, & + & solverIndex,fieldUserNumber,variableType,versionNumber,derivativeNumber,nodeUserNumber,componentNumber,condition,value,err) !DLLEXPORT(cmfe_BoundaryConditions_SetNodeNumber0) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets the value of the specified node as a boundary condition on the specified node for boundary conditions identified by a user number. - SUBROUTINE cmfe_BoundaryConditions_SetNodeNumber1(regionUserNumber,problemUserNumber,controlLoopIdentifiers,solverIndex, & - & fieldUserNumber,variableType,versionNumber,derivativeNumber,nodeUserNumber,componentNumber,condition,value,err) + SUBROUTINE cmfe_BoundaryConditions_SetNodeNumber1(contextUserNumber,regionUserNumber,problemUserNumber, & + & controlLoopIdentifiers,solverIndex,fieldUserNumber,variableType,versionNumber,derivativeNumber,nodeUserNumber, & + & componentNumber,condition,value,err) !DLLEXPORT(cmfe_BoundaryConditions_SetNodeNumber1) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets the Neumann integration matrix sparsity for boundary conditions identified by a control loop identifier. - SUBROUTINE cmfe_BoundaryConditions_NeumannSparsityTypeSetNumber0( & - & problemUserNumber,controlLoopIdentifier,solverIndex,sparsityType,err) + SUBROUTINE cmfe_BoundaryConditions_NeumannSparsityTypeSetNumber0(contextUserNumber,problemUserNumber,controlLoopIdentifier, & + & solverIndex,sparsityType,err) !DLLEXPORT(cmfe_BoundaryConditions_NeumannSparsityTypeSetNumber0) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets the Neumann integration matrix sparsity for boundary conditions identified by a control loop identifier. - SUBROUTINE cmfe_BoundaryConditions_NeumannSparsityTypeSetNumber1( & - & problemUserNumber,controlLoopIdentifiers,solverIndex,sparsityType,err) + SUBROUTINE cmfe_BoundaryConditions_NeumannSparsityTypeSetNumber1(contextUserNumber,problemUserNumber,controlLoopIdentifiers, & + & solverIndex,sparsityType,err) !DLLEXPORT(cmfe_BoundaryConditions_NeumannSparsityTypeSetNumber1) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Constrain multiple nodal equations dependent field DOFs to be a single solver DOF in the solver equations - SUBROUTINE cmfe_BoundaryConditions_ConstrainNodeDofsEqualNumber(regionUserNumber,problemUserNumber,controlLoopIdentifier, & - & solverIndex,fieldUserNumber,fieldVariableType,versionNumber,derivativeNumber,component,nodes,coefficient,err) + SUBROUTINE cmfe_BoundaryConditions_ConstrainNodeDofsEqualNumber(contextUserNumber,regionUserNumber,problemUserNumber, & + & controlLoopIdentifier,solverIndex,fieldUserNumber,fieldVariableType,versionNumber,derivativeNumber,component,nodes, & + & coefficient,err) !DLLEXPORT(cmfe_BoundaryConditions_ConstrainNodeDofsEqualNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Constrain multiple nodal equations dependent field DOFs to be a single solver DOF in the solver equations - SUBROUTINE cmfe_BoundaryConditions_ConstrainNodeDofsEqualObj( & - & boundaryConditions,field,fieldVariableType,versionNumber,derivativeNumber,component,nodes,coefficient,err) + SUBROUTINE cmfe_BoundaryConditions_ConstrainNodeDofsEqualObj(boundaryConditions,field,fieldVariableType,versionNumber, & + & derivativeNumber,component,nodes,coefficient,err) !DLLEXPORT(cmfe_BoundaryConditions_ConstrainNodeDofsEqualObj) !Argument variables @@ -13528,132 +13948,6 @@ SUBROUTINE cmfe_ExtractErrorStackVS(errorStack,err) END SUBROUTINE cmfe_ExtractErrorStackVS - ! - !================================================================================================================================ - ! - - !>Returns the random seeds for OpenCMISS - SUBROUTINE cmfe_RandomSeedsGet0(randomSeed,err) - !DLLEXPORT(cmfe_RandomSeedsGet0) - - !Argument variables - INTEGER(INTG), INTENT(OUT) :: randomSeed !Returns the random seeds for OpenCMISS - SUBROUTINE cmfe_RandomSeedsGet1(randomSeeds,err) - !DLLEXPORT(cmfe_RandomSeedsGet1) - - !Argument variables - INTEGER(INTG), INTENT(OUT) :: randomSeeds(:) !Returns the size of the random seeds array for OpenCMISS - SUBROUTINE cmfe_RandomSeedsSizeGet(randomSeedsSize,err) - !DLLEXPORT(cmfe_RandomSeedsSizeGet) - - !Argument variables - INTEGER(INTG), INTENT(OUT) :: randomSeedsSize !Sets the random seeds for OpenCMISS - SUBROUTINE cmfe_RandomSeedsSet0(randomSeed,err) - !DLLEXPORT(cmfe_RandomSeedsSet0) - - !Argument variables - INTEGER(INTG), INTENT(IN) :: randomSeed !Sets the random seeds for OpenCMISS - SUBROUTINE cmfe_RandomSeedsSet1(randomSeeds,err) - !DLLEXPORT(cmfe_RandomSeedsSet1) - - !Argument variables - INTEGER(INTG), INTENT(IN) :: randomSeeds(:) !Sets a CellML model variable to be known by user number. - SUBROUTINE cmfe_CellML_VariableSetAsKnownNumberC(regionUserNumber,cellMLUserNumber,cellMLModelUserNumber,variableID,err) + SUBROUTINE cmfe_CellML_VariableSetAsKnownNumberC(contextUserNumber,regionUserNumber,cellMLUserNumber,cellMLModelUserNumber, & + & variableID,err) !DLLEXPORT(cmfe_CellML_VariableSetAsKnownNumberC) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets a CellML model variable to be known by user number. - SUBROUTINE cmfe_CellML_VariableSetAsKnownNumberVS(regionUserNumber,cellMLUserNumber,cellMLModelUserNumber,variableID,err) + SUBROUTINE cmfe_CellML_VariableSetAsKnownNumberVS(contextUserNumber,regionUserNumber,cellMLUserNumber,cellMLModelUserNumber, & + & variableID,err) !DLLEXPORT(cmfe_CellML_VariableSetAsKnownNumberVS) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets a CellML model variable to be wanted by user number. - SUBROUTINE cmfe_CellML_VariableSetAsWantedNumberC(regionUserNumber,cellMLUserNumber,cellMLModelUserNumber,variableID,err) + SUBROUTINE cmfe_CellML_VariableSetAsWantedNumberC(contextUserNumber,regionUserNumber,cellMLUserNumber,cellMLModelUserNumber, & + & variableID,err) !DLLEXPORT(cmfe_CellML_VariableSetAsWantedNumberC) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets a CellML model variable to be wanted by user number. - SUBROUTINE cmfe_CellML_VariableSetAsWantedNumberVS(regionUserNumber,cellMLUserNumber,cellMLModelUserNumber,variableID,err) + SUBROUTINE cmfe_CellML_VariableSetAsWantedNumberVS(contextUserNumber,regionUserNumber,cellMLUserNumber,cellMLModelUserNumber, & + & variableID,err) !DLLEXPORT(cmfe_CellML_VariableSetAsWantedNumberVS) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Defines a CellML model variable to field variable component map by user number - SUBROUTINE cmfe_CellML_CreateCellMLToFieldMapNumberC(regionUserNumber,cellMLUserNumber,cellMLModelUserNumber,variableID, & - & cellMLParameterSet,fieldUserNumber,variableType,componentNumber,fieldParameterSet,err) + SUBROUTINE cmfe_CellML_CreateCellMLToFieldMapNumberC(contextUserNumber,regionUserNumber,cellMLUserNumber,cellMLModelUserNumber, & + & variableID,cellMLParameterSet,fieldUserNumber,variableType,componentNumber,fieldParameterSet,err) !DLLEXPORT(cmfe_CellML_CreateCellMLToFieldMapNumberC) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Defines a CellML model variable to field variable component map by user number - SUBROUTINE cmfe_CellML_CreateCellMLToFieldMapNumberVS(regionUserNumber,cellMLUserNumber,cellMLModelUserNumber,variableID, & - & cellMLParameterSet,fieldUserNumber,variableType,componentNumber,fieldParameterSet,err) + SUBROUTINE cmfe_CellML_CreateCellMLToFieldMapNumberVS(contextUserNumber,regionUserNumber,cellMLUserNumber,cellMLModelUserNumber, & + & variableID,cellMLParameterSet,fieldUserNumber,variableType,componentNumber,fieldParameterSet,err) !DLLEXPORT(cmfe_CellML_CreateCellMLToFieldMapNumberVS) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Defines a field variable component to CellML model variable map by user number. - SUBROUTINE cmfe_CellML_CreateFieldToCellMLMapNumberC(regionUserNumber,cellMLUserNumber,fieldUserNumber,variableType, & - & componentNumber,fieldParameterSet,cellMLModelUserNumber,variableID,cellMLParameterSet,err) + SUBROUTINE cmfe_CellML_CreateFieldToCellMLMapNumberC(contextUserNumber,regionUserNumber,cellMLUserNumber,fieldUserNumber, & + & variableType,componentNumber,fieldParameterSet,cellMLModelUserNumber,variableID,cellMLParameterSet,err) !DLLEXPORT(cmfe_CellML_CreateFieldToCellMLMapNumberC) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Defines a field variable component to CellML model variable map by user number - SUBROUTINE cmfe_CellML_CreateFieldToCellMLMapNumberVS(regionUserNumber,cellMLUserNumber,fieldUserNumber,variableType, & - & fieldParameterSet,componentNumber,cellMLModelUserNumber,variableID,cellMLParameterSet,err) + SUBROUTINE cmfe_CellML_CreateFieldToCellMLMapNumberVS(contextUserNumber,regionUserNumber,cellMLUserNumber,fieldUserNumber, & + & variableType,fieldParameterSet,componentNumber,cellMLModelUserNumber,variableID,cellMLParameterSet,err) !DLLEXPORT(cmfe_CellML_CreateFieldToCellMLMapNumberVS) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Finishes the creation of a CellML environment identified by a user number. - SUBROUTINE cmfe_CellML_CreateFinishNumber(regionUserNumber,cellMLUserNumber,err) + SUBROUTINE cmfe_CellML_CreateFinishNumber(contextUserNumber,regionUserNumber,cellMLUserNumber,err) !DLLEXPORT(cmfe_CellML_CreateFinishNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Starts the creation of a CellML environment identified by a user number. - SUBROUTINE cmfe_CellML_CreateStartNumber(cellMLUserNumber,regionUserNumber,err) + SUBROUTINE cmfe_CellML_CreateStartNumber(cellMLUserNumber,contextUserNumber,regionUserNumber,err) !DLLEXPORT(cmfe_CellML_CreateStartNumber) !Argument variables INTEGER(INTG), INTENT(IN) :: cellMLUserNumber !Destroys a CellML environment identified by a user number. - SUBROUTINE cmfe_CellML_DestroyNumber(regionUserNumber,cellMLUserNumber,err) + SUBROUTINE cmfe_CellML_DestroyNumber(contextUserNumber,regionUserNumber,cellMLUserNumber,err) !DLLEXPORT(cmfe_CellML_DestroyNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Finishes the creation of field maps for a CellML environment identified by a user number. - SUBROUTINE cmfe_CellML_FieldMapsCreateFinishNumber(regionUserNumber,cellMLUserNumber,err) + SUBROUTINE cmfe_CellML_FieldMapsCreateFinishNumber(contextUserNumber,regionUserNumber,cellMLUserNumber,err) !DLLEXPORT(cmfe_CellML_FieldMapsCreateFinishNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Starts the creation of field maps for a CellML environment identified by a user number. - SUBROUTINE cmfe_CellML_FieldMapsCreateStartNumber(regionUserNumber,cellMLUserNumber,err) + SUBROUTINE cmfe_CellML_FieldMapsCreateStartNumber(contextUserNumber,regionUserNumber,cellMLUserNumber,err) !DLLEXPORT(cmfe_CellML_FieldMapsCreateStartNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Imports a specified CellML model as specified by a character URI into a CellML environment identified by a user number. - SUBROUTINE cmfe_CellML_ModelImportNumberC(regionUserNumber,cellMLUserNumber,URI,modelIndex,err) + SUBROUTINE cmfe_CellML_ModelImportNumberC(contextUserNumber,regionUserNumber,cellMLUserNumber,URI,modelIndex,err) !DLLEXPORT(cmfe_CellML_ModelImportNumberC) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Imports a specified CellML model as specified by a varying string URI into a CellML environment identified by a user number. - SUBROUTINE cmfe_CellML_ModelImportNumberVS(regionUserNumber,cellMLUserNumber,URI,modelIndex,err) + SUBROUTINE cmfe_CellML_ModelImportNumberVS(contextUserNumber,regionUserNumber,cellMLUserNumber,URI,modelIndex,err) !DLLEXPORT(cmfe_CellML_ModelImportNumberVS) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Finishes the creation of CellML models field for a CellML environment identified by a user number. - SUBROUTINE cmfe_CellML_ModelsFieldCreateFinishNumber(regionUserNumber,cellMLUserNumber,err) + SUBROUTINE cmfe_CellML_ModelsFieldCreateFinishNumber(contextUserNumber,regionUserNumber,cellMLUserNumber,err) !DLLEXPORT(cmfe_CellML_ModelsFieldCreateFinishNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Starts the creation of CellML models field for a CellML environment identified by a user number. - SUBROUTINE cmfe_CellML_ModelsFieldCreateStartNumber(regionUserNumber,cellMLUserNumber,cellMLModelsFieldUserNumber,err) + SUBROUTINE cmfe_CellML_ModelsFieldCreateStartNumber(contextUserNumber,regionUserNumber,cellMLUserNumber, & + & cellMLModelsFieldUserNumber,err) !DLLEXPORT(cmfe_CellML_ModelsFieldCreateStartNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the CellML models field for a CellML environment identified by a user number. - SUBROUTINE cmfe_CellML_ModelsFieldGetNumber(regionUserNumber,cellMLUserNumber,cellMLModelsFieldUserNumber,err) + SUBROUTINE cmfe_CellML_ModelsFieldGetNumber(contextUserNumber,regionUserNumber,cellMLUserNumber,cellMLModelsFieldUserNumber,err) !DLLEXPORT(cmfe_CellML_ModelsFieldGetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Finishes the creation of CellML state field for a CellML environment identified by a user number. - SUBROUTINE cmfe_CellML_StateFieldCreateFinishNumber(regionUserNumber,cellMLUserNumber,err) + SUBROUTINE cmfe_CellML_StateFieldCreateFinishNumber(contextUserNumber,regionUserNumber,cellMLUserNumber,err) !DLLEXPORT(cmfe_CellML_StateFieldCreateFinishNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Starts the creation of CellML state field for a CellML environment identified by a user number. - SUBROUTINE cmfe_CellML_StateFieldCreateStartNumber(regionUserNumber,cellMLUserNumber,cellMLStateFieldUserNumber,err) + SUBROUTINE cmfe_CellML_StateFieldCreateStartNumber(contextUserNumber,regionUserNumber,cellMLUserNumber, & + & cellMLStateFieldUserNumber,err) !DLLEXPORT(cmfe_CellML_StateFieldCreateStartNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the CellML state field for a CellML environment identified by a user number. - SUBROUTINE cmfe_CellML_StateFieldGetNumber(regionUserNumber,cellMLUserNumber,cellMLStateFieldUserNumber,err) + SUBROUTINE cmfe_CellML_StateFieldGetNumber(contextUserNumber,regionUserNumber,cellMLUserNumber,cellMLStateFieldUserNumber,err) !DLLEXPORT(cmfe_CellML_StateFieldGetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the field component number that corresponds to a character string VariableID for a CellML environment identified by a user number. - SUBROUTINE cmfe_CellML_FieldComponentGetNumberC(regionUserNumber,cellMLUserNumber,cellMLModelUserNumber,cellMLFieldType,& - & variableID,fieldComponent,err) + SUBROUTINE cmfe_CellML_FieldComponentGetNumberC(contextUserNumber,regionUserNumber,cellMLUserNumber,cellMLModelUserNumber, & + & cellMLFieldType,variableID,fieldComponent,err) !DLLEXPORT(cmfe_CellML_FieldComponentGetNumberC) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the field component number that corresponds to a varying string variable ID for a CellML environment identified by a user number. - SUBROUTINE cmfe_CellML_FieldComponentGetNumberVS(regionUserNumber,cellMLUserNumber,cellMLModelUserNumber,cellMLFieldType,& - & variableID,fieldComponent,err) + SUBROUTINE cmfe_CellML_FieldComponentGetNumberVS(contextUserNumber,regionUserNumber,cellMLUserNumber,cellMLModelUserNumber, & + & cellMLFieldType,variableID,fieldComponent,err) !DLLEXPORT(cmfe_CellML_FieldComponentGetNumberVS) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Finishes the creation of CellML intermediate field for a CellML environment identified by a user number. - SUBROUTINE cmfe_CellML_IntermediateFieldCreateFinishNumber(regionUserNumber,cellMLUserNumber,err) + SUBROUTINE cmfe_CellML_IntermediateFieldCreateFinishNumber(contextUserNumber,regionUserNumber,cellMLUserNumber,err) !DLLEXPORT(cmfe_CellML_IntermediateFieldCreateFinishNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Starts the creation of CellML intermediate field for a CellML environment identified by a user number. - SUBROUTINE cmfe_CellML_IntermediateFieldCreateStartNumber(regionUserNumber,cellMLUserNumber,cellMLIntermediateFieldUserNumber,err) + SUBROUTINE cmfe_CellML_IntermediateFieldCreateStartNumber(contextUserNumber,regionUserNumber,cellMLUserNumber, & + & cellMLIntermediateFieldUserNumber,err) !DLLEXPORT(cmfe_CellML_IntermediateFieldCreateStartNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the CellML intermediate field for a CellML environment identified by a user number. - SUBROUTINE cmfe_CellML_IntermediateFieldGetNumber(regionUserNumber,cellMLUserNumber,cellMLIntermediateFieldUserNumber,err) + SUBROUTINE cmfe_CellML_IntermediateFieldGetNumber(contextUserNumber,regionUserNumber,cellMLUserNumber, & + & cellMLIntermediateFieldUserNumber,err) !DLLEXPORT(cmfe_CellML_IntermediateFieldGetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Finishes the creation of CellML parameters field for a CellML environment identified by a user number. - SUBROUTINE cmfe_CellML_ParametersFieldCreateFinishNumber(regionUserNumber,cellMLUserNumber,err) + SUBROUTINE cmfe_CellML_ParametersFieldCreateFinishNumber(contextUserNumber,regionUserNumber,cellMLUserNumber,err) !DLLEXPORT(cmfe_CellML_ParametersFieldCreateFinishNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Starts the creation of CellML parameters field for a CellML environment identified by a user number. - SUBROUTINE cmfe_CellML_ParametersFieldCreateStartNumber(regionUserNumber,cellMLUserNumber,cellMLParametersFieldUserNumber,err) + SUBROUTINE cmfe_CellML_ParametersFieldCreateStartNumber(contextUserNumber,regionUserNumber,cellMLUserNumber, & + & cellMLParametersFieldUserNumber,err) !DLLEXPORT(cmfe_CellML_ParametersFieldCreateStartNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the CellML parameters field for a CellML environment identified by a user number. - SUBROUTINE cmfe_CellML_ParametersFieldGetNumber(regionUserNumber,cellMLUserNumber,cellMLParametersFieldUserNumber,err) + SUBROUTINE cmfe_CellML_ParametersFieldGetNumber(contextUserNumber,regionUserNumber,cellMLUserNumber, & + & cellMLParametersFieldUserNumber,err) !DLLEXPORT(cmfe_CellML_ParametersFieldGetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Validiate and instantiate a CellML environment identified by a user number. - SUBROUTINE cmfe_CellML_GenerateNumber(regionUserNumber,cellMLUserNumber,err) + SUBROUTINE cmfe_CellML_GenerateNumber(contextUserNumber,regionUserNumber,cellMLUserNumber,err) !DLLEXPORT(cmfe_CellML_GenerateNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the number of computation nodes in the world communicator. - SUBROUTINE cmfe_ComputationEnvironment_NumberOfWorldNodesGet(computationEnvironment,numberOfWorldNodes,err) - !DLLEXPORT(cmfe_ComputationEnvironment_NumberOfWorldNodesGet) + !>Returns the number of computation nodes in the world communicator identified by user number. + SUBROUTINE cmfe_ComputationEnvironment_NumberOfWorldNodesGetNumber(contextUserNumber,numberOfWorldNodes,err) + !DLLEXPORT(cmfe_ComputationEnvironment_NumberOfWorldNodesGetNumber) + + !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the number of computation nodes in the world communicator identified by object. + SUBROUTINE cmfe_ComputationEnvironment_NumberOfWorldNodesGetObj(computationEnvironment,numberOfWorldNodes,err) + !DLLEXPORT(cmfe_ComputationEnvironment_NumberOfWorldNodesGetObj) !Argument variables TYPE(cmfe_ComputationEnvironmentType), INTENT(IN) :: computationEnvironment !Returns the current world communicator for the computation environment. - SUBROUTINE cmfe_ComputationEnvironment_WorldCommunicatorGet(computationEnvironment,worldCommunicator,err) - !DLLEXPORT(cmfe_ComputationEnvironment_WorldCommunicatorGet) + !>Returns the current world communicator for the computation environment identified by user number. + SUBROUTINE cmfe_ComputationEnvironment_WorldCommunicatorGetNumber(contextUserNumber,worldCommunicator,err) + !DLLEXPORT(cmfe_ComputationEnvironment_WorldCommunicatorGetNumber) + + !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the current world communicator for the computation environment indentified by object. + SUBROUTINE cmfe_ComputationEnvironment_WorldCommunicatorGetObj(computationEnvironment,worldCommunicator,err) + !DLLEXPORT(cmfe_ComputationEnvironment_WorldCommunicatorGetObj) !Argument variables TYPE(cmfe_ComputationEnvironmentType), INTENT(IN) :: computationEnvironment !Returns the computation node number in the world communicator identified by user number. + SUBROUTINE cmfe_ComputationEnvironment_WorldNodeNumberGetNumber(contextUserNumber,worldNodeNumber,err) + !DLLEXPORT(cmfe_ComputationEnvironment_WorldNodeNumberGetNumber) + + !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the computation node number in the world communicator. - SUBROUTINE cmfe_ComputationEnvironment_WorldNodeNumberGet(computationEnvironment,worldNodeNumber,err) - !DLLEXPORT(cmfe_ComputationEnvironment_WorldNodeNumberGet) + SUBROUTINE cmfe_ComputationEnvironment_WorldNodeNumberGetObj(computationEnvironment,worldNodeNumber,err) + !DLLEXPORT(cmfe_ComputationEnvironment_WorldNodeNumberGetObj) !Argument variables TYPE(cmfe_ComputationEnvironmentType), INTENT(IN) :: computationEnvironment !Returns the world work group for the computation environment indentified by user number. + SUBROUTINE cmfe_ComputationEnvironment_WorldWorkGroupGetNumber(contextUserNumber,worldWorkGroupUserNumber,err) + !DLLEXPORT(cmfe_ComputationEnvironment_WorldWorkGroupGetNumber) + + !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the world work group for the computation environment. - SUBROUTINE cmfe_ComputationEnvironment_WorldWorkGroupGet(computationEnvironment,worldWorkGroup,err) - !DLLEXPORT(cmfe_ComputationEnvironment_WorldWorkGroupGet) + SUBROUTINE cmfe_ComputationEnvironment_WorldWorkGroupGetObj(computationEnvironment,worldWorkGroup,err) + !DLLEXPORT(cmfe_ComputationEnvironment_WorldWorkGroupGetObj) !Argument variables TYPE(cmfe_ComputationEnvironmentType), INTENT(IN) :: computationEnvironment !Start the creation of a computation work group specified by number. - SUBROUTINE cmfe_WorkGroup_CreateStartNumber(workGroupUserNumber,parentWorkGroupUserNumber,err) + SUBROUTINE cmfe_WorkGroup_CreateStartNumber(workGroupUserNumber,contextUserNumber,parentWorkGroupUserNumber,err) !DLLEXPORT(cmfe_WorkGroup_CreateStartNumber) + !Argument Variables INTEGER(INTG), INTENT(IN) :: workGroupUserNumber !Start the creation of a computation work group specified by object under a parent work group SUBROUTINE cmfe_WorkGroup_CreateStartObj(userNumber,parentWorkGroup,workGroup,err) !DLLEXPORT(cmfe_WorkGroup_CreateStartObj) + !Argument Variables INTEGER(INTG), INTENT(IN) :: userNumber !Finish the creation of a computation work group specified by number. - SUBROUTINE cmfe_WorkGroup_CreateFinishNumber(workGroupUserNumber,err) + SUBROUTINE cmfe_WorkGroup_CreateFinishNumber(contextUserNumber,workGroupUserNumber,err) !DLLEXPORT(cmfe_WorkGroup_CreateFinishNumber) + !Argument Variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Finish the creation of a computation work group specified by object. SUBROUTINE cmfe_WorkGroup_CreateFinishObj(workGroup,err) !DLLEXPORT(cmfe_WorkGroup_CreateFinishObj) + !Argument Variables TYPE(cmfe_WorkGroupType), INTENT(INOUT) :: workGroup !Destroy a work group specified by number. - SUBROUTINE cmfe_WorkGroup_DestroyNumber(workGroupUserNumber,err) + SUBROUTINE cmfe_WorkGroup_DestroyNumber(contextUserNumber,workGroupUserNumber,err) !DLLEXPORT(cmfe_WorkGroup_DestroyNumber) + !Argument Variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Destroy a work group specified by object. SUBROUTINE cmfe_WorkGroup_DestroyObj(workGroup,err) !DLLEXPORT(cmfe_WorkGroup_DestroyObj) + !Argument Variables TYPE(cmfe_WorkGroupType), INTENT(INOUT) :: workGroup !Returns the group communicator for a work group specified by a user number. - SUBROUTINE cmfe_WorkGroup_GroupCommunicatorGetNumber(workGroupUserNumber,groupCommunicator,err) + SUBROUTINE cmfe_WorkGroup_GroupCommunicatorGetNumber(contextUserNumber,workGroupUserNumber,groupCommunicator,err) !DLLEXPORT(cmfe_WorkGroup_GroupCommunicatorNumber) + !Argument Variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the group communicator for a work group specified by an object. SUBROUTINE cmfe_WorkGroup_GroupCommunicatorGetObj(workGroup,groupCommunicator,err) !DLLEXPORT(cmfe_WorkGroup_GroupCommunicatorGetObj) + !Argument Variables TYPE(cmfe_WorkGroupType), INTENT(INOUT) :: workGroup !Returns the group node number a work group specified by a user number. - SUBROUTINE cmfe_WorkGroup_GroupNodeNumberGetNumber(workGroupUserNumber,groupNodeNumber,err) + SUBROUTINE cmfe_WorkGroup_GroupNodeNumberGetNumber(contextUserNumber,workGroupUserNumber,groupNodeNumber,err) !DLLEXPORT(cmfe_WorkGroup_GroupNodeNumberGetNumber) + !Argument Variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the group node number for a work group specified by an object. SUBROUTINE cmfe_WorkGroup_GroupNodeNumberGetObj(workGroup,groupNodeNumber,err) !DLLEXPORT(cmfe_WorkGroup_GroupNodeNumberGetObj) + !Argument Variables TYPE(cmfe_WorkGroupType), INTENT(INOUT) :: workGroup !Returns the character label a work group specified by a user number. - SUBROUTINE cmfe_WorkGroup_LabelGetCNumber(workGroupUserNumber,label,err) + SUBROUTINE cmfe_WorkGroup_LabelGetCNumber(contextUserNumber,workGroupUserNumber,label,err) !DLLEXPORT(cmfe_WorkGroup_LabelGetCNumber) + !Argument Variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the character label for a work group specified by an object. SUBROUTINE cmfe_WorkGroup_LabelGetCObj(workGroup,label,err) !DLLEXPORT(cmfe_WorkGroup_LabelGetCObj) + !Argument Variables TYPE(cmfe_WorkGroupType), INTENT(INOUT) :: workGroup !Returns the varying string label a work group specified by a user number. - SUBROUTINE cmfe_WorkGroup_LabelGetVSNumber(workGroupUserNumber,label,err) + SUBROUTINE cmfe_WorkGroup_LabelGetVSNumber(contextUserNumber,workGroupUserNumber,label,err) !DLLEXPORT(cmfe_WorkGroup_LabelGetVSNumber) + !Argument Variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the varying string label for a work group specified by an object. SUBROUTINE cmfe_WorkGroup_LabelGetVSObj(workGroup,label,err) !DLLEXPORT(cmfe_WorkGroup_LabelGetVSObj) + !Argument Variables TYPE(cmfe_WorkGroupType), INTENT(INOUT) :: workGroup !Sets/changes the character label a work group specified by a user number. - SUBROUTINE cmfe_WorkGroup_LabelSetCNumber(workGroupUserNumber,label,err) + SUBROUTINE cmfe_WorkGroup_LabelSetCNumber(contextUserNumber,workGroupUserNumber,label,err) !DLLEXPORT(cmfe_WorkGroup_LabelSetCNumber) + !Argument Variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the character label for a work group specified by an object. SUBROUTINE cmfe_WorkGroup_LabelSetCObj(workGroup,label,err) !DLLEXPORT(cmfe_WorkGroup_LabelSetCObj) + !Argument Variables TYPE(cmfe_WorkGroupType), INTENT(INOUT) :: workGroup !Sets/changes the varying string label a work group specified by a user number. - SUBROUTINE cmfe_WorkGroup_LabelSetVSNumber(workGroupUserNumber,label,err) + SUBROUTINE cmfe_WorkGroup_LabelSetVSNumber(contextUserNumber,workGroupUserNumber,label,err) !DLLEXPORT(cmfe_WorkGroup_LabelSetVSNumber) + !Argument Variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the varying string label for a work group specified by an object. SUBROUTINE cmfe_WorkGroup_LabelSetVSObj(workGroup,label,err) !DLLEXPORT(cmfe_WorkGroup_LabelSetVSObj) + !Argument Variables TYPE(cmfe_WorkGroupType), INTENT(INOUT) :: workGroup !Returns the group number of nodes in a work group specified by a user number. - SUBROUTINE cmfe_WorkGroup_NumberOfGroupNodesGetNumber(workGroupUserNumber,numberOfGroupNodes,err) + SUBROUTINE cmfe_WorkGroup_NumberOfGroupNodesGetNumber(contextUserNumber,workGroupUserNumber,numberOfGroupNodes,err) !DLLEXPORT(cmfe_WorkGroup_NumberOfGroupNodesGetNumber) + !Argument Variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the group number of nodes for a work group specified by an object. SUBROUTINE cmfe_WorkGroup_NumberOfGroupNodesGetObj(workGroup,numberOfGroupNodes,err) !DLLEXPORT(cmfe_WorkGroup_NumberOfGroupNodesGetObj) + !Argument Variables TYPE(cmfe_WorkGroupType), INTENT(INOUT) :: workGroup !Sets/Changes the group number of nodes for a work group specified by a user number. - SUBROUTINE cmfe_WorkGroup_NumberOfGroupNodesSetNumber(workGroupUserNumber,numberOfGroupNodes,err) + SUBROUTINE cmfe_WorkGroup_NumberOfGroupNodesSetNumber(contextUserNumber,workGroupUserNumber,numberOfGroupNodes,err) !DLLEXPORT(cmfe_WorkGroup_NumberOfGroupNodesSetNumber) + !Argument Variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/Changes the group number of nodes for a work group specified by an object. SUBROUTINE cmfe_WorkGroup_NumberOfGroupNodesSetObj(workGroup,numberOfGroupNodes,err) !DLLEXPORT(cmfe_WorkGroup_NumberOfGroupNodesSetObj) + !Argument Variables TYPE(cmfe_WorkGroupType), INTENT(INOUT) :: workGroup !Returns the computation environment for an OpenCMISS context given by user number. + SUBROUTINE cmfe_Context_ComputationEnvironmentGetNumber(contextUserNumber,computationEnvironment,err) + !DLLEXPORT(cmfe_Context_ComputationEnvironmentGetNumber) + + !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns a computation environment object for an OpenCMISS context object. + SUBROUTINE cmfe_Context_ComputationEnvironmentGetObj(context,computationEnvironment,err) + !DLLEXPORT(cmfe_Context_ComputationEnvironmentGetObj) + + !Argument variables + TYPE(cmfe_ContextType), INTENT(IN) :: context !Returns the random seeds for an OpenCMISS context specified by user number. + SUBROUTINE cmfe_Context_RandomSeedsGetNumber0(contextUserNumber,randomSeed,err) + !DLLEXPORT(cmfe_Context_RandomSeedsGetNumber0) + + !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the random seeds for an OpenCMISS context specified by user number. + SUBROUTINE cmfe_Context_RandomSeedsGetNumber1(contextUserNumber,randomSeeds,err) + !DLLEXPORT(cmfe_RandomSeedsGetNumber1) + + !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the random seeds for an OpenCMISS context specified by object. + SUBROUTINE cmfe_Context_RandomSeedsGetObj0(context,randomSeed,err) + !DLLEXPORT(cmfe_Context_RandomSeedsGetObj0) + + !Argument variables + TYPE(cmfe_ContextType), INTENT(IN) :: context !Returns the random seeds for an OpenCMISS context specified by object. + SUBROUTINE cmfe_Context_RandomSeedsGetObj1(context,randomSeeds,err) + !DLLEXPORT(cmfe_RandomSeedsGetObj1) + + !Argument variables + TYPE(cmfe_ContextType), INTENT(IN) :: context !Returns the size of the random seeds array for an OpenCMISS context specified by user number + SUBROUTINE cmfe_Context_RandomSeedsSizeGetNumber(contextUserNumber,randomSeedsSize,err) + !DLLEXPORT(cmfe_Context_RandomSeedsSizeGetNumber) + + !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the size of the random seeds array for an OpenCMISS context specified by object + SUBROUTINE cmfe_Context_RandomSeedsSizeGetObj(context,randomSeedsSize,err) + !DLLEXPORT(cmfe_Context_RandomSeedsSizeGetObj) + + !Argument variables + TYPE(cmfe_ContextType), INTENT(IN) :: context !Sets the random seeds for an OpenCMISS context specified by user number. + SUBROUTINE cmfe_Context_RandomSeedsSetNumber0(contextUserNumber,randomSeed,err) + !DLLEXPORT(cmfe_Context_RandomSeedsSetNumber0) + + !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets the random seeds for an OpenCMISS context specified by user number + SUBROUTINE cmfe_Context_RandomSeedsSetNumber1(contextUserNumber,randomSeeds,err) + !DLLEXPORT(cmfe_Context_RandomSeedsSetNumber1) + + !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets the random seeds for an OpenCMISS context specified by object. + SUBROUTINE cmfe_Context_RandomSeedsSetObj0(context,randomSeed,err) + !DLLEXPORT(cmfe_Context_RandomSeedsSetObj0) + + !Argument variables + TYPE(cmfe_ContextType), INTENT(IN) :: context !Sets the random seeds for an OpenCMISS context specified by object. + SUBROUTINE cmfe_Context_RandomSeedsSetObj1(context,randomSeeds,err) + !DLLEXPORT(cmfe_Context_RandomSeedsSetObj1) + + !Argument variables + TYPE(cmfe_ContextType), INTENT(IN) :: context !Returns the world region user number for an OpenCMISS context given by user number. + SUBROUTINE cmfe_Context_WorldRegionGetNumber(contextUserNumber,worldRegionUserNumber,err) + !DLLEXPORT(cmfe_Context_WorldRegionGetNumber) + + !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns a world region object for an OpenCMISS context object. + SUBROUTINE cmfe_Context_WorldRegionGetObj(context,worldRegion,err) + !DLLEXPORT(cmfe_Context_WorldRegionGetObj) + + !Argument variables + TYPE(cmfe_ContextType), INTENT(IN) :: context !Returns the user number for an OpenCMISS context object. + SUBROUTINE cmfe_Context_UserNumberGet(context,contextUserNumber,err) + !DLLEXPORT(cmfe_Context_UserNumberGet) + + !Argument variables + TYPE(cmfe_ContextType), INTENT(IN) :: context !Gets the current time parameters for a time control loop identified by user numbers. - SUBROUTINE cmfe_ControlLoop_CurrentTimesGetNumber0(problemUserNumber,controlLoopIdentifier,currentTime,timeIncrement,err) + SUBROUTINE cmfe_ControlLoop_CurrentTimesGetNumber0(contextUserNumber,problemUserNumber,controlLoopIdentifier,currentTime, & + & timeIncrement,err) !DLLEXPORT(cmfe_ControlLoop_CurrentTimesGetNumber0) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Gets the current time parameters for a time control loop identified by user numbers. - SUBROUTINE cmfe_ControlLoop_CurrentTimesGetNumber1(problemUserNumber,controlLoopIdentifiers,currentTime,timeIncrement,err) + SUBROUTINE cmfe_ControlLoop_CurrentTimesGetNumber1(contextUserNumber,problemUserNumber,controlLoopIdentifiers,currentTime, & + & timeIncrement,err) !DLLEXPORT(cmfe_ControlLoop_CurrentTimesGetNumber1) !Argument variables - INTEGER(INTG), INTENT(IN) :: problemUserNumber !Destroys a control loop identified by user numbers. - SUBROUTINE cmfe_ControlLoop_DestroyNumber0(problemUserNumber,controlLoopIdentifier,err) + SUBROUTINE cmfe_ControlLoop_DestroyNumber0(contextUserNumber,problemUserNumber,controlLoopIdentifier,err) !DLLEXPORT(cmfe_ControlLoop_DestroyNumber0) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Destroys a control loop identified by user numbers. - SUBROUTINE cmfe_ControlLoop_DestroyNumber1(problemUserNumber,controlLoopIdentifiers,err) + SUBROUTINE cmfe_ControlLoop_DestroyNumber1(contextUserNumber,problemUserNumber,controlLoopIdentifiers,err) !DLLEXPORT(cmfe_ControlLoop_DestroyNumber1) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the specified control loop as indexed by the control loop identifier from the control loop root identified by user numbers. - SUBROUTINE cmfe_ControlLoop_ControlLoopGetNumber00(problemUserNumber,controlLoopRootIdentifier,controlLoopIdentifier, & - & controlLoop,err) + SUBROUTINE cmfe_ControlLoop_ControlLoopGetNumber00(contextUserNumber,problemUserNumber,controlLoopRootIdentifier, & + & controlLoopIdentifier,controlLoop,err) !DLLEXPORT(cmfe_ControlLoop_ControlLoopGetNumber00) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the specified control loop as indexed by the control loop identifier from the control loop root identified by user numbers. - SUBROUTINE cmfe_ControlLoop_ControlLoopGetNumber10(problemUserNumber,controlLoopRootIdentifiers,controlLoopIdentifier, & - & controlLoop,err) + SUBROUTINE cmfe_ControlLoop_ControlLoopGetNumber10(contextUserNumber,problemUserNumber,controlLoopRootIdentifiers, & + & controlLoopIdentifier,controlLoop,err) !DLLEXPORT(cmfe_ControlLoop_ControlLoopGetNumber10) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the specified control loop as indexed by the control loop identifier from the control loop root identified by user numbers. - SUBROUTINE cmfe_ControlLoop_ControlLoopGetNumber01(problemUserNumber,controlLoopRootIdentifier,controlLoopIdentifiers, & - & controlLoop,err) + SUBROUTINE cmfe_ControlLoop_ControlLoopGetNumber01(contextUserNumber,problemUserNumber,controlLoopRootIdentifier, & + & controlLoopIdentifiers,controlLoop,err) !DLLEXPORT(cmfe_ControlLoop_ControlLoopGetNumber01) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the specified control loop as indexed by the control loop identifier from the control loop root identified by user numbers. - SUBROUTINE cmfe_ControlLoop_ControlLoopGetNumber11(problemUserNumber,controlLoopRootIdentifiers,controlLoopIdentifiers, & - & controlLoop,err) + SUBROUTINE cmfe_ControlLoop_ControlLoopGetNumber11(contextUserNumber,problemUserNumber,controlLoopRootIdentifiers, & + & controlLoopIdentifiers,controlLoop,err) !DLLEXPORT(cmfe_ControlLoop_ControlLoopGetNumber11) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the iteration parameters for a fixed control loop identified by user numbers. - SUBROUTINE cmfe_ControlLoop_IterationsSetNumber0(problemUserNumber,controlLoopIdentifier,startIteration,stopIteration, & - & iterationIncrement,err) + SUBROUTINE cmfe_ControlLoop_IterationsSetNumber0(contextUserNumber,problemUserNumber,controlLoopIdentifier,startIteration, & + & stopIteration,iterationIncrement,err) !DLLEXPORT(cmfe_ControlLoop_IterationsSetNumber0) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the iteration parameters for a fixed control loop identified by user numbers. - SUBROUTINE cmfe_ControlLoop_IterationsSetNumber1(problemUserNumber,controlLoopIdentifiers,startIteration,stopIteration, & - & iterationIncrement,err) + SUBROUTINE cmfe_ControlLoop_IterationsSetNumber1(contextUserNumber,problemUserNumber,controlLoopIdentifiers,startIteration, & + & stopIteration,iterationIncrement,err) !DLLEXPORT(cmfe_ControlLoop_IterationsSetNumber1) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the character string label for a control loop identified by an user number. - SUBROUTINE cmfe_ControlLoop_LabelGetCNumber0(problemUserNumber,controlLoopIdentifier,label,err) + SUBROUTINE cmfe_ControlLoop_LabelGetCNumber0(contextUserNumber,problemUserNumber,controlLoopIdentifier,label,err) !DLLEXPORT(cmfe_ControlLoop_LabelGetCNumber0) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the character string label for a control loop identified by an user number. - SUBROUTINE cmfe_ControlLoop_LabelGetCNumber1(problemUserNumber,controlLoopIdentifiers,label,err) + SUBROUTINE cmfe_ControlLoop_LabelGetCNumber1(contextUserNumber,problemUserNumber,controlLoopIdentifiers,label,err) !DLLEXPORT(cmfe_ControlLoop_LabelGetCNumber1) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the varying string label for a control loop identified by an user number. - SUBROUTINE cmfe_ControlLoop_LabelGetVSNumber0(problemUserNumber,controlLoopIdentifier,label,err) + SUBROUTINE cmfe_ControlLoop_LabelGetVSNumber0(contextUserNumber,problemUserNumber,controlLoopIdentifier,label,err) !DLLEXPORT(cmfe_ControlLoop_LabelGetVSNumber0) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the varying string label for a control loop identified by an user number. - SUBROUTINE cmfe_ControlLoop_LabelGetVSNumber1(problemUserNumber,controlLoopIdentifiers,label,err) + SUBROUTINE cmfe_ControlLoop_LabelGetVSNumber1(contextUserNumber,problemUserNumber,controlLoopIdentifiers,label,err) !DLLEXPORT(cmfe_ControlLoop_LabelGetVSNumber1) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the character string label for a control loop identified by an user number. - SUBROUTINE cmfe_ControlLoop_LabelSetCNumber0(problemUserNumber,controlLoopIdentifier,label,err) + SUBROUTINE cmfe_ControlLoop_LabelSetCNumber0(contextUserNumber,problemUserNumber,controlLoopIdentifier,label,err) !DLLEXPORT(cmfe_ControlLoop_LabelSetCNumber0) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the character string label for a control loop identified by an user number. - SUBROUTINE cmfe_ControlLoop_LabelSetCNumber1(problemUserNumber,controlLoopIdentifiers,label,err) + SUBROUTINE cmfe_ControlLoop_LabelSetCNumber1(contextUserNumber,problemUserNumber,controlLoopIdentifiers,label,err) !DLLEXPORT(cmfe_ControlLoop_LabelSetCNumber1) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the varying string label for a control loop identified by an user number. - SUBROUTINE cmfe_ControlLoop_LabelSetVSNumber0(problemUserNumber,controlLoopIdentifier,label,err) + SUBROUTINE cmfe_ControlLoop_LabelSetVSNumber0(contextUserNumber,problemUserNumber,controlLoopIdentifier,label,err) !DLLEXPORT(cmfe_ControlLoop_LabelSetVSNumber0) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the varying string label for a control loop identified by an user number. - SUBROUTINE cmfe_ControlLoop_LabelSetVSNumber1(problemUserNumber,controlLoopIdentifiers,label,err) + SUBROUTINE cmfe_ControlLoop_LabelSetVSNumber1(contextUserNumber,problemUserNumber,controlLoopIdentifiers,label,err) !DLLEXPORT(cmfe_ControlLoop_LabelSetVSNumber1) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the maximum iterations for a while control loop identified by user numbers. - SUBROUTINE cmfe_ControlLoop_MaximumIterationsSetNumber0(problemUserNumber,controlLoopIdentifier,maximumIterations,err) + SUBROUTINE cmfe_ControlLoop_MaximumIterationsSetNumber0(contextUserNumber,problemUserNumber,controlLoopIdentifier, & + & maximumIterations,err) !DLLEXPORT(cmfe_ControlLoop_MaximumIterationsSetNumber0) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the maximum iterations for a while control loop identified by user numbers. - SUBROUTINE cmfe_ControlLoop_MaximumIterationsSetNumber1(problemUserNumber,controlLoopIdentifiers,maximumIterations,err) + SUBROUTINE cmfe_ControlLoop_MaximumIterationsSetNumber1(contextUserNumber,problemUserNumber,controlLoopIdentifiers, & + & maximumIterations,err) !DLLEXPORT(cmfe_ControlLoop_MaximumIterationsSetNumber1) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the maximum iterations for a while control loop identified by user numbers. - SUBROUTINE cmfe_ControlLoop_AbsoluteToleranceSetNumber0(problemUserNumber,controlLoopIdentifier,absoluteTolerance,err) + !>Sets/changes the absolute tolerance for a control loop identified by user numbers. + SUBROUTINE cmfe_ControlLoop_AbsoluteToleranceSetNumber0(contextUserNumber,problemUserNumber,controlLoopIdentifier, & + & absoluteTolerance,err) !DLLEXPORT(cmfe_ControlLoop_AbsoluteToleranceSetNumber0) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the maximum iterations for a while control loop identified by user numbers. - SUBROUTINE cmfe_ControlLoop_AbsoluteToleranceSetNumber1(problemUserNumber,controlLoopIdentifiers,absoluteTolerance,err) + !>Sets/changes the absolute tolerance for a control loop identified by user numbers. + SUBROUTINE cmfe_ControlLoop_AbsoluteToleranceSetNumber1(contextUserNumber,problemUserNumber,controlLoopIdentifiers, & + & absoluteTolerance,err) !DLLEXPORT(cmfe_ControlLoop_AbsoluteToleranceSetNumber1) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the maximum iterations for a while control loop identified by an object. + !>Sets/changes the absolute tolerance for a control loop identified by an object. SUBROUTINE cmfe_ControlLoop_AbsoluteToleranceSetObj(controlLoop,absoluteTolerance,err) !DLLEXPORT(cmfe_ControlLoop_AbsoluteToleranceSetObj) @@ -17800,35 +19041,38 @@ END SUBROUTINE cmfe_ControlLoop_AbsoluteToleranceSetObj ! !>Gets the number of iterations for a time control loop identified by user number. - SUBROUTINE cmfe_ControlLoop_NumberOfIterationsGetNumber0(problemUserNumber,controlLoopIdentifier,numberOfIterations,err) + SUBROUTINE cmfe_ControlLoop_NumberOfIterationsGetNumber0(contextUserNumber,problemUserNumber,controlLoopIdentifier, & + & numberOfIterations,err) !DLLEXPORT(cmfe_ControlLoop_NumberOfIterationsGetNumber0) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Gets the number of iterations for a time control loop identified by user numbers. - SUBROUTINE cmfe_ControlLoop_NumberOfIterationsGetNumber1(problemUserNumber,controlLoopIdentifiers,numberOfIterations,err) + SUBROUTINE cmfe_ControlLoop_NumberOfIterationsGetNumber1(contextUserNumber,problemUserNumber,controlLoopIdentifiers, & + & numberOfIterations,err) !DLLEXPORT(cmfe_ControlLoop_NumberOfIterationsGetNumber1) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets the number of iterations for a time control loop identified by user number. - SUBROUTINE cmfe_ControlLoop_NumberOfIterationsSetNumber0(problemUserNumber,controlLoopIdentifier,numberOfIterations,err) + SUBROUTINE cmfe_ControlLoop_NumberOfIterationsSetNumber0(contextUserNumber,problemUserNumber,controlLoopIdentifier, & + & numberOfIterations,err) !DLLEXPORT(cmfe_ControlLoop_NumberOfIterationsSetNumber0) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets the number of iterations for a time control loop identified by user numbers. - SUBROUTINE cmfe_ControlLoop_NumberOfIterationsSetNumber1(problemUserNumber,controlLoopIdentifiers,numberOfIterations,err) + SUBROUTINE cmfe_ControlLoop_NumberOfIterationsSetNumber1(contextUserNumber,problemUserNumber,controlLoopIdentifiers, & + & numberOfIterations,err) !DLLEXPORT(cmfe_ControlLoop_NumberOfIterationsSetNumber1) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the number of sub-control loops for a control loop identified by user numbers. - SUBROUTINE cmfe_ControlLoop_NumberOfSubLoopsGetNumber0(problemUserNumber,controlLoopIdentifier,numberOfSubLoops,err) + SUBROUTINE cmfe_ControlLoop_NumberOfSubLoopsGetNumber0(contextUserNumber,problemUserNumber,controlLoopIdentifier, & + & numberOfSubLoops,err) !DLLEXPORT(cmfe_ControlLoop_NumberOfSubLoopsGetNumber0) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the number of sub-control loops for a control loop identified by user numbers. - SUBROUTINE cmfe_ControlLoop_NumberOfSubLoopsGetNumber1(problemUserNumber,controlLoopIdentifiers,numberOfSubLoops,err) + SUBROUTINE cmfe_ControlLoop_NumberOfSubLoopsGetNumber1(contextUserNumber,problemUserNumber,controlLoopIdentifiers, & + & numberOfSubLoops,err) !DLLEXPORT(cmfe_ControlLoop_NumberOfSubLoopsGetNumber1) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the number of sub-control loops for a control loop identified by user numbers. \todo is this really public??? - SUBROUTINE cmfe_ControlLoop_NumberOfSubLoopsSetNumber0(problemUserNumber,controlLoopIdentifier,numberOfSubLoops,err) + SUBROUTINE cmfe_ControlLoop_NumberOfSubLoopsSetNumber0(contextUserNumber,problemUserNumber,controlLoopIdentifier, & + & numberOfSubLoops,err) !DLLEXPORT(cmfe_ControlLoop_NumberOfSubLoopsSetNumber0) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the number of sub-control loops for a control loop identified by user numbers. \todo is this really public??? - SUBROUTINE cmfe_ControlLoop_NumberOfSubLoopsSetNumber1(problemUserNumber,controlLoopIdentifiers,numberOfSubLoops,err) + SUBROUTINE cmfe_ControlLoop_NumberOfSubLoopsSetNumber1(contextUserNumber,problemUserNumber,controlLoopIdentifiers, & + & numberOfSubLoops,err) !DLLEXPORT(cmfe_ControlLoop_NumberOfSubLoopsSetNumber1) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the output type for a control loop identified by user numbers. - SUBROUTINE cmfe_ControlLoop_OutputTypeGetNumber0(problemUserNumber,controlLoopIdentifier,outputType,err) + SUBROUTINE cmfe_ControlLoop_OutputTypeGetNumber0(contextUserNumber,problemUserNumber,controlLoopIdentifier,outputType,err) !DLLEXPORT(cmfe_ControlLoop_OutputTypeGetNumber0) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the output type for a control loop identified by user numbers. - SUBROUTINE cmfe_ControlLoop_OutputTypeGetNumber1(problemUserNumber,controlLoopIdentifiers,outputType,err) + SUBROUTINE cmfe_ControlLoop_OutputTypeGetNumber1(contextUserNumber,problemUserNumber,controlLoopIdentifiers,outputType,err) !DLLEXPORT(cmfe_ControlLoop_OutputTypeGetNumber1) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets the output type for a control loop identified by user numbers. - SUBROUTINE cmfe_ControlLoop_OutputTypeSetNumber0(problemUserNumber,controlLoopIdentifier,outputType,err) + SUBROUTINE cmfe_ControlLoop_OutputTypeSetNumber0(contextUserNumber,problemUserNumber,controlLoopIdentifier,outputType,err) !DLLEXPORT(cmfe_ControlLoop_OutputTypeSetNumber0) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets the output type for a control loop identified by user numbers. - SUBROUTINE cmfe_ControlLoop_OutputTypeSetNumber1(problemUserNumber,controlLoopIdentifiers,outputType,err) + SUBROUTINE cmfe_ControlLoop_OutputTypeSetNumber1(contextUserNumber,problemUserNumber,controlLoopIdentifiers,outputType,err) !DLLEXPORT(cmfe_ControlLoop_OutputTypeSetNumber1) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the output parameters for a time control loop identified by user numbers. - SUBROUTINE cmfe_ControlLoop_TimeOutputSetNumber0(problemUserNumber,controlLoopIdentifier,outputFrequency,err) + SUBROUTINE cmfe_ControlLoop_TimeOutputSetNumber0(contextUserNumber,problemUserNumber,controlLoopIdentifier,outputFrequency,err) !DLLEXPORT(cmfe_ControlLoop_TimeOutputSetNumber0) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the output parameters for a time control loop identified by user numbers. - SUBROUTINE cmfe_ControlLoop_TimeOutputSetNumber1(problemUserNumber,controlLoopIdentifiers,outputFrequency,err) + SUBROUTINE cmfe_ControlLoop_TimeOutputSetNumber1(contextUserNumber,problemUserNumber,controlLoopIdentifiers,outputFrequency,err) !DLLEXPORT(cmfe_ControlLoop_TimeOutputSetNumber1) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the input parameters for a time control loop identified by user numbers. - SUBROUTINE cmfe_ControlLoop_TimeInputSetNumber0(problemUserNumber,controlLoopIdentifier,inputOption,err) + SUBROUTINE cmfe_ControlLoop_TimeInputSetNumber0(contextUserNumber,problemUserNumber,controlLoopIdentifier,inputOption,err) !DLLEXPORT(cmfe_ControlLoop_TimeInputSetNumber0) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the input parameters for a time control loop identified by user numbers. - SUBROUTINE cmfe_ControlLoop_TimeInputSetNumber1(problemUserNumber,controlLoopIdentifiers,inputOption,err) + SUBROUTINE cmfe_ControlLoop_TimeInputSetNumber1(contextUserNumber,problemUserNumber,controlLoopIdentifiers,inputOption,err) !DLLEXPORT(cmfe_ControlLoop_TimeInputSetNumber1) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the time parameters for a time control loop identified by user numbers. - SUBROUTINE cmfe_ControlLoop_TimesGetNumber0(problemUserNumber,controlLoopIdentifier,startTime,stopTime,timeIncrement, & - & currentTime,currentLoopIteration,outputIterationNumber,err) + SUBROUTINE cmfe_ControlLoop_TimesGetNumber0(contextUserNumber,problemUserNumber,controlLoopIdentifier,startTime,stopTime, & + & timeIncrement,currentTime,currentLoopIteration,outputIterationNumber,err) !DLLEXPORT(cmfe_ControlLoop_TimesGetNumber0) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the time parameters for a time control loop identified by user numbers. - SUBROUTINE cmfe_ControlLoop_TimesGetNumber1(problemUserNumber,controlLoopIdentifiers,startTime,stopTime,timeIncrement, & - & currentTime,currentLoopIteration,outputIterationNumber,err) + SUBROUTINE cmfe_ControlLoop_TimesGetNumber1(contextUserNumber,problemUserNumber,controlLoopIdentifiers,startTime,stopTime, & + & timeIncrement,currentTime,currentLoopIteration,outputIterationNumber,err) !DLLEXPORT(cmfe_ControlLoop_TimesGetNumber1) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the time parameters for a time control loop identified by user numbers. - SUBROUTINE cmfe_ControlLoop_TimesSetNumber0(problemUserNumber,controlLoopIdentifier,startTime,stopTime,timeIncrement,err) + SUBROUTINE cmfe_ControlLoop_TimesSetNumber0(contextUserNumber,problemUserNumber,controlLoopIdentifier,startTime,stopTime, & + & timeIncrement,err) !DLLEXPORT(cmfe_ControlLoop_TimesSetNumber0) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the time parameters for a time control loop identified by user numbers. - SUBROUTINE cmfe_ControlLoop_TimesSetNumber1(problemUserNumber,controlLoopIdentifiers,startTime,stopTime,timeIncrement,err) + SUBROUTINE cmfe_ControlLoop_TimesSetNumber1(contextUserNumber,problemUserNumber,controlLoopIdentifiers,startTime,stopTime, & + & timeIncrement,err) !DLLEXPORT(cmfe_ControlLoop_TimesSetNumber1) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the loop type for a control loop identified by user numbers. \todo is this really public??? - SUBROUTINE cmfe_ControlLoop_TypeSetNumber0(problemUserNumber,controlLoopIdentifier,loopType,err) + SUBROUTINE cmfe_ControlLoop_TypeSetNumber0(contextUserNumber,problemUserNumber,controlLoopIdentifier,loopType,err) !DLLEXPORT(cmfe_ControlLoop_TypeSetNumber0) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the loop type for a control loop identified by user numbers. \todo is this really public??? - SUBROUTINE cmfe_ControlLoop_TypeSetNumber1(problemUserNumber,controlLoopIdentifiers,loopType,err) + SUBROUTINE cmfe_ControlLoop_TypeSetNumber1(contextUserNumber,problemUserNumber,controlLoopIdentifiers,loopType,err) !DLLEXPORT(cmfe_ControlLoop_TypeSetNumber1) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Finishes the creation of a coordinate system identified by a user number. - SUBROUTINE cmfe_CoordinateSystem_CreateFinishNumber(coordinateSystemUserNumber,err) + SUBROUTINE cmfe_CoordinateSystem_CreateFinishNumber(contextUserNumber,coordinateSystemUserNumber,err) !DLLEXPORT(cmfe_CoordinateSystem_CreateFinishNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Starts the creation of a coordinate system identified by a user number. - SUBROUTINE cmfe_CoordinateSystem_CreateStartNumber(coordinateSystemUserNumber,err) + SUBROUTINE cmfe_CoordinateSystem_CreateStartNumber(contextUserNumber,coordinateSystemUserNumber,err) !DLLEXPORT(cmfe_CoordinateSystem_CreateStartNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Starts the creation of a coordinate system identified by an object. - SUBROUTINE cmfe_CoordinateSystem_CreateStartObj(coordinateSystemUserNumber,coordinateSystem,err) + SUBROUTINE cmfe_CoordinateSystem_CreateStartObj(coordinateSystemUserNumber,context,coordinateSystem,err) !DLLEXPORT(cmfe_CoordinateSystem_CreateStartObj) !Argument variables INTEGER(INTG), INTENT(IN) :: coordinateSystemUserNumber !Destroys a coordinate system identified by a user number. - SUBROUTINE cmfe_CoordinateSystem_DestroyNumber(coordinateSystemUserNumber,err) + SUBROUTINE cmfe_CoordinateSystem_DestroyNumber(contextUserNumber,coordinateSystemUserNumber,err) !DLLEXPORT(cmfe_CoordinateSystem_DestroyNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the dimension of a coordinate system identified by a user number. - SUBROUTINE cmfe_CoordinateSystem_DimensionGetNumber(coordinateSystemUserNumber,coordinateSystemDimension,err) + SUBROUTINE cmfe_CoordinateSystem_DimensionGetNumber(contextUserNumber,coordinateSystemUserNumber,coordinateSystemDimension,err) !DLLEXPORT(cmfe_CoordinateSystem_DimensionGetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the dimension of a coordinate system identified by a user number. - SUBROUTINE cmfe_CoordinateSystem_DimensionSetNumber(coordinateSystemUserNumber,coordinateSystemDimension,err) + SUBROUTINE cmfe_CoordinateSystem_DimensionSetNumber(contextUserNumber,coordinateSystemUserNumber,coordinateSystemDimension,err) !DLLEXPORT(cmfe_CoordinateSystem_DimensionSetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the focus of a coordinate system identified by a user number. - SUBROUTINE cmfe_CoordinateSystem_FocusGetNumber(coordinateSystemUserNumber,focus,err) + SUBROUTINE cmfe_CoordinateSystem_FocusGetNumber(contextUserNumber,coordinateSystemUserNumber,focus,err) !DLLEXPORT(cmfe_CoordinateSystem_FocusGetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the focus of a coordinate system identified by a user number. - SUBROUTINE cmfe_CoordinateSystem_FocusSetNumber(coordinateSystemUserNumber,focus,err) + SUBROUTINE cmfe_CoordinateSystem_FocusSetNumber(contextUserNumber,coordinateSystemUserNumber,focus,err) !DLLEXPORT(cmfe_CoordinateSystem_FocusSetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the radial interpolation type of a coordinate system identified by a user number. - SUBROUTINE cmfe_CoordinateSystem_RadialInterpolationGetNumber(coordinateSystemUserNumber,radialInterpolationType,err) + SUBROUTINE cmfe_CoordinateSystem_RadialInterpolationGetNumber(contextUserNumber,coordinateSystemUserNumber, & + & radialInterpolationType,err) !DLLEXPORT(cmfe_CoordinateSystem_RadialInterpolationGetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the radial interpolation type of a coordinate system identified by a user number. - SUBROUTINE cmfe_CoordinateSystem_RadialInterpolationSetNumber(coordinateSystemUserNumber,radialInterpolationType,err) + SUBROUTINE cmfe_CoordinateSystem_RadialInterpolationSetNumber(contextUserNumber,coordinateSystemUserNumber, & + & radialInterpolationType,err) !DLLEXPORT(cmfe_CoordinateSystem_RadialInterpolationSetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the type of a coordinate system identified by a user number. - SUBROUTINE cmfe_CoordinateSystem_TypeGetNumber(coordinateSystemUserNumber,coordinateSystemType,err) + SUBROUTINE cmfe_CoordinateSystem_TypeGetNumber(contextUserNumber,coordinateSystemUserNumber,coordinateSystemType,err) !DLLEXPORT(cmfe_CoordinateSystem_TypeGetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the type of a coordinate system identified by a user number. - SUBROUTINE cmfe_CoordinateSystem_TypeSetNumber(coordinateSystemUserNumber,coordinateSystemType,err) + SUBROUTINE cmfe_CoordinateSystem_TypeSetNumber(contextUserNumber,coordinateSystemUserNumber,coordinateSystemType,err) !DLLEXPORT(cmfe_CoordinateSystem_TypeSetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the origin of a coordinate system identified by a user number. - SUBROUTINE cmfe_CoordinateSystem_OriginGetNumber(coordinateSystemUserNumber,origin,err) + SUBROUTINE cmfe_CoordinateSystem_OriginGetNumber(contextUserNumber,coordinateSystemUserNumber,origin,err) !DLLEXPORT(cmfe_CoordinateSystem_OriginGetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the origin of a coordinate system identified by a user number. - SUBROUTINE cmfe_CoordinateSystem_OriginSetNumber(coordinateSystemUserNumber,origin,err) + SUBROUTINE cmfe_CoordinateSystem_OriginSetNumber(contextUserNumber,coordinateSystemUserNumber,origin,err) !DLLEXPORT(cmfe_CoordinateSystem_OriginSetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the orientation of a coordinate system identified by a user number. - SUBROUTINE cmfe_CoordinateSystem_OrientationGetNumber(coordinateSystemUserNumber,orientation,err) + SUBROUTINE cmfe_CoordinateSystem_OrientationGetNumber(contextUserNumber,coordinateSystemUserNumber,orientation,err) !DLLEXPORT(cmfe_CoordinateSystem_OrientationGetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the orientation of a coordinate system identified by a user number. - SUBROUTINE cmfe_CoordinateSystem_OrientationSetNumber(coordinateSystemUserNumber,orientation,err) + SUBROUTINE cmfe_CoordinateSystem_OrientationSetNumber(contextUserNumber,coordinateSystemUserNumber,orientation,err) !DLLEXPORT(cmfe_CoordinateSystem_OrientationSetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Finishes the process of creating data points in a region for data points identified by user number. - SUBROUTINE cmfe_DataPoints_CreateFinishNumber(regionUserNumber,dataPointsUserNumber,err) + SUBROUTINE cmfe_DataPoints_CreateFinishNumber(contextUserNumber,regionUserNumber,dataPointsUserNumber,err) !DLLEXPORT(cmfe_DataPoints_CreateFinishNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Starts the process of creating data points in a region for data points identified by user number. - SUBROUTINE cmfe_DataPoints_CreateStartNumber(dataPointsUserNumber,regionUserNumber,numberOfDataPoints,err) + SUBROUTINE cmfe_DataPoints_CreateStartNumber(dataPointsUserNumber,contextUserNumber,regionUserNumber,numberOfDataPoints,err) !DLLEXPORT(cmfe_DataPoints_CreateStartNumber) !Argument variables INTEGER(INTG), INTENT(IN) :: dataPointsUserNumber !Starts the creation of a data points in a region for data points identified by an object. - SUBROUTINE cmfe_DataPoints_CreateStartInterfaceObj(dataPointsUserNumber,INTERFACE,numberOfDataPoints,dataPoints,err) + SUBROUTINE cmfe_DataPoints_CreateStartInterfaceObj(dataPointsUserNumber,interface,numberOfDataPoints,dataPoints,err) !DLLEXPORT(cmfe_DataPoints_CreateStartInterfaceObj) !Argument variables @@ -19841,7 +21352,7 @@ SUBROUTINE cmfe_DataPoints_CreateStartInterfaceObj(dataPointsUserNumber,INTERFAC CALL TAU_STATIC_PHASE_START('dataPoints Create') #endif - CALL DataPoints_CreateStart(dataPointsUserNumber,INTERFACE%INTERFACE,numberOfDataPoints,dataPoints%dataPoints,err,error,*999) + CALL DataPoints_CreateStart(dataPointsUserNumber,interface%interface,numberOfDataPoints,dataPoints%dataPoints,err,error,*999) EXITS("cmfe_DataPoints_CreateStartInterfaceObj") RETURN @@ -19857,21 +21368,28 @@ END SUBROUTINE cmfe_DataPoints_CreateStartInterfaceObj ! !>Destroys the data points in a region for data points identified by user number. - SUBROUTINE cmfe_DataPoints_DestroyNumber(regionUserNumber,dataPointsUserNumber,err) + SUBROUTINE cmfe_DataPoints_DestroyNumber(contextUserNumber,regionUserNumber,dataPointsUserNumber,err) !DLLEXPORT(cmfe_DataPoints_DestroyNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the number of data points - SUBROUTINE cmfe_DataPoints_NumberOfDataPointsGetNumber(regionUserNumber,dataPointsUserNumber,numberOfDataPoints,err) + SUBROUTINE cmfe_DataPoints_NumberOfDataPointsGetNumber(contextUserNumber,regionUserNumber,dataPointsUserNumber, & + & numberOfDataPoints,err) !DLLEXPORT(cmfe_DataPoints_NumberOfDataPointsGetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the character label for a data point in a set of data points identified by user number. - SUBROUTINE cmfe_DataPoints_LabelGetCNumber(regionUserNumber,dataPointsUserNumber,dataPointUserNumber,label,err) + SUBROUTINE cmfe_DataPoints_LabelGetCNumber(contextUserNumber,regionUserNumber,dataPointsUserNumber,dataPointUserNumber,label,err) !DLLEXPORT(cmfe_DataPoints_LabelGetCNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the varying string label for a data point in a set of data points identified by user number. - SUBROUTINE cmfe_DataPoints_LabelGetVSNumber(regionUserNumber,dataPointsUserNumber,dataPointUserNumber,label,err) + SUBROUTINE cmfe_DataPoints_LabelGetVSNumber(contextUserNumber,regionUserNumber,dataPointsUserNumber,dataPointUserNumber,label,err) !DLLEXPORT(cmfe_DataPoints_LabelGetVSNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the character label for a data point in a set of data points identified by user number. - SUBROUTINE cmfe_DataPoints_LabelSetCNumber(regionUserNumber,dataPointsUserNumber,dataPointUserNumber,label,err) + SUBROUTINE cmfe_DataPoints_LabelSetCNumber(contextUserNumber,regionUserNumber,dataPointsUserNumber,dataPointUserNumber,label,err) !DLLEXPORT(cmfe_DataPoints_LabelSetCNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the varying string label for a data point in a set of data points identified by user number. - SUBROUTINE cmfe_DataPoints_LabelSetVSNumber(regionUserNumber,dataPointsUserNumber,dataPointUserNumber,label,err) + SUBROUTINE cmfe_DataPoints_LabelSetVSNumber(contextUserNumber,regionUserNumber,dataPointsUserNumber,dataPointUserNumber,label,err) !DLLEXPORT(cmfe_DataPoints_LabelSetVSNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the user number for a data point in a set of data points identified by user number. - SUBROUTINE cmfe_DataPoints_UserNumberGetNumber(regionUserNumber,dataPointsUserNumber,dataPointGlobalNumber, & + SUBROUTINE cmfe_DataPoints_UserNumberGetNumber(contextUserNumber,regionUserNumber,dataPointsUserNumber,dataPointGlobalNumber, & & dataPointUserNumber,err) !DLLEXPORT(cmfe_DataPoints_UserNumberGetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the user number for a data point in a set of data points identified by user number. - SUBROUTINE cmfe_DataPoints_UserNumberSetNumber(regionUserNumber,dataPointsUserNumber,dataPointGlobalNumber, & + SUBROUTINE cmfe_DataPoints_UserNumberSetNumber(contextUserNumber,regionUserNumber,dataPointsUserNumber,dataPointGlobalNumber, & & dataPointUserNumber,err) !DLLEXPORT(cmfe_DataPoints_UserNumberSetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the position for a data point in a set of data points identified by user number. - SUBROUTINE cmfe_DataPoints_PositionGetNumber(regionUserNumber,dataPointsUserNumber,dataPointUserNumber,dataPointPosition,err) + SUBROUTINE cmfe_DataPoints_PositionGetNumber(contextUserNumber,regionUserNumber,dataPointsUserNumber,dataPointUserNumber, & + & dataPointPosition,err) !DLLEXPORT(cmfe_DataPoints_PositionGetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the position for a data point in a set of data points identified by user number. - SUBROUTINE cmfe_DataPoints_PositionSetNumber(regionUserNumber,dataPointsUserNumber,dataPointUserNumber,dataPointPosition,err) + SUBROUTINE cmfe_DataPoints_PositionSetNumber(contextUserNumber,regionUserNumber,dataPointsUserNumber,dataPointUserNumber, & + & dataPointPosition,err) !DLLEXPORT(cmfe_DataPoints_PositionSetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the weights for a data point in a set of data points identified by user number. - SUBROUTINE cmfe_DataPoints_WeightsGetNumber(regionUserNumber,dataPointsUserNumber,dataPointUserNumber,dataPointWeights,err) + SUBROUTINE cmfe_DataPoints_WeightsGetNumber(contextUserNumber,regionUserNumber,dataPointsUserNumber,dataPointUserNumber, & + & dataPointWeights,err) !DLLEXPORT(cmfe_DataPoints_WeightsGetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the weights for a data point in a set of data points identified by user number. - SUBROUTINE cmfe_DataPoints_WeightsSetNumber(regionUserNumber,dataPointsUserNumber,dataPointUserNumber,dataPointWeights,err) + SUBROUTINE cmfe_DataPoints_WeightsSetNumber(contextUserNumber,regionUserNumber,dataPointsUserNumber,dataPointUserNumber, & + & dataPointWeights,err) !DLLEXPORT(cmfe_DataPoints_WeightsSetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the absolute tolerance of data projection identified by a region user number. - SUBROUTINE cmfe_DataProjection_AbsoluteToleranceGetNumber(regionUserNumber,dataPointsUserNumber,dataProjectionUserNumber, & - & absoluteTolerance,err) + SUBROUTINE cmfe_DataProjection_AbsoluteToleranceGetNumber(contextUserNumber,regionUserNumber,dataPointsUserNumber, & + & dataProjectionUserNumber,absoluteTolerance,err) !DLLEXPORT(cmfe_DataProjection_AbsoluteToleranceGetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the absolute tolerance of data projection identified by a region user number. - SUBROUTINE cmfe_DataProjection_AbsoluteToleranceSetNumber(regionUserNumber,dataPointsUserNumber,dataProjectionUserNumber, & - & absoluteTolerance,err) + SUBROUTINE cmfe_DataProjection_AbsoluteToleranceSetNumber(contextUserNumber,regionUserNumber,dataPointsUserNumber, & + & dataProjectionUserNumber,absoluteTolerance,err) !DLLEXPORT(cmfe_DataProjection_AbsoluteToleranceSetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Finishes the creation of a new data projection identified by a region user number. - SUBROUTINE cmfe_DataProjection_CreateFinishNumber(regionUserNumber,dataPointsUserNumber,dataProjectionUserNumber,err) + SUBROUTINE cmfe_DataProjection_CreateFinishNumber(contextUserNumber,regionUserNumber,dataPointsUserNumber, & + & dataProjectionUserNumber,err) !DLLEXPORT(cmfe_DataProjection_CreateFinishNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Starts the creation of a new data projection for a data projection identified by a region user number. - SUBROUTINE cmfe_DataProjection_CreateStartNumber(regionUserNumber,dataPointsUserNumber,dataProjectionUserNumber, & - & projectionFieldUserNumber,projectionFieldVariableType,err) + SUBROUTINE cmfe_DataProjection_CreateStartNumber(contextUserNumber,regionUserNumber,dataPointsUserNumber, & + & dataProjectionUserNumber,projectionFieldUserNumber,projectionFieldVariableType,err) !DLLEXPORT(cmfe_DataProjection_CreateStartNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Destroys a data projection identified by region user number. - SUBROUTINE cmfe_DataProjection_DestroyNumber(regionUserNumber,dataPointsUserNumber,dataProjectionUserNumber,err) + SUBROUTINE cmfe_DataProjection_DestroyNumber(contextUserNumber,regionUserNumber,dataPointsUserNumber,dataProjectionUserNumber,err) !DLLEXPORT(cmfe_DataProjection_DestroyNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Evaluate the data points position in a field based on data projection in a region, identified by user number - SUBROUTINE cmfe_DataProjection_DataPointsPositionEvaluateRegionNumber(regionUserNumber,dataPointsUserNumber, & + SUBROUTINE cmfe_DataProjection_DataPointsPositionEvaluateRegionNumber(contextUserNumber,regionUserNumber,dataPointsUserNumber, & & dataProjectionUserNumber,fieldUserNumber,fieldVariableType,fieldParameterSetType,err) !DLLEXPORT(cmfe_DataProjection_DataPointsPositionEvaluateRegionNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Evaluate the data points position in a field based on data projection in an interface, identified by user number - SUBROUTINE cmfe_DataProjection_DataPointsPositionEvaluateInterfaceNumber(parentRegionUserNumber,interfaceUserNumber, & - & dataPointsUserNumber,dataProjectionUserNumber,fieldUserNumber,fieldVariableType,fieldParameterSetType,err) + SUBROUTINE cmfe_DataProjection_DataPointsPositionEvaluateInterfaceNumber(contextUserNumber,parentRegionUserNumber, & + & interfaceUserNumber,dataPointsUserNumber,dataProjectionUserNumber,fieldUserNumber,fieldVariableType, & + & fieldParameterSetType,err) !DLLEXPORT(cmfe_DataProjection_DataPointsPositionEvaluateInterfaceNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Cancel the data projection for data points based on a data point user number in a region specified by user number - SUBROUTINE cmfe_DataProjection_ProjectionCancelByDataPointsRegionNumber0(regionUserNumber,dataPointsUserNumber, & - & dataProjectionUserNumber,dataPointUserNumber,err) + SUBROUTINE cmfe_DataProjection_ProjectionCancelByDataPointsRegionNumber0(contextUserNumber,regionUserNumber, & + & dataPointsUserNumber,dataProjectionUserNumber,dataPointUserNumber,err) !DLLEXPORT(cmfe_DataProjection_ProjectionCancelByDataPointsRegionNumber0) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Cancel the data projection for data points based on the projection exit tag in a region specified by user number - SUBROUTINE cmfe_DataProjection_ProjectionCancelByDataPointsRegionNumber1(regionUserNumber,dataPointsUserNumber, & - & dataProjectionUserNumber,dataPointUserNumbers,err) + SUBROUTINE cmfe_DataProjection_ProjectionCancelByDataPointsRegionNumber1(contextUserNumber,regionUserNumber, & + & dataPointsUserNumber,dataProjectionUserNumber,dataPointUserNumbers,err) !DLLEXPORT(cmfe_DataProjection_ProjectionCancelByDataPointsRegionNumber1) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Cancel the data projection for data points based on the projection exit tag in an interface specified by user number - SUBROUTINE cmfe_DataProjection_ProjectionCancelByDataPointsInterNum0(parentRegionUserNumber,interfaceUserNumber, & - & dataPointsUserNumber,dataProjectionUserNumber,dataPointUserNumber,err) + SUBROUTINE cmfe_DataProjection_ProjectionCancelByDataPointsInterNum0(contextUserNumber,parentRegionUserNumber, & + & interfaceUserNumber,dataPointsUserNumber,dataProjectionUserNumber,dataPointUserNumber,err) !DLLEXPORT(cmfe_DataProjection_ProjectionCancelByDataPointsInterNum0) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Cancel the data projection for data points based on the projection exit tag in an interface specified by user number - SUBROUTINE cmfe_DataProjection_ProjectionCancelByDataPointsInterNum1(parentRegionUserNumber,interfaceUserNumber, & - & dataPointsUserNumber,dataProjectionUserNumber,dataPointUserNumbers,err) + SUBROUTINE cmfe_DataProjection_ProjectionCancelByDataPointsInterNum1(contextUserNumber,parentRegionUserNumber, & + & interfaceUserNumber,dataPointsUserNumber,dataProjectionUserNumber,dataPointUserNumbers,err) !DLLEXPORT(cmfe_DataProjection_ProjectionCancelByDataPointsInterNum1) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Cancel the data projection for data points based on the projection distance in a region specified by user number - SUBROUTINE cmfe_DataProjection_ProjectionCancelByDistanceRegionNumber(regionUserNumber,dataPointsUserNumber, & + SUBROUTINE cmfe_DataProjection_ProjectionCancelByDistanceRegionNumber(contextUserNumber,regionUserNumber,dataPointsUserNumber, & & dataProjectionUserNumber,distanceRelation,distance,err) !DLLEXPORT(cmfe_DataProjection_ProjectionCancelByDistanceRegionNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Cancel the data projection for data points based on the projection distance in an interface specified by user number - SUBROUTINE cmfe_DataProjection_ProjectionCancelByDistanceInterfaceNumber(parentRegionUserNumber,interfaceUserNumber, & - & dataPointsUserNumber,dataProjectionUserNumber,distanceRelation,distance,err) + SUBROUTINE cmfe_DataProjection_ProjectionCancelByDistanceInterfaceNumber(contextUserNumber,parentRegionUserNumber, & + & interfaceUserNumber,dataPointsUserNumber,dataProjectionUserNumber,distanceRelation,distance,err) !DLLEXPORT(cmfe_DataProjection_ProjectionCancelByDistanceInterfaceNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Cancel the data projection for data points based on the projection exit tag in a region specified by user number - SUBROUTINE cmfe_DataProjection_ProjectionCancelByExitTagsRegionNumber0(regionUserNumber,dataPointsUserNumber, & - & dataProjectionUserNumber,exitTag,err) + SUBROUTINE cmfe_DataProjection_ProjectionCancelByExitTagsRegionNumber0(contextUserNumber,regionUserNumber, & + & dataPointsUserNumber,dataProjectionUserNumber,exitTag,err) !DLLEXPORT(cmfe_DataProjection_ProjectionCancelByExitTagsRegionNumber0) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Cancel the data projection for data points based on the projection exit tag in a region specified by user number - SUBROUTINE cmfe_DataProjection_ProjectionCancelByExitTagsRegionNumber1(regionUserNumber,dataPointsUserNumber, & + SUBROUTINE cmfe_DataProjection_ProjectionCancelByExitTagsRegionNumber1(contextUserNumber,regionUserNumber,dataPointsUserNumber, & & dataProjectionUserNumber,exitTags,err) !DLLEXPORT(cmfe_DataProjection_ProjectionCancelByExitTagsRegionNumber1) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Cancel the data projection for data points based on the projection exit tag in an interface specified by user number - SUBROUTINE cmfe_DataProjection_ProjectionCancelByExitTagsInterfaceNumber0(parentRegionUserNumber,interfaceUserNumber, & - & dataPointsUserNumber,dataProjectionUserNumber,exitTag,err) + SUBROUTINE cmfe_DataProjection_ProjectionCancelByExitTagsInterfaceNumber0(contextUserNumber,parentRegionUserNumber, & + & interfaceUserNumber,dataPointsUserNumber,dataProjectionUserNumber,exitTag,err) !DLLEXPORT(cmfe_DataProjection_ProjectionCancelByExitTagsInterfaceNumber0) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Cancel the data projection for data points based on the projection exit tag in an interface specified by user number - SUBROUTINE cmfe_DataProjection_ProjectionCancelByExitTagsInterfaceNumber1(parentRegionUserNumber,interfaceUserNumber, & - & dataPointsUserNumber,dataProjectionUserNumber,exitTags,err) + SUBROUTINE cmfe_DataProjection_ProjectionCancelByExitTagsInterfaceNumber1(contextUserNumber,parentRegionUserNumber, & + & interfaceUserNumber,dataPointsUserNumber,dataProjectionUserNumber,exitTags,err) !DLLEXPORT(cmfe_DataProjection_ProjectionCancelByExitTagsInterfaceNumber1) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Set the data projection candidate elements for an all elements projection type in a region specified by user number - SUBROUTINE cmfe_DataProjection_ProjectionCandidateElementsSetRegionNumber(regionUserNumber,dataPointsUserNumber, & - & dataProjectionUserNumber,candidateElementUserNumbers,err) + SUBROUTINE cmfe_DataProjection_ProjectionCandidateElementsSetRegionNumber(contextUserNumber,regionUserNumber, & + & dataPointsUserNumber,dataProjectionUserNumber,candidateElementUserNumbers,err) !DLLEXPORT(cmfe_DataProjection_ProjectionCandidateElementsSetRegionNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !ESet the data projection candidate elements for an all elements projection type in an interface specified by user number - SUBROUTINE cmfe_DataProjection_ProjectionCandidateElementsSetIntNum(parentRegionUserNumber,interfaceUserNumber, & - & dataPointsUserNumber,dataProjectionUserNumber,candidateElementUserNumbers,err) + SUBROUTINE cmfe_DataProjection_ProjectionCandidateElementsSetIntNum(contextUserNumber,parentRegionUserNumber, & + & interfaceUserNumber,dataPointsUserNumber,dataProjectionUserNumber,candidateElementUserNumbers,err) !DLLEXPORT(cmfe_DataProjection_ProjectionCandidateElementsSetIntNum) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Set the data projection candidate element for a data point for an all elements projection type in a region specified by user number - SUBROUTINE cmfe_DataProjection_ProjectionDataCandidateElementsSetRegNum00(regionUserNumber,dataPointsUserNumber, & - & dataProjectionUserNumber,dataPointUserNumber,candidateElementUserNumber,err) + SUBROUTINE cmfe_DataProjection_ProjectionDataCandidateElementsSetRegNum00(contextUserNumber,regionUserNumber, & + & dataPointsUserNumber,dataProjectionUserNumber,dataPointUserNumber,candidateElementUserNumber,err) !DLLEXPORT(cmfe_DataProjection_ProjectionDataCandidateElementsSetRegNum00) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Set the data projection candidate elements for a data point for an all elements projection type in a region specified by user number - SUBROUTINE cmfe_DataProjection_ProjectionDataCandidateElementsSetRegNum01(regionUserNumber,dataPointsUserNumber, & - & dataProjectionUserNumber,dataPointUserNumber,candidateElementUserNumbers,err) + SUBROUTINE cmfe_DataProjection_ProjectionDataCandidateElementsSetRegNum01(contextUserNumber,regionUserNumber, & + & dataPointsUserNumber,dataProjectionUserNumber,dataPointUserNumber,candidateElementUserNumbers,err) !DLLEXPORT(cmfe_DataProjection_ProjectionDataCandidateElementsSetRegNum01) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Set the data projection candidate element for data points for an all elements projection type in a region specified by user number - SUBROUTINE cmfe_DataProjection_ProjectionDataCandidateElementsSetRegNum10(regionUserNumber,dataPointsUserNumber, & - & dataProjectionUserNumber,dataPointUserNumbers,candidateElementUserNumber,err) + SUBROUTINE cmfe_DataProjection_ProjectionDataCandidateElementsSetRegNum10(contextUserNumber,regionUserNumber, & + & dataPointsUserNumber,dataProjectionUserNumber,dataPointUserNumbers,candidateElementUserNumber,err) !DLLEXPORT(cmfe_DataProjection_ProjectionDataCandidateElementsSetRegNum10) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Set the data projection candidate elements for data points for an all elements projection type in a region specified by user number - SUBROUTINE cmfe_DataProjection_ProjectionDataCandidateElementsSetRegNum11(regionUserNumber,dataPointsUserNumber, & - & dataProjectionUserNumber,dataPointUserNumbers,candidateElementUserNumbers,err) + SUBROUTINE cmfe_DataProjection_ProjectionDataCandidateElementsSetRegNum11(contextUserNumber,regionUserNumber, & + & dataPointsUserNumber,dataProjectionUserNumber,dataPointUserNumbers,candidateElementUserNumbers,err) !DLLEXPORT(cmfe_DataProjection_ProjectionDataCandidateElementsSetRegNum11) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Set the data projection candidate element for a data point for an all elements projection type in an interface specified by user number - SUBROUTINE cmfe_DataProjection_ProjectionDataCandidateElementsSetIntNum00(parentRegionUserNumber,interfaceUserNumber, & - & dataPointsUserNumber,dataProjectionUserNumber,dataPointUserNumber,candidateElementUserNumber,err) + SUBROUTINE cmfe_DataProjection_ProjectionDataCandidateElementsSetIntNum00(contextUserNumber,parentRegionUserNumber, & + & interfaceUserNumber,dataPointsUserNumber,dataProjectionUserNumber,dataPointUserNumber,candidateElementUserNumber,err) !DLLEXPORT(cmfe_DataProjection_ProjectionDataCandidateElementsSetIntNum00) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Set the data projection candidate elements for a data point for an all elements projection type in an interface specified by user number - SUBROUTINE cmfe_DataProjection_ProjectionDataCandidateElementsSetIntNum01(parentRegionUserNumber,interfaceUserNumber, & - & dataPointsUserNumber,dataProjectionUserNumber,dataPointUserNumber,candidateElementUserNumbers,err) + SUBROUTINE cmfe_DataProjection_ProjectionDataCandidateElementsSetIntNum01(contextUserNumber,parentRegionUserNumber, & + & interfaceUserNumber,dataPointsUserNumber,dataProjectionUserNumber,dataPointUserNumber,candidateElementUserNumbers,err) !DLLEXPORT(cmfe_DataProjection_ProjectionDataCandidateElementsSetIntNum01) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Set the data projection candidate element for data points for an all elements projection type in an interface specified by user number - SUBROUTINE cmfe_DataProjection_ProjectionDataCandidateElementsSetIntNum10(parentRegionUserNumber,interfaceUserNumber, & - & dataPointsUserNumber,dataProjectionUserNumber,dataPointUserNumbers,candidateElementUserNumber,err) + SUBROUTINE cmfe_DataProjection_ProjectionDataCandidateElementsSetIntNum10(contextUserNumber,parentRegionUserNumber, & + & interfaceUserNumber,dataPointsUserNumber,dataProjectionUserNumber,dataPointUserNumbers,candidateElementUserNumber,err) !DLLEXPORT(cmfe_DataProjection_ProjectionDataCandidateElementsSetIntNum10) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Set the data projection candidate elements for data points for an all elements projection type in an interface specified by user number - SUBROUTINE cmfe_DataProjection_ProjectionDataCandidateElementsSetIntNum11(parentRegionUserNumber,interfaceUserNumber, & - & dataPointsUserNumber,dataProjectionUserNumber,dataPointUserNumbers,candidateElementUserNumbers,err) + SUBROUTINE cmfe_DataProjection_ProjectionDataCandidateElementsSetIntNum11(contextUserNumber,parentRegionUserNumber, & + & interfaceUserNumber,dataPointsUserNumber,dataProjectionUserNumber,dataPointUserNumbers,candidateElementUserNumbers,err) !DLLEXPORT(cmfe_DataProjection_ProjectionDataCandidateElementsSetIntNum11) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Set the data projection candidate faces for a boundary faces projection type in a region specified by user number - SUBROUTINE cmfe_DataProjection_ProjectionCandidateFacesSetRegionNumber(regionUserNumber,dataPointsUserNumber, & + SUBROUTINE cmfe_DataProjection_ProjectionCandidateFacesSetRegionNumber(contextUserNumber,regionUserNumber,dataPointsUserNumber, & & dataProjectionUserNumber,candidateElementUserNumbers,candidateFaceNormals,err) !DLLEXPORT(cmfe_DataProjection_ProjectionCandidateFacesSetRegionNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Set the data projection candidate faces for a boundary faces projection type in an interface specified by user number - SUBROUTINE cmfe_DataProjection_ProjectionCandidateFacesSetInterfaceNumber(parentRegionUserNumber,interfaceUserNumber, & - & dataPointsUserNumber,dataProjectionUserNumber,candidateElementUserNumbers,candidateFaceNormals,err) + SUBROUTINE cmfe_DataProjection_ProjectionCandidateFacesSetInterfaceNumber(contextUserNumber,parentRegionUserNumber, & + & interfaceUserNumber,dataPointsUserNumber,dataProjectionUserNumber,candidateElementUserNumbers,candidateFaceNormals,err) !DLLEXPORT(cmfe_DataProjection_ProjectionCandidateFacesSetInterfaceNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Set the data projection candidate face for a data point in a boundary faces projection type in a region specified by user number - SUBROUTINE cmfe_DataProjection_ProjectionDataCandidateFacesSetRegNum000(regionUserNumber,dataPointsUserNumber, & - & dataProjectionUserNumber,dataPointUserNumber,candidateElementUserNumber,candidateFaceNormal,err) + SUBROUTINE cmfe_DataProjection_ProjectionDataCandidateFacesSetRegNum000(contextUserNumber,regionUserNumber, & + & dataPointsUserNumber,dataProjectionUserNumber,dataPointUserNumber,candidateElementUserNumber,candidateFaceNormal,err) !DLLEXPORT(cmfe_DataProjection_ProjectionCandidateFacesSetRegNum000) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Set the data projection candidate faces for a data point in a boundary faces projection type in a region specified by user number - SUBROUTINE cmfe_DataProjection_ProjectionDataCandidateFacesSetRegNum011(regionUserNumber,dataPointsUserNumber, & - & dataProjectionUserNumber,dataPointUserNumber,candidateElementUserNumbers,candidateFaceNormals,err) + SUBROUTINE cmfe_DataProjection_ProjectionDataCandidateFacesSetRegNum011(contextUserNumber,regionUserNumber, & + & dataPointsUserNumber,dataProjectionUserNumber,dataPointUserNumber,candidateElementUserNumbers,candidateFaceNormals,err) !DLLEXPORT(cmfe_DataProjection_ProjectionCandidateFacesSetRegNum011) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Set the data projection candidate face for data points in a boundary faces projection type in a region specified by user number - SUBROUTINE cmfe_DataProjection_ProjectionDataCandidateFacesSetRegNum100(regionUserNumber,dataPointsUserNumber, & - & dataProjectionUserNumber,dataPointUserNumbers,candidateElementUserNumber,candidateFaceNormal,err) + SUBROUTINE cmfe_DataProjection_ProjectionDataCandidateFacesSetRegNum100(contextUserNumber,regionUserNumber, & + & dataPointsUserNumber,dataProjectionUserNumber,dataPointUserNumbers,candidateElementUserNumber,candidateFaceNormal,err) !DLLEXPORT(cmfe_DataProjection_ProjectionCandidateFacesSetRegNum100) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Set the data projection candidate faces for data points in a boundary faces projection type in a region specified by user number - SUBROUTINE cmfe_DataProjection_ProjectionDataCandidateFacesSetRegNum111(regionUserNumber,dataPointsUserNumber, & - & dataProjectionUserNumber,dataPointUserNumbers,candidateElementUserNumbers,candidateFaceNormals,err) + SUBROUTINE cmfe_DataProjection_ProjectionDataCandidateFacesSetRegNum111(contextUserNumber,regionUserNumber, & + & dataPointsUserNumber,dataProjectionUserNumber,dataPointUserNumbers,candidateElementUserNumbers,candidateFaceNormals,err) !DLLEXPORT(cmfe_DataProjection_ProjectionCandidateFacesSetRegNum111) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Set the data projection candidate face for a data point for a boundary faces projection type in an interface specified by user number - SUBROUTINE cmfe_DataProjection_ProjectionDataCandidateFacesSetIntNum000(parentRegionUserNumber,interfaceUserNumber, & - & dataPointsUserNumber,dataProjectionUserNumber,dataPointUserNumber,candidateElementUserNumber,candidateFaceNormal,err) + SUBROUTINE cmfe_DataProjection_ProjectionDataCandidateFacesSetIntNum000(contextUserNumber,parentRegionUserNumber, & + & interfaceUserNumber,dataPointsUserNumber,dataProjectionUserNumber,dataPointUserNumber,candidateElementUserNumber, & + & candidateFaceNormal,err) !DLLEXPORT(cmfe_DataProjection_ProjectionDataCandidateFacesSetIntNum000) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Set the data projection candidate faces for a data point for a boundary faces projection type in an interface specified by user number - SUBROUTINE cmfe_DataProjection_ProjectionDataCandidateFacesSetIntNum011(parentRegionUserNumber,interfaceUserNumber, & - & dataPointsUserNumber,dataProjectionUserNumber,dataPointUserNumber,candidateElementUserNumbers,candidateFaceNormals,err) + SUBROUTINE cmfe_DataProjection_ProjectionDataCandidateFacesSetIntNum011(contextUserNumber,parentRegionUserNumber, & + & interfaceUserNumber,dataPointsUserNumber,dataProjectionUserNumber,dataPointUserNumber,candidateElementUserNumbers, & + & candidateFaceNormals,err) !DLLEXPORT(cmfe_DataProjection_ProjectionDataCandidateFacesSetIntNum011) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Set the data projection candidate face for data points for a boundary faces projection type in an interface specified by user number - SUBROUTINE cmfe_DataProjection_ProjectionDataCandidateFacesSetIntNum100(parentRegionUserNumber,interfaceUserNumber, & - & dataPointsUserNumber,dataProjectionUserNumber,dataPointUserNumbers,candidateElementUserNumber,candidateFaceNormal,err) + SUBROUTINE cmfe_DataProjection_ProjectionDataCandidateFacesSetIntNum100(contextUserNumber,parentRegionUserNumber, & + & interfaceUserNumber,dataPointsUserNumber,dataProjectionUserNumber,dataPointUserNumbers,candidateElementUserNumber, & + & candidateFaceNormal,err) !DLLEXPORT(cmfe_DataProjection_ProjectionDataCandidateFacesSetIntNum100) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Set the data projection candidate faces for data points for a boundary faces projection type in an interface specified by user number - SUBROUTINE cmfe_DataProjection_ProjectionDataCandidateFacesSetIntNum111(parentRegionUserNumber,interfaceUserNumber, & - & dataPointsUserNumber,dataProjectionUserNumber,dataPointUserNumbers,candidateElementUserNumbers,candidateFaceNormals,err) + SUBROUTINE cmfe_DataProjection_ProjectionDataCandidateFacesSetIntNum111(contextUserNumber,parentRegionUserNumber, & + & interfaceUserNumber,dataPointsUserNumber,dataProjectionUserNumber,dataPointUserNumbers,candidateElementUserNumbers, & + & candidateFaceNormals,err) !DLLEXPORT(cmfe_DataProjection_ProjectionDataCandidateFacesSetIntNum111) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Set the data projection candidate lines for a boundary lines projection type in a region specified by user number - SUBROUTINE cmfe_DataProjection_ProjectionCandidateLinesSetRegionNumber(regionUserNumber,dataPointsUserNumber, & - & dataProjectionUserNumber,candidateElementUserNumbers,candidateLineNormals,err) + SUBROUTINE cmfe_DataProjection_ProjectionCandidateLinesSetRegionNumber(contextUserNumber,regionUserNumber, & + & dataPointsUserNumber,dataProjectionUserNumber,candidateElementUserNumbers,candidateLineNormals,err) !DLLEXPORT(cmfe_DataProjection_ProjectionCandidateLinesSetRegionNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Set the data projection candidate lines for a boundary lines projection type in an interface specified by user number - SUBROUTINE cmfe_DataProjection_ProjectionCandidateLinesSetInterfaceNumber(parentRegionUserNumber,interfaceUserNumber, & - & dataPointsUserNumber,dataProjectionUserNumber,candidateElementUserNumbers,candidateLineNormals,err) + SUBROUTINE cmfe_DataProjection_ProjectionCandidateLinesSetInterfaceNumber(contextUserNumber,parentRegionUserNumber, & + & interfaceUserNumber,dataPointsUserNumber,dataProjectionUserNumber,candidateElementUserNumbers,candidateLineNormals,err) !DLLEXPORT(cmfe_DataProjection_ProjectionCandidateLinesSetInterfaceNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Set the data projection candidate line for a data point for a boundary lines projection type in a region specified by user number - SUBROUTINE cmfe_DataProjection_ProjectionDataCandidateLinesSetRegNum000(regionUserNumber,dataPointsUserNumber, & - & dataProjectionUserNumber,dataPointUserNumber,candidateElementUserNumber,candidateLineNormals,err) + SUBROUTINE cmfe_DataProjection_ProjectionDataCandidateLinesSetRegNum000(contextUserNumber,regionUserNumber, & + & dataPointsUserNumber,dataProjectionUserNumber,dataPointUserNumber,candidateElementUserNumber,candidateLineNormals,err) !DLLEXPORT(cmfe_DataProjection_ProjectionDataCandidateLinesSetRegNum000) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Set the data projection candidate lines for a data point for a boundary lines projection type in a region specified by user number - SUBROUTINE cmfe_DataProjection_ProjectionDataCandidateLinesSetRegNum011(regionUserNumber,dataPointsUserNumber, & - & dataProjectionUserNumber,dataPointUserNumber,candidateElementUserNumbers,candidateLineNormals,err) + SUBROUTINE cmfe_DataProjection_ProjectionDataCandidateLinesSetRegNum011(contextUserNumber,regionUserNumber, & + & dataPointsUserNumber,dataProjectionUserNumber,dataPointUserNumber,candidateElementUserNumbers,candidateLineNormals,err) !DLLEXPORT(cmfe_DataProjection_ProjectionDataCandidateLinesSetRegNum011) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Set the data projection candidate line for data points for a boundary lines projection type in a region specified by user number - SUBROUTINE cmfe_DataProjection_ProjectionDataCandidateLinesSetRegNum100(regionUserNumber,dataPointsUserNumber, & - & dataProjectionUserNumber,dataPointUserNumbers,candidateElementUserNumber,candidateLineNormals,err) + SUBROUTINE cmfe_DataProjection_ProjectionDataCandidateLinesSetRegNum100(contextUserNumber,regionUserNumber, & + & dataPointsUserNumber,dataProjectionUserNumber,dataPointUserNumbers,candidateElementUserNumber,candidateLineNormals,err) !DLLEXPORT(cmfe_DataProjection_ProjectionDataCandidateLinesSetRegNum100) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Set the data projection candidate lines for data points for a boundary lines projection type in a region specified by user number - SUBROUTINE cmfe_DataProjection_ProjectionDataCandidateLinesSetRegNum111(regionUserNumber,dataPointsUserNumber, & - & dataProjectionUserNumber,dataPointUserNumbers,candidateElementUserNumbers,candidateLineNormals,err) + SUBROUTINE cmfe_DataProjection_ProjectionDataCandidateLinesSetRegNum111(contextUserNumber,regionUserNumber, & + & dataPointsUserNumber,dataProjectionUserNumber,dataPointUserNumbers,candidateElementUserNumbers, & + & candidateLineNormals,err) !DLLEXPORT(cmfe_DataProjection_ProjectionDataCandidateLinesSetRegNum111) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Set the data projection candidate line for a data point for a boundary lines projection type in an interface specified by user number - SUBROUTINE cmfe_DataProjection_ProjectionDataCandidateLinesSetIntNum000(parentRegionUserNumber,interfaceUserNumber, & - & dataPointsUserNumber,dataProjectionUserNumber,dataPointUserNumber,candidateElementUserNumber,candidateLineNormals,err) + SUBROUTINE cmfe_DataProjection_ProjectionDataCandidateLinesSetIntNum000(contextUserNumber,parentRegionUserNumber, & + & interfaceUserNumber,dataPointsUserNumber,dataProjectionUserNumber,dataPointUserNumber,candidateElementUserNumber, & + & candidateLineNormals,err) !DLLEXPORT(cmfe_DataProjection_ProjectionDataCandidateLinesSetIntNum000) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Set the data projection candidate lines for a data point for a boundary lines projection type in an interface specified by user number - SUBROUTINE cmfe_DataProjection_ProjectionDataCandidateLinesSetIntNum011(parentRegionUserNumber,interfaceUserNumber, & - & dataPointsUserNumber,dataProjectionUserNumber,dataPointUserNumber,candidateElementUserNumbers,candidateLineNormals,err) + SUBROUTINE cmfe_DataProjection_ProjectionDataCandidateLinesSetIntNum011(contextUserNumber,parentRegionUserNumber, & + & interfaceUserNumber,dataPointsUserNumber,dataProjectionUserNumber,dataPointUserNumber,candidateElementUserNumbers, & + & candidateLineNormals,err) !DLLEXPORT(cmfe_DataProjection_ProjectionDataCandidateLinesSetIntNum011) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Set the data projection candidate line for data points for a boundary lines projection type in an interface specified by user number - SUBROUTINE cmfe_DataProjection_ProjectionDataCandidateLinesSetIntNum100(parentRegionUserNumber,interfaceUserNumber, & - & dataPointsUserNumber,dataProjectionUserNumber,dataPointUserNumbers,candidateElementUserNumber,candidateLineNormals,err) + SUBROUTINE cmfe_DataProjection_ProjectionDataCandidateLinesSetIntNum100(contextUserNumber,parentRegionUserNumber, & + & interfaceUserNumber,dataPointsUserNumber,dataProjectionUserNumber,dataPointUserNumbers,candidateElementUserNumber, & + & candidateLineNormals,err) !DLLEXPORT(cmfe_DataProjection_ProjectionDataCandidateLinesSetIntNum100) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Set the data projection candidate lines for data points for a boundary lines projection type in an interface specified by user number - SUBROUTINE cmfe_DataProjection_ProjectionDataCandidateLinesSetIntNum111(parentRegionUserNumber,interfaceUserNumber, & - & dataPointsUserNumber,dataProjectionUserNumber,dataPointUserNumbers,candidateElementUserNumbers,candidateLineNormals,err) + SUBROUTINE cmfe_DataProjection_ProjectionDataCandidateLinesSetIntNum111(contextUserNumber,parentRegionUserNumber, & + & interfaceUserNumber,dataPointsUserNumber,dataProjectionUserNumber,dataPointUserNumbers,candidateElementUserNumbers, & + & candidateLineNormals,err) !DLLEXPORT(cmfe_DataProjection_ProjectionDataCandidateLinesSetIntNum111) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Evaluate a data projection identified by a region user number. - SUBROUTINE cmfe_DataProjection_DataPointsProjectionEvaluateNumber(regionUserNumber,dataPointsUserNumber, & + SUBROUTINE cmfe_DataProjection_DataPointsProjectionEvaluateNumber(contextUserNumber,regionUserNumber,dataPointsUserNumber, & & dataProjectionUserNumber,projectionFieldSetType,err) !DLLEXPORT(cmfe_DataProjection_DataPointsProjectionEvaluateNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the relative tolerance of data projection identified by a region user number. - SUBROUTINE cmfe_DataProjection_MaximumIterationUpdateGetNumber(regionUserNumber,dataPointsUserNumber,dataProjectionUserNumber, & - & maximumIterationUpdate,err) + SUBROUTINE cmfe_DataProjection_MaximumIterationUpdateGetNumber(contextUserNumber,regionUserNumber,dataPointsUserNumber, & + & dataProjectionUserNumber,maximumIterationUpdate,err) !DLLEXPORT(cmfe_DataProjection_MaximumIterationUpdateGetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the relative tolerance of data projection identified by a region user number. - SUBROUTINE cmfe_DataProjection_MaximumIterationUpdateSetNumber(regionUserNumber,dataPointsUserNumber,dataProjectionUserNumber, & - & maximumIterationUpdate,err) + SUBROUTINE cmfe_DataProjection_MaximumIterationUpdateSetNumber(contextUserNumber,regionUserNumber,dataPointsUserNumber, & + & dataProjectionUserNumber,maximumIterationUpdate,err) !DLLEXPORT(cmfe_DataProjection_MaximumIterationUpdateSetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the maximum number of iterations of data projection identified by a region user number. - SUBROUTINE cmfe_DataProjection_MaximumNumberOfIterationsGetNumber(regionUserNumber,dataPointsUserNumber, & + SUBROUTINE cmfe_DataProjection_MaximumNumberOfIterationsGetNumber(contextUserNumber,regionUserNumber,dataPointsUserNumber, & & dataProjectionUserNumber,maximumNumberOfIterations,err) !DLLEXPORT(cmfe_DataProjection_MaximumNumberOfIterationsGetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Outputs the analysis of data projection results for a data projection identified by user number. - SUBROUTINE cmfe_DataProjection_ResultAnalysisOutputNumber(regionUserNumber,dataPointsUserNumber,dataProjectionUserNumber, & - & filename,err) + SUBROUTINE cmfe_DataProjection_ResultAnalysisOutputNumber(contextUserNumber,regionUserNumber,dataPointsUserNumber, & + & dataProjectionUserNumber,filename,err) !DLLEXPORT(cmfe_DataProjection_ResultAnalysisOutputNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the projection distance for a data point in a set of data points identified by user number. - SUBROUTINE cmfe_DataProjection_ResultDistanceGetNumber(regionUserNumber,dataPointsUserNumber,dataProjectionUserNumber, & - & dataPointUserNumber,projectionDistance,err) + SUBROUTINE cmfe_DataProjection_ResultDistanceGetNumber(contextUserNumber,regionUserNumber,dataPointsUserNumber, & + & dataProjectionUserNumber,dataPointUserNumber,projectionDistance,err) !DLLEXPORT(cmfe_DataProjection_ResultDistanceGetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the projection element number for a data point in a set of data points identified by user number. - SUBROUTINE cmfe_DataProjection_ResultElementNumberGetNumber(regionUserNumber,dataPointsUserNumber,dataProjectionUserNumber, & - & dataPointUserNumber,projectionElementNumber,err) + SUBROUTINE cmfe_DataProjection_ResultElementNumberGetNumber(contextUserNumber,regionUserNumber,dataPointsUserNumber, & + & dataProjectionUserNumber,dataPointUserNumber,projectionElementNumber,err) !DLLEXPORT(cmfe_DataProjection_ResultElementNumberGetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the projection element face number for a data point in a set of data points identified by user number. - SUBROUTINE cmfe_DataProjection_ResultElementFaceNumberGetNumber(regionUserNumber,dataPointsUserNumber, & + SUBROUTINE cmfe_DataProjection_ResultElementFaceNumberGetNumber(contextUserNumber,regionUserNumber,dataPointsUserNumber, & & dataProjectionUserNumber,dataPointUserNumber,projectionElementFaceNumber,err) !DLLEXPORT(cmfe_DataProjection_ResultElementFaceNumberGetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the projection element line number for a data point in a set of data points identified by user number. - SUBROUTINE cmfe_DataProjection_ResultElementLineNumberGetNumber(regionUserNumber,dataPointsUserNumber, & + SUBROUTINE cmfe_DataProjection_ResultElementLineNumberGetNumber(contextUserNumber,regionUserNumber,dataPointsUserNumber, & & dataProjectionUserNumber,dataPointUserNumber,projectionElementLineNumber,err) !DLLEXPORT(cmfe_DataProjection_ResultElementLineNumberGetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the projection exit tag for a data point in a set of data points identified by user number. - SUBROUTINE cmfe_DataProjection_ResultExitTagGetNumber(regionUserNumber,dataPointsUserNumber,dataProjectionUserNumber, & - & dataPointUserNumber,projectionExitTag,err) + SUBROUTINE cmfe_DataProjection_ResultExitTagGetNumber(contextUserNumber,regionUserNumber,dataPointsUserNumber, & + & dataProjectionUserNumber,dataPointUserNumber,projectionExitTag,err) !DLLEXPORT(cmfe_DataProjection_ResultExitTagGetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the maximum error for a data projection given by numbers. - SUBROUTINE cmfe_DataProjection_ResultMaximumErrorGetNumber(regionUserNumber,dataPointsUserNumber,dataProjectionUserNumber, & - & maximumDataPointUserNumber,maximumError,err) + SUBROUTINE cmfe_DataProjection_ResultMaximumErrorGetNumber(contextUserNumber,regionUserNumber,dataPointsUserNumber, & + & dataProjectionUserNumber,maximumDataPointUserNumber,maximumError,err) !DLLEXPORT(cmfe_DataProjection_ResultMaximumErrorGetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the minimum error for a data projection given by numbers. - SUBROUTINE cmfe_DataProjection_ResultMinimumErrorGetNumber(regionUserNumber,dataPointsUserNumber,dataProjectionUserNumber, & - & minimumDataPointUserNumber,minimumError,err) + SUBROUTINE cmfe_DataProjection_ResultMinimumErrorGetNumber(contextUserNumber,regionUserNumber,dataPointsUserNumber, & + & dataProjectionUserNumber,minimumDataPointUserNumber,minimumError,err) !DLLEXPORT(cmfe_DataProjection_ResultMinimumErrorGetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the RMS error for a data projection given by numbers. - SUBROUTINE cmfe_DataProjection_ResultRMSErrorGetNumber(regionUserNumber,dataPointsUserNumber,dataProjectionUserNumber, & - & rmsError,err) + SUBROUTINE cmfe_DataProjection_ResultRMSErrorGetNumber(contextUserNumber,regionUserNumber,dataPointsUserNumber, & + & dataProjectionUserNumber,rmsError,err) !DLLEXPORT(cmfe_DataProjection_ResultRmsErrorGetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the projection xi for a data point in a set of data points identified by user number. - SUBROUTINE cmfe_DataProjection_ResultXiGetNumber(regionUserNumber,dataPointsUserNumber,dataProjectionUserNumber, & - & dataPointUserNumber,projectionXi,err) + SUBROUTINE cmfe_DataProjection_ResultXiGetNumber(contextUserNumber,regionUserNumber,dataPointsUserNumber, & + & dataProjectionUserNumber,dataPointUserNumber,projectionXi,err) !DLLEXPORT(cmfe_DataProjection_ResultXiGetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets the projection xi for a data point in a set of data points identified by user number. - SUBROUTINE cmfe_DataProjection_ResultXiSetNumber(regionUserNumber,dataPointsUserNumber,dataProjectionUserNumber, & - & dataPointUserNumber,projectionXi,err) + SUBROUTINE cmfe_DataProjection_ResultXiSetNumber(contextUserNumber,regionUserNumber,dataPointsUserNumber, & + & dataProjectionUserNumber,dataPointUserNumber,projectionXi,err) !DLLEXPORT(cmfe_DataProjection_ResultXiSetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the projection vector for a data point in a set of data points identified by user number. - SUBROUTINE cmfe_DataProjection_ResultProjectionVectorGetNumber(regionUserNumber,dataPointsUserNumber,dataProjectionUserNumber, & - & dataPointUserNumber,projectionVector,err) + SUBROUTINE cmfe_DataProjection_ResultProjectionVectorGetNumber(contextUserNumber,regionUserNumber,dataPointsUserNumber, & + & dataProjectionUserNumber,dataPointUserNumber,projectionVector,err) !DLLEXPORT(cmfe_DataProjection_ResultProjectionVectorGetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the maximum number of iterations of data projection identified by a region user number. - SUBROUTINE cmfe_DataProjection_MaximumNumberOfIterationsSetNumber(regionUserNumber,dataPointsUserNumber, & + SUBROUTINE cmfe_DataProjection_MaximumNumberOfIterationsSetNumber(contextUserNumber,regionUserNumber,dataPointsUserNumber, & & dataProjectionUserNumber,maximumNumberOfIterations,err) !DLLEXPORT(cmfe_DataProjection_MaximumNumberOfIterationsSetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the number of closest elements of data projection identified by a region user number. - SUBROUTINE cmfe_DataProjection_NumberOfClosestElementsGetNumber(regionUserNumber,dataPointsUserNumber,dataProjectionUserNumber, & - & numberOfClosestElements,err) + SUBROUTINE cmfe_DataProjection_NumberOfClosestElementsGetNumber(contextUserNumber,regionUserNumber,dataPointsUserNumber, & + & dataProjectionUserNumber,numberOfClosestElements,err) !DLLEXPORT(cmfe_DataProjection_NumberOfClosestElementsGetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the number of closest elements of data projection identified by a region user number. - SUBROUTINE cmfe_DataProjection_NumberOfClosestElementsSetNumber(regionUserNumber,dataPointsUserNumber,dataProjectionUserNumber, & - & numberOfClosestElements,err) + SUBROUTINE cmfe_DataProjection_NumberOfClosestElementsSetNumber(contextUserNumber,regionUserNumber,dataPointsUserNumber, & + & dataProjectionUserNumber,numberOfClosestElements,err) !DLLEXPORT(cmfe_DataProjection_NumberOfClosestElementsSetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the projection type of data projection identified by a region user number. - SUBROUTINE cmfe_DataProjection_ProjectionTypeGetNumber(regionUserNumber,dataPointsUserNumber,dataProjectionUserNumber, & - & projectionType,err) + SUBROUTINE cmfe_DataProjection_ProjectionTypeGetNumber(contextUserNumber,regionUserNumber,dataPointsUserNumber, & + & dataProjectionUserNumber,projectionType,err) !DLLEXPORT(cmfe_DataProjection_ProjectionTypeGetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the projection type of data projection identified by a region user number. - SUBROUTINE cmfe_DataProjection_ProjectionTypeSetNumber(regionUserNumber,dataPointsUserNumber,dataProjectionUserNumber, & - & projectionType,err) + SUBROUTINE cmfe_DataProjection_ProjectionTypeSetNumber(contextUserNumber,regionUserNumber,dataPointsUserNumber, & + & dataProjectionUserNumber,projectionType,err) !DLLEXPORT(cmfe_DataProjection_ProjectionTypeSetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the relative tolerance of data projection identified by a data projection user number and a region user number. - SUBROUTINE cmfe_DataProjection_RelativeToleranceGetNumber(regionUserNumber,dataPointsUserNumber,dataProjectionUserNumber, & - & relativeTolerance,err) + SUBROUTINE cmfe_DataProjection_RelativeToleranceGetNumber(contextUserNumber,regionUserNumber,dataPointsUserNumber, & + & dataProjectionUserNumber,relativeTolerance,err) !DLLEXPORT(cmfe_DataProjection_RelativeToleranceGetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the relative tolerance of data projection identified by a data projection user number and a region user number. - SUBROUTINE cmfe_DataProjection_RelativeToleranceSetNumber(regionUserNumber,dataPointsUserNumber,dataProjectionUserNumber, & - & relativeTolerance,err) + SUBROUTINE cmfe_DataProjection_RelativeToleranceSetNumber(contextUserNumber,regionUserNumber,dataPointsUserNumber, & + & dataProjectionUserNumber,relativeTolerance,err) !DLLEXPORT(cmfe_DataProjection_RelativeToleranceSetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the starting xi of data projection identified by a data projection user number and region user number. - SUBROUTINE cmfe_DataProjection_StartingXiGetNumber(regionUserNumber,dataPointsUserNumber,dataProjectionUserNumber,startingXi,err) + SUBROUTINE cmfe_DataProjection_StartingXiGetNumber(contextUserNumber,regionUserNumber,dataPointsUserNumber, & + & dataProjectionUserNumber,startingXi,err) !DLLEXPORT(cmfe_DataProjection_StartingXiGetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the starting xi of data projection identified by a region user number. - SUBROUTINE cmfe_DataProjection_StartingXiSetNumber(regionUserNumber,dataPointsUserNumber,dataProjectionUserNumber,startingXi,err) + SUBROUTINE cmfe_DataProjection_StartingXiSetNumber(contextUserNumber,regionUserNumber,dataPointsUserNumber, & + & dataProjectionUserNumber,startingXi,err) !DLLEXPORT(cmfe_DataProjection_StartingXiSetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the starting xi of data projection identified by a region user number. - SUBROUTINE cmfe_DataProjection_ElementSetInterfaceNumber(parentRegionUserNumber,interfaceUserNumber,dataPointsUserNumber, & - & dataProjectionUserNumber,dataPointNumber,elementNumber,err) + SUBROUTINE cmfe_DataProjection_ElementSetInterfaceNumber(contextUserNumber,parentRegionUserNumber,interfaceUserNumber, & + & dataPointsUserNumber,dataProjectionUserNumber,dataPointNumber,elementNumber,err) !DLLEXPORT(cmfe_DataProjection_ElementSetInterfaceNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the starting xi of data projection identified by a region user number. - SUBROUTINE cmfe_DataProjection_ElementSetRegionNumber(regionUserNumber,dataPointsUserNumber,dataProjectionUserNumber, & - & dataPointNumber,elementNumber,err) + SUBROUTINE cmfe_DataProjection_ElementSetRegionNumber(contextUserNumber,regionUserNumber,dataPointsUserNumber, & + & dataProjectionUserNumber,dataPointNumber,elementNumber,err) !DLLEXPORT(cmfe_DataProjection_ElementSetRegionNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Get the character string label of a data projection identified by a region user number. - SUBROUTINE cmfe_DataProjection_LabelGetCInterfaceNumber(parentRegionUserNumber,interfaceUserNumber,dataPointsUserNumber, & - & dataProjectionUserNumber,label,err) + SUBROUTINE cmfe_DataProjection_LabelGetCInterfaceNumber(contextUserNumber,parentRegionUserNumber,interfaceUserNumber, & + & dataPointsUserNumber,dataProjectionUserNumber,label,err) !DLLEXPORT(cmfe_DataProjection_LabelGetCInterfaceNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Get the varying string label of a data projection identified by a region user number. - SUBROUTINE cmfe_DataProjection_LabelGetVSInterfaceNumber(parentRegionUserNumber,interfaceUserNumber,dataPointsUserNumber, & - & dataProjectionUserNumber,label,err) + SUBROUTINE cmfe_DataProjection_LabelGetVSInterfaceNumber(contextUserNumber,parentRegionUserNumber,interfaceUserNumber, & + & dataPointsUserNumber,dataProjectionUserNumber,label,err) !DLLEXPORT(cmfe_DataProjection_LabelGetVSInterfaceNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Get the character string label of a data projection identified by a region user number. - SUBROUTINE cmfe_DataProjection_LabelGetCRegionNumber(regionUserNumber,dataPointsUserNumber,dataProjectionUserNumber,label,err) + SUBROUTINE cmfe_DataProjection_LabelGetCRegionNumber(contextUserNumber,regionUserNumber,dataPointsUserNumber, & + & dataProjectionUserNumber,label,err) !DLLEXPORT(cmfe_DataProjection_LabelGetCRegionNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Get the varying string label of a data projection identified by a region user number. - SUBROUTINE cmfe_DataProjection_LabelGetVSRegionNumber(regionUserNumber,dataPointsUserNumber,dataProjectionUserNumber,label,err) + SUBROUTINE cmfe_DataProjection_LabelGetVSRegionNumber(contextUserNumber,regionUserNumber,dataPointsUserNumber, & + & dataProjectionUserNumber,label,err) !DLLEXPORT(cmfe_DataProjection_LabelGetVSRegionNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the character string label of a data projection identified by a region user number. - SUBROUTINE cmfe_DataProjection_LabelSetCInterfaceNumber(parentRegionUserNumber,interfaceUserNumber,dataPointsUserNumber, & - & dataProjectionUserNumber,label,err) + SUBROUTINE cmfe_DataProjection_LabelSetCInterfaceNumber(contextUserNumber,parentRegionUserNumber,interfaceUserNumber, & + & dataPointsUserNumber,dataProjectionUserNumber,label,err) !DLLEXPORT(cmfe_DataProjection_LabelSetCInterfaceNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the varying string label of a data projection identified by a region user number. - SUBROUTINE cmfe_DataProjection_LabelSetVSInterfaceNumber(parentRegionUserNumber,interfaceUserNumber,dataPointsUserNumber, & - & dataProjectionUserNumber,label,err) + SUBROUTINE cmfe_DataProjection_LabelSetVSInterfaceNumber(contextUserNumber,parentRegionUserNumber,interfaceUserNumber, & + & dataPointsUserNumber,dataProjectionUserNumber,label,err) !DLLEXPORT(cmfe_DataProjection_LabelSetVSInterfaceNumber) !Argument variables - INTEGER(INTG), INTENT(IN) :: parentRegionUserNumber !Sets/changes the character string label of a data projection identified by a region user number. - SUBROUTINE cmfe_DataProjection_LabelSetCRegionNumber(regionUserNumber,dataPointsUserNumber,dataProjectionUserNumber,label,err) + SUBROUTINE cmfe_DataProjection_LabelSetCRegionNumber(contextUserNumber,regionUserNumber,dataPointsUserNumber, & + & dataProjectionUserNumber,label,err) !DLLEXPORT(cmfe_DataProjection_LabelSetCRegionNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the varying string label of a data projection identified by a region user number. - SUBROUTINE cmfe_DataProjection_LabelSetVSRegionNumber(regionUserNumber,dataPointsUserNumber,dataProjectionUserNumber,label,err) + SUBROUTINE cmfe_DataProjection_LabelSetVSRegionNumber(contextUserNumber,regionUserNumber,dataPointsUserNumber, & + & dataProjectionUserNumber,label,err) !DLLEXPORT(cmfe_DataProjection_LabelSetVSRegionNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Destroys equations for equations identified by a user number. - SUBROUTINE cmfe_Equations_DestroyNumber(regionUserNumber,equationsSetUserNumber,err) + SUBROUTINE cmfe_Equations_DestroyNumber(contextUserNumber,regionUserNumber,equationsSetUserNumber,err) !DLLEXPORT(cmfe_Equations_DestroyNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Gets the linearity type for equations identified by a user number. - SUBROUTINE cmfe_Equations_LinearityTypeGetNumber(regionUserNumber,equationsSetUserNumber,linearityType,err) + SUBROUTINE cmfe_Equations_LinearityTypeGetNumber(contextUserNumber,regionUserNumber,equationsSetUserNumber,linearityType,err) !DLLEXPORT(cmfe_Equations_LinearityTypeGetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Gets the lumping type for equations identified by a user number. - SUBROUTINE cmfe_Equations_LumpingTypeGetNumber(regionUserNumber,equationsSetUserNumber,lumpingType,err) + SUBROUTINE cmfe_Equations_LumpingTypeGetNumber(contextUserNumber,regionUserNumber,equationsSetUserNumber,lumpingType,err) !DLLEXPORT(cmfe_Equations_LumpingTypeGetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the lumping type for equations identified by a user number. - SUBROUTINE cmfe_Equations_LumpingTypeSetNumber(regionUserNumber,equationsSetUserNumber,lumpingType,err) + SUBROUTINE cmfe_Equations_LumpingTypeSetNumber(contextUserNumber,regionUserNumber,equationsSetUserNumber,lumpingType,err) !DLLEXPORT(cmfe_Equations_LumpingTypeSetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Gets the output type for equations identified by a user number. - SUBROUTINE cmfe_Equations_OutputTypeGetNumber(regionUserNumber,equationsSetUserNumber,outputType,err) + SUBROUTINE cmfe_Equations_OutputTypeGetNumber(contextUserNumber,regionUserNumber,equationsSetUserNumber,outputType,err) !DLLEXPORT(cmfe_Equations_OutputTypeGetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the output type for equations identified by a user number. - SUBROUTINE cmfe_Equations_OutputTypeSetNumber(regionUserNumber,equationsSetUserNumber,outputType,err) + SUBROUTINE cmfe_Equations_OutputTypeSetNumber(contextUserNumber,regionUserNumber,equationsSetUserNumber,outputType,err) !DLLEXPORT(cmfe_Equations_OutputTypeSetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Gets the sparsity type for equations identified by a user number. - SUBROUTINE cmfe_Equations_SparsityTypeGetNumber(regionUserNumber,equationsSetUserNumber,sparsityType,err) + SUBROUTINE cmfe_Equations_SparsityTypeGetNumber(contextUserNumber,regionUserNumber,equationsSetUserNumber,sparsityType,err) !DLLEXPORT(cmfe_Equations_SparsityTypeGetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the sparsity type for equations identified by a user number. - SUBROUTINE cmfe_Equations_SparsityTypeSetNumber(regionUserNumber,equationsSetUserNumber,sparsityType,err) + SUBROUTINE cmfe_Equations_SparsityTypeSetNumber(contextUserNumber,regionUserNumber,equationsSetUserNumber,sparsityType,err) !DLLEXPORT(cmfe_Equations_SparsityTypeSetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Gets the time dependence type for equations identified by a user number. - SUBROUTINE cmfe_Equations_TimeDependenceTypeGetNumber(regionUserNumber,equationsSetUserNumber,timeDependenceType,err) + SUBROUTINE cmfe_Equations_TimeDependenceTypeGetNumber(contextUserNumber,regionUserNumber,equationsSetUserNumber, & + & timeDependenceType,err) !DLLEXPORT(cmfe_Equations_TimeDependenceTypeGetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Finish the creation of derived variables for an equations set identified by a user number. - SUBROUTINE cmfe_EquationsSet_DerivedCreateFinishNumber(regionUserNumber,equationsSetUserNumber,err) - !DLLEXPORT(cmfe_EquationsSet_DerivedCreateFinishNumber) - - !Argument variables - INTEGER(INTG), INTENT(IN) :: regionUserNumber !Finish the creation of derived variables for an equations set identified by an object. - SUBROUTINE cmfe_EquationsSet_DerivedCreateFinishObj(equationsSet,err) - !DLLEXPORT(cmfe_EquationsSet_DerivedCreateFinishObj) - - !Argument variables - TYPE(cmfe_EquationsSetType), INTENT(INOUT) :: equationsSet !Start the creation of derived variables for an equations set identified by a user number. - SUBROUTINE cmfe_EquationsSet_DerivedCreateStartNumber(regionUserNumber,equationsSetUserNumber,derivedFieldUserNumber,err) - !DLLEXPORT(cmfe_EquationsSet_DerivedCreateStartNumber) - - !Argument variables - INTEGER(INTG), INTENT(IN) :: regionUserNumber !Start the creation of derived variables for an equations set identified by an object. - SUBROUTINE cmfe_EquationsSet_DerivedCreateStartObj(equationsSet,derivedFieldUserNumber,derivedField,err) - !DLLEXPORT(cmfe_EquationsSet_DerivedCreateStartObj) - - !Argument variables - TYPE(cmfe_EquationsSetType), INTENT(INOUT) :: equationsSet !Destroy the derived variables for an equations set identified by a user number. - SUBROUTINE cmfe_EquationsSet_DerivedDestroyNumber(regionUserNumber,equationsSetUserNumber,err) - !DLLEXPORT(cmfe_EquationsSet_DerivedDestroyNumber) - - !Argument variables - INTEGER(INTG), INTENT(IN) :: regionUserNumber !Destroy the derived variables for an equations set identified by an object. - SUBROUTINE cmfe_EquationsSet_DerivedDestroyObj(equationsSet,err) - !DLLEXPORT(cmfe_EquationsSet_DerivedDestroyObj) - - !Argument variables - TYPE(cmfe_EquationsSetType), INTENT(INOUT) :: equationsSet !Calculates a derived field value for the equations set and stores the result in the derived field previously set up - SUBROUTINE cmfe_EquationsSet_DerivedVariableCalculateNumber(regionUserNumber,equationsSetUserNumber,derivedTensorType,err) - !DLLEXPORT(cmfe_EquationsSet_DerivedVariableCalculateNumber) - - !Argument variables - INTEGER(INTG), INTENT(IN) :: regionUserNumber !Calculates a derived field value for the equations set and stores the result in the derived field previously set up - SUBROUTINE cmfe_EquationsSet_DerivedVariableCalculateObj(equationsSet,derivedTensorType,err) - !DLLEXPORT(cmfe_EquationsSet_DerivedVariableCalculateObj) - - !Argument variables - TYPE(cmfe_EquationsSetType), INTENT(IN) :: equationsSet !Sets the field variable type of the derived field to be used to store a derived variable - SUBROUTINE cmfe_EquationsSet_DerivedVariableSetNumber(regionUserNumber,equationsSetUserNumber,derivedTensorType, & - & fieldVariableType,err) - !DLLEXPORT(cmfe_EquationsSet_DerivedVariableSetNumber) - - !Argument variables - INTEGER(INTG), INTENT(IN) :: regionUserNumber !Sets the field variable type of the derived field to be used to store a derived variable - SUBROUTINE cmfe_EquationsSet_DerivedVariableSetObj(equationsSet,derivedTensorType,fieldVariableType,err) - !DLLEXPORT(cmfe_EquationsSet_DerivedVariableSetObj) - - !Argument variables - TYPE(cmfe_EquationsSetType), INTENT(IN) :: equationsSet !Finish the creation of a analytic solution for an equations set identified by a user number. - SUBROUTINE cmfe_EquationsSet_AnalyticCreateFinishNumber(regionUserNumber,equationsSetUserNumber,err) + SUBROUTINE cmfe_EquationsSet_AnalyticCreateFinishNumber(contextUserNumber,regionUserNumber,equationsSetUserNumber,err) !DLLEXPORT(cmfe_EquationsSet_AnalyticCreateFinishNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Start the creation of a analytic solution for an equations set identified by a user number. - SUBROUTINE cmfe_EquationsSet_AnalyticCreateStartNumber(regionUserNumber,equationsSetUserNumber,analyticFunctionType, & - & analyticFieldUserNumber,err) + SUBROUTINE cmfe_EquationsSet_AnalyticCreateStartNumber(contextUserNumber,regionUserNumber,equationsSetUserNumber, & + & analyticFunctionType,analyticFieldUserNumber,err) !DLLEXPORT(cmfe_EquationsSet_AnalyticCreateStartNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Destroy the analytic solution for an equations set identified by a user number. - SUBROUTINE cmfe_EquationsSet_AnalyticDestroyNumber(regionUserNumber,equationsSetUserNumber,err) + SUBROUTINE cmfe_EquationsSet_AnalyticDestroyNumber(contextUserNumber,regionUserNumber,equationsSetUserNumber,err) !DLLEXPORT(cmfe_EquationsSet_AnalyticDestroyNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Evaluates the current analytic solution for an equations set identified by a user number. - SUBROUTINE cmfe_EquationsSet_AnalyticEvaluateNumber(regionUserNumber,equationsSetUserNumber,err) + SUBROUTINE cmfe_EquationsSet_AnalyticEvaluateNumber(contextUserNumber,regionUserNumber,equationsSetUserNumber,err) !DLLEXPORT(cmfe_EquationsSet_AnalyticEvaluateNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the analytic time for an equations set identified by a user number. - SUBROUTINE cmfe_EquationsSet_AnalyticTimeGetNumber(regionUserNumber,equationsSetUserNumber,time,err) + SUBROUTINE cmfe_EquationsSet_AnalyticTimeGetNumber(contextUserNumber,regionUserNumber,equationsSetUserNumber,time,err) !DLLEXPORT(cmfe_EquationsSet_AnalyticTimeGetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the analytic time for an equations set identified by a user number. - SUBROUTINE cmfe_EquationsSet_AnalyticTimeSetNumber(regionUserNumber,equationsSetUserNumber,time,err) + SUBROUTINE cmfe_EquationsSet_AnalyticTimeSetNumber(contextUserNumber,regionUserNumber,equationsSetUserNumber,time,err) !DLLEXPORT(cmfe_EquationsSet_AnalyticTimeSetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets the analytic problem user parameter - SUBROUTINE cmfe_EquationsSet_AnalyticUserParamSetNumber(regionUserNumber,equationsSetUserNumber,paramIdx,param,err) + SUBROUTINE cmfe_EquationsSet_AnalyticUserParamSetNumber(contextUserNumber,regionUserNumber,equationsSetUserNumber, & + & paramIdx,param,err) !DLLEXPORT(cmfe_EquationsSet_AnalyticUserParamSetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets the analytic problem user parameter - SUBROUTINE cmfe_EquationsSet_AnalyticUserParamGetNumber(regionUserNumber,equationsSetUserNumber,paramIdx,param,err) + SUBROUTINE cmfe_EquationsSet_AnalyticUserParamGetNumber(contextUserNumber,regionUserNumber,equationsSetUserNumber, & + & paramIdx,param,err) !DLLEXPORT(cmfe_EquationsSet_AnalyticUserParamGetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Finish the creation of an equations set identified by a user number. - SUBROUTINE cmfe_EquationsSet_CreateFinishNumber(regionUserNumber,equationsSetUserNumber,err) + SUBROUTINE cmfe_EquationsSet_CreateFinishNumber(contextUserNumber,regionUserNumber,equationsSetUserNumber,err) !DLLEXPORT(cmfe_EquationsSet_CreateFinishNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Start the creation of an equations set identified by a user number. - SUBROUTINE cmfe_EquationsSet_CreateStartNumber(equationsSetUserNumber,regionUserNumber,geomFibreFieldUserNumber,& - & equationsSetSpecification,equationsSetFieldUserNumber,err) + SUBROUTINE cmfe_EquationsSet_CreateStartNumber(equationsSetUserNumber,contextUserNumber,regionUserNumber,& + & geomFibreFieldUserNumber,equationsSetSpecification,equationsSetFieldUserNumber,err) !DLLEXPORT(cmfe_EquationsSet_CreateStartNumber) !Argument variables INTEGER(INTG), INTENT(IN) :: equationsSetUserNumber !Finish the creation of derived variables for an equations set identified by a user number. + SUBROUTINE cmfe_EquationsSet_DerivedCreateFinishNumber(contextUserNumber,regionUserNumber,equationsSetUserNumber,err) + !DLLEXPORT(cmfe_EquationsSet_DerivedCreateFinishNumber) + + !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Finish the creation of derived variables for an equations set identified by an object. + SUBROUTINE cmfe_EquationsSet_DerivedCreateFinishObj(equationsSet,err) + !DLLEXPORT(cmfe_EquationsSet_DerivedCreateFinishObj) + + !Argument variables + TYPE(cmfe_EquationsSetType), INTENT(INOUT) :: equationsSet !Start the creation of derived variables for an equations set identified by a user number. + SUBROUTINE cmfe_EquationsSet_DerivedCreateStartNumber(contextUserNumber,regionUserNumber,equationsSetUserNumber, & + & derivedFieldUserNumber,err) + !DLLEXPORT(cmfe_EquationsSet_DerivedCreateStartNumber) + + !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Start the creation of derived variables for an equations set identified by an object. + SUBROUTINE cmfe_EquationsSet_DerivedCreateStartObj(equationsSet,derivedFieldUserNumber,derivedField,err) + !DLLEXPORT(cmfe_EquationsSet_DerivedCreateStartObj) + + !Argument variables + TYPE(cmfe_EquationsSetType), INTENT(INOUT) :: equationsSet !Destroy the derived variables for an equations set identified by a user number. + SUBROUTINE cmfe_EquationsSet_DerivedDestroyNumber(contextUserNumber,regionUserNumber,equationsSetUserNumber,err) + !DLLEXPORT(cmfe_EquationsSet_DerivedDestroyNumber) + + !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Destroy the derived variables for an equations set identified by an object. + SUBROUTINE cmfe_EquationsSet_DerivedDestroyObj(equationsSet,err) + !DLLEXPORT(cmfe_EquationsSet_DerivedDestroyObj) + + !Argument variables + TYPE(cmfe_EquationsSetType), INTENT(INOUT) :: equationsSet !Calculates a derived field value for the equations set and stores the result in the derived field previously set up + SUBROUTINE cmfe_EquationsSet_DerivedVariableCalculateNumber(contextUserNumber,regionUserNumber,equationsSetUserNumber, & + & derivedTensorType,err) + !DLLEXPORT(cmfe_EquationsSet_DerivedVariableCalculateNumber) + + !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Calculates a derived field value for the equations set and stores the result in the derived field previously set up + SUBROUTINE cmfe_EquationsSet_DerivedVariableCalculateObj(equationsSet,derivedTensorType,err) + !DLLEXPORT(cmfe_EquationsSet_DerivedVariableCalculateObj) + + !Argument variables + TYPE(cmfe_EquationsSetType), INTENT(IN) :: equationsSet !Sets the field variable type of the derived field to be used to store a derived variable + SUBROUTINE cmfe_EquationsSet_DerivedVariableSetNumber(contextUserNumber,regionUserNumber,equationsSetUserNumber, & + & derivedTensorType,fieldVariableType,err) + !DLLEXPORT(cmfe_EquationsSet_DerivedVariableSetNumber) + + !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets the field variable type of the derived field to be used to store a derived variable + SUBROUTINE cmfe_EquationsSet_DerivedVariableSetObj(equationsSet,derivedTensorType,fieldVariableType,err) + !DLLEXPORT(cmfe_EquationsSet_DerivedVariableSetObj) + + !Argument variables + TYPE(cmfe_EquationsSetType), INTENT(IN) :: equationsSet !Destroy an equations set identified by a user number. - SUBROUTINE cmfe_EquationsSet_DestroyNumber(regionUserNumber,equationsSetUserNumber,err) + SUBROUTINE cmfe_EquationsSet_DestroyNumber(contextUserNumber,regionUserNumber,equationsSetUserNumber,err) !DLLEXPORT(cmfe_EquationsSet_DestroyNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Finish the creation of dependent variables for an equations set identified by a user number. - SUBROUTINE cmfe_EquationsSet_DependentCreateFinishNumber(regionUserNumber,equationsSetUserNumber,err) + SUBROUTINE cmfe_EquationsSet_DependentCreateFinishNumber(contextUserNumber,regionUserNumber,equationsSetUserNumber,err) !DLLEXPORT(cmfe_EquationsSet_DependentCreateFinishNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Start the creation of dependent variables for an equations set identified by a user number. - SUBROUTINE cmfe_EquationsSet_DependentCreateStartNumber(regionUserNumber,equationsSetUserNumber,dependentFieldUserNumber,err) + SUBROUTINE cmfe_EquationsSet_DependentCreateStartNumber(contextUserNumber,regionUserNumber,equationsSetUserNumber, & + & dependentFieldUserNumber,err) !DLLEXPORT(cmfe_EquationsSet_DependentCreateStartNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Destroy the dependent variables for an equations set identified by a user number. - SUBROUTINE cmfe_EquationsSet_DependentDestroyNumber(regionUserNumber,equationsSetUserNumber,err) + SUBROUTINE cmfe_EquationsSet_DependentDestroyNumber(contextUserNumber,regionUserNumber,equationsSetUserNumber,err) !DLLEXPORT(cmfe_EquationsSet_DependentDestroyNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Finish the creation of equations for an equations set identified by a user number. - SUBROUTINE cmfe_EquationsSet_EquationsCreateFinishNumber(regionUserNumber,equationsSetUserNumber,err) + SUBROUTINE cmfe_EquationsSet_EquationsCreateFinishNumber(contextUserNumber,regionUserNumber,equationsSetUserNumber,err) !DLLEXPORT(cmfe_EquationsSet_EquationsCreateFinishNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Start the creation of equations for an equations set identified by a user number. - SUBROUTINE cmfe_EquationsSet_EquationsCreateStartNumber(regionUserNumber,equationsSetUserNumber,err) + SUBROUTINE cmfe_EquationsSet_EquationsCreateStartNumber(contextUserNumber,regionUserNumber,equationsSetUserNumber,err) !DLLEXPORT(cmfe_EquationsSet_EquationsCreateStartNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Destroy the equations for an equations set identified by a user number. - SUBROUTINE cmfe_EquationsSet_EquationsDestroyNumber(regionUserNumber,equationsSetUserNumber,err) + SUBROUTINE cmfe_EquationsSet_EquationsDestroyNumber(contextUserNumber,regionUserNumber,equationsSetUserNumber,err) !DLLEXPORT(cmfe_EquationsSet_EquationsDestroyNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Finish the creation of independent variables for an equations set identified by a user number. - SUBROUTINE cmfe_EquationsSet_IndependentCreateFinishNumber(regionUserNumber,equationsSetUserNumber,err) + SUBROUTINE cmfe_EquationsSet_IndependentCreateFinishNumber(contextUserNumber,regionUserNumber,equationsSetUserNumber,err) !DLLEXPORT(cmfe_EquationsSet_IndependentCreateFinishNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Start the creation of independent variables for an equations set identified by a user number. - SUBROUTINE cmfe_EquationsSet_IndependentCreateStartNumber(regionUserNumber,equationsSetUserNumber,independentFieldUserNumber,err) + SUBROUTINE cmfe_EquationsSet_IndependentCreateStartNumber(contextUserNumber,regionUserNumber,equationsSetUserNumber, & + & independentFieldUserNumber,err) !DLLEXPORT(cmfe_EquationsSet_IndependentCreateStartNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Destroy the independent variables for an equations set identified by a user number. - SUBROUTINE cmfe_EquationsSet_IndependentDestroyNumber(regionUserNumber,equationsSetUserNumber,err) + SUBROUTINE cmfe_EquationsSet_IndependentDestroyNumber(contextUserNumber,regionUserNumber,equationsSetUserNumber,err) !DLLEXPORT(cmfe_EquationsSet_IndependentDestroyNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the character string label for an equations set identified by a user number. - SUBROUTINE cmfe_EquationsSet_LabelGetCNumber(regionUserNumber,equationsSetUserNumber,label,err) + SUBROUTINE cmfe_EquationsSet_LabelGetCNumber(contextUserNumber,regionUserNumber,equationsSetUserNumber,label,err) !DLLEXPORT(cmfe_EquationsSet_LabelGetCNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the varying string label for an equations set identified by a user number. - SUBROUTINE cmfe_EquationsSet_LabelGetVSNumber(regionUserNumber,equationsSetUserNumber,label,err) + SUBROUTINE cmfe_EquationsSet_LabelGetVSNumber(contextUserNumber,regionUserNumber,equationsSetUserNumber,label,err) !DLLEXPORT(cmfe_EquationsSet_LabelGetVSNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the character string label for an equations set identified by a user number. - SUBROUTINE cmfe_EquationsSet_LabelSetCNumber(regionUserNumber,equationsSetUserNumber,label,err) + SUBROUTINE cmfe_EquationsSet_LabelSetCNumber(contextUserNumber,regionUserNumber,equationsSetUserNumber,label,err) !DLLEXPORT(cmfe_EquationsSet_LabelSetCNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the varying string label for an equations set identified by a user number. - SUBROUTINE cmfe_EquationsSet_LabelSetVSNumber(regionUserNumber,equationsSetUserNumber,label,err) + SUBROUTINE cmfe_EquationsSet_LabelSetVSNumber(contextUserNumber,regionUserNumber,equationsSetUserNumber,label,err) !DLLEXPORT(cmfe_EquationsSet_LabelSetVSNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Finish the creation of materials for an equations set identified by a user number. - SUBROUTINE cmfe_EquationsSet_MaterialsCreateFinishNumber(regionUserNumber,equationsSetUserNumber,err) + SUBROUTINE cmfe_EquationsSet_MaterialsCreateFinishNumber(contextUserNumber,regionUserNumber,equationsSetUserNumber,err) !DLLEXPORT(cmfe_EquationsSet_MaterialsCreateFinishNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Start the creation of materials for an equations set identified by a user number. - SUBROUTINE cmfe_EquationsSet_MaterialsCreateStartNumber(regionUserNumber,equationsSetUserNumber,materialsFieldUserNumber,err) + SUBROUTINE cmfe_EquationsSet_MaterialsCreateStartNumber(contextUserNumber,regionUserNumber,equationsSetUserNumber, & + & materialsFieldUserNumber,err) !DLLEXPORT(cmfe_EquationsSet_MaterialsCreateStartNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Destroy the materials for an equations set identified by a user number. - SUBROUTINE cmfe_EquationsSet_MaterialsDestroyNumber(regionUserNumber,equationsSetUserNumber,err) + SUBROUTINE cmfe_EquationsSet_MaterialsDestroyNumber(contextUserNumber,regionUserNumber,equationsSetUserNumber,err) !DLLEXPORT(cmfe_EquationsSet_MaterialsDestroyNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Gets the output type an equations set identified by a user number. - SUBROUTINE cmfe_EquationsSet_OutputTypeGetNumber(regionUserNumber,equationsSetUserNumber,outputType,err) + SUBROUTINE cmfe_EquationsSet_OutputTypeGetNumber(contextUserNumber,regionUserNumber,equationsSetUserNumber,outputType,err) !DLLEXPORT(cmfe_EquationsSet_OutputTypeGetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the output type for an equations set identified by a user number. - SUBROUTINE cmfe_EquationsSet_OutputTypeSetNumber(regionUserNumber,equationsSetUserNumber,outputType,err) + SUBROUTINE cmfe_EquationsSet_OutputTypeSetNumber(contextUserNumber,regionUserNumber,equationsSetUserNumber,outputType,err) !DLLEXPORT(cmfe_EquationsSet_OutputTypeSetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the solution method for an equations set identified by a user number. - SUBROUTINE cmfe_EquationsSet_SolutionMethodGetNumber(regionUserNumber,equationsSetUserNumber,solutionMethod,err) + SUBROUTINE cmfe_EquationsSet_SolutionMethodGetNumber(contextUserNumber,regionUserNumber,equationsSetUserNumber, & + & solutionMethod,err) !DLLEXPORT(cmfe_EquationsSet_SolutionMethodGetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the solution method for an equations set identified by a user number. - SUBROUTINE cmfe_EquationsSet_SolutionMethodSetNumber(regionUserNumber,equationsSetUserNumber,solutionMethod,err) + SUBROUTINE cmfe_EquationsSet_SolutionMethodSetNumber(contextUserNumber,regionUserNumber,equationsSetUserNumber, & + & solutionMethod,err) !DLLEXPORT(cmfe_EquationsSet_SolutionMethodSetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Finish the creation of a source for an equations set identified by a user number. - SUBROUTINE cmfe_EquationsSet_SourceCreateFinishNumber(regionUserNumber,equationsSetUserNumber,err) + SUBROUTINE cmfe_EquationsSet_SourceCreateFinishNumber(contextUserNumber,regionUserNumber,equationsSetUserNumber,err) !DLLEXPORT(cmfe_EquationsSet_SourceCreateFinishNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Start the creation of a source for an equations set identified by a user number. - SUBROUTINE cmfe_EquationsSet_SourceCreateStartNumber(regionUserNumber,equationsSetUserNumber,sourceFieldUserNumber,err) + SUBROUTINE cmfe_EquationsSet_SourceCreateStartNumber(contextUserNumber,regionUserNumber,equationsSetUserNumber, & + & sourceFieldUserNumber,err) !DLLEXPORT(cmfe_EquationsSet_SourceCreateStartNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Destroy the source for an equations set identified by a user number. - SUBROUTINE cmfe_EquationsSet_SourceDestroyNumber(regionUserNumber,equationsSetUserNumber,err) + SUBROUTINE cmfe_EquationsSet_SourceDestroyNumber(contextUserNumber,regionUserNumber,equationsSetUserNumber,err) !DLLEXPORT(cmfe_EquationsSet_SourceDestroyNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the equations set specification array for an equations set identified by a user number. - SUBROUTINE cmfe_EquationsSet_SpecificationGetNumber(regionUserNumber,equationsSetUserNumber,equationsSetSpecification,err) + SUBROUTINE cmfe_EquationsSet_SpecificationGetNumber(contextUserNumber,regionUserNumber,equationsSetUserNumber, & + & equationsSetSpecification,err) !DLLEXPORT(cmfe_EquationsSet_SpecificationGetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the size of the equations set specification array for an equations set identified by a user number. - SUBROUTINE cmfe_EquationsSet_SpecificationSizeGetNumber(regionUserNumber,equationsSetUserNumber,specificationSize,err) + SUBROUTINE cmfe_EquationsSet_SpecificationSizeGetNumber(contextUserNumber,regionUserNumber,equationsSetUserNumber, & + & specificationSize,err) !DLLEXPORT(cmfe_EquationsSet_SpecificationSizeGetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Evaluate a tensor at a given element Gauss point, for an equations set identified by a user number. - SUBROUTINE cmfe_EquationsSet_TensorInterpolateGaussPointNumber(regionUserNumber,equationsSetUserNumber,derivedTensorType, & - & gaussPointNumber,userElementNumber,values,err) + SUBROUTINE cmfe_EquationsSet_TensorInterpolateGaussPointNumber(contextUserNumber,regionUserNumber,equationsSetUserNumber, & + & derivedTensorType,gaussPointNumber,userElementNumber,values,err) !DLLEXPORT(cmfe_EquationsSet_TensorInterpolateGaussPointNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Evaluate a tensor at a given element xi location, for an equations set identified by a user number. - SUBROUTINE cmfe_EquationsSet_TensorInterpolateXiNumber(regionUserNumber,equationsSetUserNumber,derivedTensorType, & - & userElementNumber,xi,values,err) + SUBROUTINE cmfe_EquationsSet_TensorInterpolateXiNumber(contextUserNumber,regionUserNumber,equationsSetUserNumber, & + & derivedTensorType,userElementNumber,xi,values,err) !DLLEXPORT(cmfe_EquationsSet_TensorInterpolateXiNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the equations set current times for an equations set identified by a user number. - SUBROUTINE cmfe_EquationsSet_TimesGetNumber(regionUserNumber,equationsSetUserNumber,currentTime,deltaTime,err) + SUBROUTINE cmfe_EquationsSet_TimesGetNumber(contextUserNumber,regionUserNumber,equationsSetUserNumber,currentTime,deltaTime,err) !DLLEXPORT(cmfe_EquationsSet_TimesGetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the equations set current times for an equations set identified by a user number. - SUBROUTINE cmfe_EquationsSet_TimesSetNumber(regionUserNumber,equationsSetUserNumber,currentTime,deltaTime,err) + SUBROUTINE cmfe_EquationsSet_TimesSetNumber(contextUserNumber,regionUserNumber,equationsSetUserNumber,currentTime,deltaTime,err) !DLLEXPORT(cmfe_EquationsSet_TimesSetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the interpolation type for a field variable component for a field identified by a user number. - SUBROUTINE cmfe_Field_ComponentInterpolationGetNumber(regionUserNumber,fieldUserNumber,variableType,componentNumber, & - & interpolationType,err) + SUBROUTINE cmfe_Field_ComponentInterpolationGetNumber(contextUserNumber,regionUserNumber,fieldUserNumber,variableType, & + & componentNumber,interpolationType,err) !DLLEXPORT(cmfe_Field_ComponentInterpolationGetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the interpolation type for a field variable component for a field identified by a user number. - SUBROUTINE cmfe_Field_ComponentInterpolationSetNumber(regionUserNumber,fieldUserNumber,variableType,componentNumber, & - & interpolationType,err) + SUBROUTINE cmfe_Field_ComponentInterpolationSetNumber(contextUserNumber,regionUserNumber,fieldUserNumber,variableType, & + & componentNumber,interpolationType,err) !DLLEXPORT(cmfe_Field_ComponentInterpolationSetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the character string label for a field variable component for a field identified by a user number. - SUBROUTINE cmfe_Field_ComponentLabelGetCNumber(regionUserNumber,fieldUserNumber,variableType,componentNumber,label,err) + SUBROUTINE cmfe_Field_ComponentLabelGetCNumber(contextUserNumber,regionUserNumber,fieldUserNumber,variableType, & + & componentNumber,label,err) !DLLEXPORT(cmfe_Field_ComponentLabelGetCNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the varying string label for a field variable component for a field identified by a user number. - SUBROUTINE cmfe_Field_ComponentLabelGetVSNumber(regionUserNumber,fieldUserNumber,variableType,componentNumber,label,err) + SUBROUTINE cmfe_Field_ComponentLabelGetVSNumber(contextUserNumber,regionUserNumber,fieldUserNumber,variableType, & + & componentNumber,label,err) !DLLEXPORT(cmfe_Field_ComponentLabelGetVSNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the character string label for a field variable component for a field identified by a user number. - SUBROUTINE cmfe_Field_ComponentLabelSetCNumber(regionUserNumber,fieldUserNumber,variableType,componentNumber,label,err) + SUBROUTINE cmfe_Field_ComponentLabelSetCNumber(contextUserNumber,regionUserNumber,fieldUserNumber,variableType, & + & componentNumber,label,err) !DLLEXPORT(cmfe_Field_ComponentLabelSetCNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the varying string label for a field variable component for a field identified by a user number. - SUBROUTINE cmfe_Field_ComponentLabelSetVSNumber(regionUserNumber,fieldUserNumber,variableType,componentNumber,label,err) + SUBROUTINE cmfe_Field_ComponentLabelSetVSNumber(contextUserNumber,regionUserNumber,fieldUserNumber,variableType, & + & componentNumber,label,err) !DLLEXPORT(cmfe_Field_ComponentLabelSetVSNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the mesh component number for a field variable component for a field identified by a user number. - SUBROUTINE cmfe_Field_ComponentMeshComponentGetNumber(regionUserNumber,fieldUserNumber,variableType,componentNumber, & - & meshComponent,err) + SUBROUTINE cmfe_Field_ComponentMeshComponentGetNumber(contextUserNumber,regionUserNumber,fieldUserNumber,variableType, & + & componentNumber,meshComponent,err) !DLLEXPORT(cmfe_Field_ComponentMeshComponentGetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the mesh component number for a field variable component for a field identified by a user number. - SUBROUTINE cmfe_Field_ComponentMeshComponentSetNumber(regionUserNumber,fieldUserNumber,variableType,componentNumber, & - & meshComponent,err) + SUBROUTINE cmfe_Field_ComponentMeshComponentSetNumber(contextUserNumber,regionUserNumber,fieldUserNumber,variableType, & + & componentNumber,meshComponent,err) !DLLEXPORT(cmfe_Field_ComponentMeshComponentSetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Initialises the values of parameter set of a field variable component to an integer constant value for a field identified by a user number. - SUBROUTINE cmfe_Field_ComponentValuesInitialiseIntgNumber(regionUserNumber,fieldUserNumber,variableType,fieldSetType, & - & componentNumber,value,err) + SUBROUTINE cmfe_Field_ComponentValuesInitialiseIntgNumber(contextUserNumber,regionUserNumber,fieldUserNumber,variableType, & + & fieldSetType,componentNumber,value,err) !DLLEXPORT(cmfe_Field_ComponentValuesInitialiseIntgNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Initialises the values of parameter set of a field variable component to a single precision constant value for a field identified by a user number. - SUBROUTINE cmfe_Field_ComponentValuesInitialiseSPNumber(regionUserNumber,fieldUserNumber,variableType,fieldSetType, & - & componentNumber,value,err) + SUBROUTINE cmfe_Field_ComponentValuesInitialiseSPNumber(contextUserNumber,regionUserNumber,fieldUserNumber,variableType, & + & fieldSetType,componentNumber,value,err) !DLLEXPORT(cmfe_Field_ComponentValuesInitialiseSPNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Initialises the values of parameter set of a field variable component to a double precision constant value for a field identified by a user number. - SUBROUTINE cmfe_Field_ComponentValuesInitialiseDPNumber(regionUserNumber,fieldUserNumber,variableType,fieldSetType, & - & componentNumber,value,err) + SUBROUTINE cmfe_Field_ComponentValuesInitialiseDPNumber(contextUserNumber,regionUserNumber,fieldUserNumber,variableType, & + & fieldSetType,componentNumber,value,err) !DLLEXPORT(cmfe_Field_ComponentValuesInitialiseDPNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Initialises the values of parameter set of a field variable component to a logical constant value for a field identified by a user number. - SUBROUTINE cmfe_Field_ComponentValuesInitialiseLNumber(regionUserNumber,fieldUserNumber,variableType,fieldSetType, & - & componentNumber,value,err) + SUBROUTINE cmfe_Field_ComponentValuesInitialiseLNumber(contextUserNumber,regionUserNumber,fieldUserNumber,variableType, & + & fieldSetType,componentNumber,value,err) !DLLEXPORT(cmfe_Field_ComponentValuesInitialiseLNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the data type for a field variable for a field identified by a user number. - SUBROUTINE cmfe_Field_DataTypeGetNumber(regionUserNumber,fieldUserNumber,variableType,dataType,err) + SUBROUTINE cmfe_Field_DataTypeGetNumber(contextUserNumber,regionUserNumber,fieldUserNumber,variableType,dataType,err) !DLLEXPORT(cmfe_Field_DataTypeGetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the data type for a field variable for a field identified by a user number. - SUBROUTINE cmfe_Field_DataTypeSetNumber(regionUserNumber,fieldUserNumber,variableType,dataType,err) + SUBROUTINE cmfe_Field_DataTypeSetNumber(contextUserNumber,regionUserNumber,fieldUserNumber,variableType,dataType,err) !DLLEXPORT(cmfe_Field_DataTypeSetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the DOF order type for a field variable for a field identified by a user number. - SUBROUTINE cmfe_Field_DOFOrderTypeGetNumber(regionUserNumber,fieldUserNumber,variableType,DOFOrderType,err) + SUBROUTINE cmfe_Field_DOFOrderTypeGetNumber(contextUserNumber,regionUserNumber,fieldUserNumber,variableType,DOFOrderType,err) !DLLEXPORT(cmfe_Field_DOFOrderTypeGetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the DOF order type for a field variable for a field identified by a user number. - SUBROUTINE cmfe_Field_DOFOrderTypeSetNumber(regionUserNumber,fieldUserNumber,variableType,DOFOrderType,err) + SUBROUTINE cmfe_Field_DOFOrderTypeSetNumber(contextUserNumber,regionUserNumber,fieldUserNumber,variableType,DOFOrderType,err) !DLLEXPORT(cmfe_Field_DOFOrderTypeSetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Finishes the creation of a field identified by a user number. - SUBROUTINE cmfe_Field_CreateFinishNumber(regionUserNumber,fieldUserNumber,err) + SUBROUTINE cmfe_Field_CreateFinishNumber(contextUserNumber,regionUserNumber,fieldUserNumber,err) !DLLEXPORT(cmfe_Field_CreateFinishNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Starts the creation of a field identified by a user number. - SUBROUTINE cmfe_Field_CreateStartNumber(fieldUserNumber,regionUserNumber,err) + SUBROUTINE cmfe_Field_CreateStartNumber(fieldUserNumber,contextUserNumber,regionUserNumber,err) !DLLEXPORT(cmfe_Field_CreateStartNumber) !Argument variables INTEGER(INTG), INTENT(IN) :: fieldUserNumber !Returns the dependent type for a field identified by a user number. - SUBROUTINE cmfe_Field_DependentTypeGetNumber(regionUserNumber,fieldUserNumber,dependentType,err) + SUBROUTINE cmfe_Field_DependentTypeGetNumber(contextUserNumber,regionUserNumber,fieldUserNumber,dependentType,err) !DLLEXPORT(cmfe_Field_DependentTypeGetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the dependent type for a field identified by a user number. - SUBROUTINE cmfe_Field_DependentTypeSetNumber(regionUserNumber,fieldUserNumber,dependentType,err) + SUBROUTINE cmfe_Field_DependentTypeSetNumber(contextUserNumber,regionUserNumber,fieldUserNumber,dependentType,err) !DLLEXPORT(cmfe_Field_DependentTypeSetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Destroys a field identified by a user number. - SUBROUTINE cmfe_Field_DestroyNumber(regionUserNumber,fieldUserNumber,err) + SUBROUTINE cmfe_Field_DestroyNumber(contextUserNumber,regionUserNumber,fieldUserNumber,err) !DLLEXPORT(cmfe_Field_DestroyNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the dimension for a field identified by a user number. - SUBROUTINE cmfe_Field_DimensionGetNumber(regionUserNumber,fieldUserNumber,variableType,dimension,err) + SUBROUTINE cmfe_Field_DimensionGetNumber(contextUserNumber,regionUserNumber,fieldUserNumber,variableType,dimension,err) !DLLEXPORT(cmfe_Field_DimensionGetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the dimension for a field identified by a user number. - SUBROUTINE cmfe_Field_DimensionSetNumber(regionUserNumber,fieldUserNumber,variableType,dimension,err) + SUBROUTINE cmfe_Field_DimensionSetNumber(contextUserNumber,regionUserNumber,fieldUserNumber,variableType,DIMENSION,err) !DLLEXPORT(cmfe_Field_DimensionSetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the geometric field for a field identified by a user number. - SUBROUTINE cmfe_Field_GeometricFieldGetNumber(regionUserNumber,fieldUserNumber,geometricFieldUserNumber,err) + SUBROUTINE cmfe_Field_GeometricFieldGetNumber(contextUserNumber,regionUserNumber,fieldUserNumber,geometricFieldUserNumber,err) !DLLEXPORT(cmfe_Field_GeometricFieldGetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the geometric field for a field identified by a user number. - SUBROUTINE cmfe_Field_GeometricFieldSetNumber(regionUserNumber,fieldUserNumber,geometricFieldUserNumber,err) + SUBROUTINE cmfe_Field_GeometricFieldSetNumber(contextUserNumber,regionUserNumber,fieldUserNumber,geometricFieldUserNumber,err) !DLLEXPORT(cmfe_Field_GeometricFieldSetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Gets the line length between nodes of a geometric field for a given element number and element basis line number by a user number. - SUBROUTINE cmfe_Field_GeometricParametersElementLineLengthGetNumber(regionUserNumber,geometricFieldUserNumber,elementNumber, & - & elementLineNumber,lineLength,err) + SUBROUTINE cmfe_Field_GeometricParametersElementLineLengthGetNumber(contextUserNumber,regionUserNumber, & + & geometricFieldUserNumber,elementNumber,elementLineNumber,lineLength,err) !DLLEXPORT(cmfe_Field_GeometricParametersElementLineLengthGetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Gets the volume for a given element number by a user number. - SUBROUTINE cmfe_Field_GeometricParametersElementVolumeGetNumber(regionUserNumber,geometricFieldUserNumber,elementNumber, & - & elementVolume,err) - !DLLEXPORT(cmfe_Field_GeometricParametersElementVolumeGetNumber) + !>Gets the line length between nodes of a geometric field for a given element number and element basis line number by an object. + SUBROUTINE cmfe_Field_GeometricParametersElementLineLengthGetObj(geometricField,elementNumber,elementLineNumber,lineLength,err) + !DLLEXPORT(cmfe_Field_GeometricParametersElementLineLengthGetObj) !Argument variables - INTEGER(INTG), INTENT(IN) :: regionUserNumber !Gets the line length between nodes of a geometric field for a given element number and element basis line number by an object. - SUBROUTINE cmfe_Field_GeometricParametersElementLineLengthGetObj(geometricField,elementNumber,elementLineNumber,lineLength,err) - !DLLEXPORT(cmfe_Field_GeometricParametersElementLineLengthGetObj) + !>Gets the volume for a given element number by a user number. + SUBROUTINE cmfe_Field_GeometricParametersElementVolumeGetNumber(contextUserNumber,regionUserNumber,geometricFieldUserNumber, & + & elementNumber,elementVolume,err) + !DLLEXPORT(cmfe_Field_GeometricParametersElementVolumeGetNumber) !Argument variables - TYPE(cmfe_FieldType), INTENT(IN) :: geometricField !Gets the scale factor for a particular node identified by a user number. - SUBROUTINE cmfe_Field_ParameterSetNodeScaleFactorGetNumber(regionUserNumber,fieldUserNumber,variableType, & + SUBROUTINE cmfe_Field_ParameterSetNodeScaleFactorGetNumber(contextUserNumber,regionUserNumber,fieldUserNumber,variableType, & & versionNumber,derivativeNumber,nodeUserNumber,componentNumber,scaleFactor,err) !DLLEXPORT(cmfe_Field_ParameterSetNodeScaleFactorGetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Gets the scale factors for all nodes identified by a user number. - SUBROUTINE cmfe_Field_ParameterSetNodeScaleFactorsGetNumber(regionUserNumber,fieldUserNumber,variableType, & + SUBROUTINE cmfe_Field_ParameterSetNodeScaleFactorsGetNumber(contextUserNumber,regionUserNumber,fieldUserNumber,variableType, & & meshComponentNumber,scaleFactors,err) !DLLEXPORT(cmfe_Field_ParameterSetNodeScaleFactorsGetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Gets the number of scale factor dofs, identified by a user number. - SUBROUTINE cmfe_Field_ParameterSetNodeNumberOfScaleFactorDofsGetNumber(regionUserNumber,fieldUserNumber,variableType, & - & meshComponentNumber,numberOfScaleFactorsDofs,err) + SUBROUTINE cmfe_Field_ParameterSetNodeNumberOfScaleFactorDofsGetNumber(contextUserNumber,regionUserNumber,fieldUserNumber, & + & variableType,meshComponentNumber,numberOfScaleFactorsDofs,err) !DLLEXPORT(cmfe_Field_ParameterSetNodeNumberOfScaleFactorDofsGetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets the scale factor for a particular node identified by a user number. - SUBROUTINE cmfe_Field_ParameterSetNodeScaleFactorSetNumber(regionUserNumber,fieldUserNumber,variableType, & + SUBROUTINE cmfe_Field_ParameterSetNodeScaleFactorSetNumber(contextUserNumber,regionUserNumber,fieldUserNumber,variableType, & & versionNumber,derivativeNumber,nodeUserNumber,componentNumber,scaleFactor,err) !DLLEXPORT(cmfe_Field_ParameterSetNodeScaleFactorSetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets the scale factors for all nodes identified by a user number. - SUBROUTINE cmfe_Field_ParameterSetNodeScaleFactorsSetNumber(regionUserNumber,fieldUserNumber,variableType, & + SUBROUTINE cmfe_Field_ParameterSetNodeScaleFactorsSetNumber(contextUserNumber,regionUserNumber,fieldUserNumber,variableType, & & meshComponentNumber,scaleFactors,err) !DLLEXPORT(cmfe_Field_ParameterSetNodeScaleFactorsSetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the character string label for a field identified by a user number. - SUBROUTINE cmfe_Field_LabelGetCNumber(regionUserNumber,fieldUserNumber,label,err) + SUBROUTINE cmfe_Field_LabelGetCNumber(contextUserNumber,regionUserNumber,fieldUserNumber,label,err) !DLLEXPORT(cmfe_Field_LabelGetCNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the varying string label for a field identified by a user number. - SUBROUTINE cmfe_Field_LabelGetVSNumber(regionUserNumber,fieldUserNumber,label,err) + SUBROUTINE cmfe_Field_LabelGetVSNumber(contextUserNumber,regionUserNumber,fieldUserNumber,label,err) !DLLEXPORT(cmfe_Field_LabelGetVSNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the character string label for a field identified by a user number. - SUBROUTINE cmfe_Field_LabelSetCNumber(regionUserNumber,fieldUserNumber,label,err) + SUBROUTINE cmfe_Field_LabelSetCNumber(contextUserNumber,regionUserNumber,fieldUserNumber,label,err) !DLLEXPORT(cmfe_Field_LabelSetCNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the varying string label for a field identified by a user number. - SUBROUTINE cmfe_Field_LabelSetVSNumber(regionUserNumber,fieldUserNumber,label,err) + SUBROUTINE cmfe_Field_LabelSetVSNumber(contextUserNumber,regionUserNumber,fieldUserNumber,label,err) !DLLEXPORT(cmfe_Field_LabelSetVSNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the interpolation type for a field variable component for a field identified by a user number. - SUBROUTINE cmfe_Field_PositionNormalTangentCalculateNodeNumber(regionUserNumber,fieldUserNumber,variableType,componentNumber, & - & localNodeNumber,position,normal,tangents,err) + SUBROUTINE cmfe_Field_PositionNormalTangentCalculateNodeNumber(contextUserNumber,regionUserNumber,fieldUserNumber, & + & variableType,componentNumber,localNodeNumber,position,normal,tangents,err) !DLLEXPORT(cmfe_Field_PositionNormalTangentCalculateNodeNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the mesh decomposition for a field identified by a user number. - SUBROUTINE cmfe_Field_MeshDecompositionGetNumber(regionUserNumber,fieldUserNumber,decompositionUserNumber,err) + SUBROUTINE cmfe_Field_MeshDecompositionGetNumber(contextUserNumber,regionUserNumber,fieldUserNumber,decompositionUserNumber,err) !DLLEXPORT(cmfe_Field_MeshDecompositionGetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the mesh decomposition for a field identified by a user number. - SUBROUTINE cmfe_Field_MeshDecompositionSetNumber(regionUserNumber,fieldUserNumber,meshUserNumber,decompositionUserNumber,err) + SUBROUTINE cmfe_Field_MeshDecompositionSetNumber(contextUserNumber,regionUserNumber,fieldUserNumber,meshUserNumber, & + & decompositionUserNumber,err) !DLLEXPORT(cmfe_Field_MeshDecompositionSetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the data projection for a field identified by a user number. - SUBROUTINE cmfe_Field_DataProjectionSetNumber(regionUserNumber,fieldUserNumber,dataPointsUserNumber,dataProjectionUserNumber,err) + SUBROUTINE cmfe_Field_DataProjectionSetNumber(contextUserNumber,regionUserNumber,fieldUserNumber,dataPointsUserNumber, & + & dataProjectionUserNumber,err) !DLLEXPORT(cmfe_Field_DataProjectionSetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the number of componenets for a field variable for a field identified by a user number. - SUBROUTINE cmfe_Field_NumberOfComponentsGetNumber(regionUserNumber,fieldUserNumber,variableType,numberOfComponents,err) + SUBROUTINE cmfe_Field_NumberOfComponentsGetNumber(contextUserNumber,regionUserNumber,fieldUserNumber,variableType, & + & numberOfComponents,err) !DLLEXPORT(cmfe_Field_NumberOfComponentsGetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the number of componenets for a field variable for a field identified by a user number. - SUBROUTINE cmfe_Field_NumberOfComponentsSetNumber(regionUserNumber,fieldUserNumber,variableType,numberOfComponents,err) + SUBROUTINE cmfe_Field_NumberOfComponentsSetNumber(contextUserNumber,regionUserNumber,fieldUserNumber,variableType, & + & numberOfComponents,err) !DLLEXPORT(cmfe_Field_NumberOfComponentsSetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the number of variables for a field identified by a user number. - SUBROUTINE cmfe_Field_NumberOfVariablesGetNumber(regionUserNumber,fieldUserNumber,numberOfVariables,err) + SUBROUTINE cmfe_Field_NumberOfVariablesGetNumber(contextUserNumber,regionUserNumber,fieldUserNumber,numberOfVariables,err) !DLLEXPORT(cmfe_Field_NumberOfVariablesGetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/chnages the number of variables for a field identified by a user number. - SUBROUTINE cmfe_Field_NumberOfVariablesSetNumber(regionUserNumber,fieldUserNumber,numberOfVariables,err) + SUBROUTINE cmfe_Field_NumberOfVariablesSetNumber(contextUserNumber,regionUserNumber,fieldUserNumber,numberOfVariables,err) !DLLEXPORT(cmfe_Field_NumberOfVariablesSetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Adds the given integer value to the given parameter set for the constant of the field variable component for a field identified by a user number. - SUBROUTINE cmfe_Field_ParameterSetAddConstantIntgNumber(regionUserNumber,fieldUserNumber,variableType,fieldSetType, & - & componentNumber,value,err) + SUBROUTINE cmfe_Field_ParameterSetAddConstantIntgNumber(contextUserNumber,regionUserNumber,fieldUserNumber,variableType, & + & fieldSetType,componentNumber,value,err) !DLLEXPORT(cmfe_Field_ParameterSetAddConstantIntgNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Adds the given single precision value to the given parameter set for the constant of the field variable component for a field identified by a user number. - SUBROUTINE cmfe_Field_ParameterSetAddConstantSPNumber(regionUserNumber,fieldUserNumber,variableType,fieldSetType, & - & componentNumber,value,err) + SUBROUTINE cmfe_Field_ParameterSetAddConstantSPNumber(contextUserNumber,regionUserNumber,fieldUserNumber,variableType, & + & fieldSetType,componentNumber,value,err) !DLLEXPORT(cmfe_Field_ParameterSetAddConstantSPNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Adds the given double precision value to the given parameter set for the constant of the field variable component for a field identified by a user number. - SUBROUTINE cmfe_Field_ParameterSetAddConstantDPNumber(regionUserNumber,fieldUserNumber,variableType,fieldSetType, & - & componentNumber,value,err) + SUBROUTINE cmfe_Field_ParameterSetAddConstantDPNumber(contextUserNumber,regionUserNumber,fieldUserNumber,variableType, & + & fieldSetType,componentNumber,value,err) !DLLEXPORT(cmfe_Field_ParameterSetAddConstantDPNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Adds the given logical value to the given parameter set for the constant of the field variable component for a field identified by a user number. - SUBROUTINE cmfe_Field_ParameterSetAddConstantLNumber(regionUserNumber,fieldUserNumber,variableType,fieldSetType, & - & componentNumber,value,err) + SUBROUTINE cmfe_Field_ParameterSetAddConstantLNumber(contextUserNumber,regionUserNumber,fieldUserNumber,variableType, & + & fieldSetType,componentNumber,value,err) !DLLEXPORT(cmfe_Field_ParameterSetAddConstantLNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Adds the given integer value to an element in the given parameter set for field variable component for a field identified by a user number. - SUBROUTINE cmfe_Field_ParameterSetAddElementIntgNumber(regionUserNumber,fieldUserNumber,variableType,fieldSetType, & - & userElementNumber,componentNumber,value,err) + SUBROUTINE cmfe_Field_ParameterSetAddElementIntgNumber(contextUserNumber,regionUserNumber,fieldUserNumber,variableType, & + & fieldSetType,userElementNumber,componentNumber,value,err) !DLLEXPORT(cmfe_Field_ParameterSetAddElementIntgNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Adds the given single precision value to an element in the given parameter set for field variable component for a field identified by a user number. - SUBROUTINE cmfe_Field_ParameterSetAddElementSPNumber(regionUserNumber,fieldUserNumber,variableType,fieldSetType, & - & userElementNumber,componentNumber,value,err) + SUBROUTINE cmfe_Field_ParameterSetAddElementSPNumber(contextUserNumber,regionUserNumber,fieldUserNumber,variableType, & + & fieldSetType,userElementNumber,componentNumber,value,err) !DLLEXPORT(cmfe_Field_ParameterSetAddElementSPNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Adds the given double precision value to an element in the given parameter set for field variable component for a field identified by a user number. - SUBROUTINE cmfe_Field_ParameterSetAddElementDPNumber(regionUserNumber,fieldUserNumber,variableType,fieldSetType, & - & userElementNumber,componentNumber,value,err) + SUBROUTINE cmfe_Field_ParameterSetAddElementDPNumber(contextUserNumber,regionUserNumber,fieldUserNumber,variableType, & + & fieldSetType,userElementNumber,componentNumber,value,err) !DLLEXPORT(cmfe_Field_ParameterSetAddElementDPNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Adds the given logical value to an element in the given parameter set for field variable component for a field identified by a user number. - SUBROUTINE cmfe_Field_ParameterSetAddElementLNumber(regionUserNumber,fieldUserNumber,variableType,fieldSetType, & - & userElementNumber,componentNumber,value,err) + SUBROUTINE cmfe_Field_ParameterSetAddElementLNumber(contextUserNumber,regionUserNumber,fieldUserNumber,variableType, & + & fieldSetType,userElementNumber,componentNumber,value,err) !DLLEXPORT(cmfe_Field_ParameterSetAddElementLNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Adds the given integer value to a Gauss point of an element in the given parameter set for field variable component for a field identified by a user number. - SUBROUTINE cmfe_Field_ParameterSetAddGaussPointIntgNumber(regionUserNumber,fieldUserNumber,variableType,fieldSetType, & - & gaussPointNumber,userElementNumber,componentNumber,VALUE,err) + SUBROUTINE cmfe_Field_ParameterSetAddGaussPointIntgNumber(contextUserNumber,regionUserNumber,fieldUserNumber,variableType, & + & fieldSetType,gaussPointNumber,userElementNumber,componentNumber,VALUE,err) !DLLEXPORT(cmfe_Field_ParameterSetAddGaussPointIntgNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Adds the given single precision value to a Gauss point in an element in the given parameter set for field variable component for a field identified by a user number. - SUBROUTINE cmfe_Field_ParameterSetAddGaussPointSPNumber(regionUserNumber,fieldUserNumber,variableType,fieldSetType, & - & gaussPointNumber,userElementNumber,componentNumber,VALUE,err) + SUBROUTINE cmfe_Field_ParameterSetAddGaussPointSPNumber(contextUserNumber,regionUserNumber,fieldUserNumber,variableType, & + & fieldSetType,gaussPointNumber,userElementNumber,componentNumber,VALUE,err) !DLLEXPORT(cmfe_Field_ParameterSetAddGaussPointSPNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Adds the given double precision value to a Gauss point to an element in the given parameter set for field variable component for a field identified by a user number. - SUBROUTINE cmfe_Field_ParameterSetAddGaussPointDPNumber(regionUserNumber,fieldUserNumber,variableType,fieldSetType, & - & gaussPointNumber,userElementNumber,componentNumber,VALUE,err) + SUBROUTINE cmfe_Field_ParameterSetAddGaussPointDPNumber(contextUserNumber,regionUserNumber,fieldUserNumber,variableType, & + & fieldSetType,gaussPointNumber,userElementNumber,componentNumber,VALUE,err) !DLLEXPORT(cmfe_Field_ParameterSetAddGaussPointDPNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Adds the given logical value to a Gauss point in an element in the given parameter set for field variable component for a field identified by a user number. - SUBROUTINE cmfe_Field_ParameterSetAddGaussPointLNumber(regionUserNumber,fieldUserNumber,variableType,fieldSetType, & - & gaussPointNumber,userElementNumber,componentNumber,VALUE,err) + SUBROUTINE cmfe_Field_ParameterSetAddGaussPointLNumber(contextUserNumber,regionUserNumber,fieldUserNumber,variableType, & + & fieldSetType,gaussPointNumber,userElementNumber,componentNumber,VALUE,err) !DLLEXPORT(cmfe_Field_ParameterSetAddGaussPointLNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Adds the given integer value to an node in the given parameter set for field variable component for a field identified by a user number. - SUBROUTINE cmfe_Field_ParameterSetAddNodeIntgNumber(regionUserNumber,fieldUserNumber,variableType,fieldSetType,versionNumber, & - & derivativeNumber,userNodeNumber,componentNumber,value,err) + SUBROUTINE cmfe_Field_ParameterSetAddNodeIntgNumber(contextUserNumber,regionUserNumber,fieldUserNumber,variableType, & + & fieldSetType,versionNumber,derivativeNumber,userNodeNumber,componentNumber,value,err) !DLLEXPORT(cmfe_Field_ParameterSetAddNodeIntgNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Adds the given single precision value to an node in the given parameter set for field variable component for a field identified by a user number. - SUBROUTINE cmfe_Field_ParameterSetAddNodeSPNumber(regionUserNumber,fieldUserNumber,variableType,fieldSetType,versionNumber, & - & derivativeNumber,userNodeNumber,componentNumber,value,err) + SUBROUTINE cmfe_Field_ParameterSetAddNodeSPNumber(contextUserNumber,regionUserNumber,fieldUserNumber,variableType, & + & fieldSetType,versionNumber,derivativeNumber,userNodeNumber,componentNumber,value,err) !DLLEXPORT(cmfe_Field_ParameterSetAddNodeSPNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Adds the given double precision value to an node in the given parameter set for field variable component for a field identified by a user number. - SUBROUTINE cmfe_Field_ParameterSetAddNodeDPNumber(regionUserNumber,fieldUserNumber,variableType,fieldSetType,versionNumber, & - & derivativeNumber,userNodeNumber,componentNumber,value,err) + SUBROUTINE cmfe_Field_ParameterSetAddNodeDPNumber(contextUserNumber,regionUserNumber,fieldUserNumber,variableType, & + & fieldSetType,versionNumber,derivativeNumber,userNodeNumber,componentNumber,value,err) !DLLEXPORT(cmfe_Field_ParameterSetAddNodeDPNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Adds the given logical value to an node in the given parameter set for field variable component for a field identified by a user number. - SUBROUTINE cmfe_Field_ParameterSetAddNodeLNumber(regionUserNumber,fieldUserNumber,variableType,fieldSetType,versionNumber, & - & derivativeNumber,userNodeNumber,componentNumber,value,err) + SUBROUTINE cmfe_Field_ParameterSetAddNodeLNumber(contextUserNumber,regionUserNumber,fieldUserNumber,variableType, & + & fieldSetType,versionNumber,derivativeNumber,userNodeNumber,componentNumber,value,err) !DLLEXPORT(cmfe_Field_ParameterSetAddNodeLNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Creates a new parameter set of type set type for a field variable for a field identified by a user number. - SUBROUTINE cmfe_Field_ParameterSetCreateNumber(regionUserNumber,fieldUserNumber,variableType,fieldSetType,err) + SUBROUTINE cmfe_Field_ParameterSetCreateNumber(contextUserNumber,regionUserNumber,fieldUserNumber,variableType,fieldSetType,err) !DLLEXPORT(cmfe_Field_ParameterSetCreateNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Destroys the specified parameter set type for a field variable for a field identified by a user number. - SUBROUTINE cmfe_Field_ParameterSetDestroyNumber(regionUserNumber,fieldUserNumber,variableType,fieldSetType,err) + SUBROUTINE cmfe_Field_ParameterSetDestroyNumber(contextUserNumber,regionUserNumber,fieldUserNumber,variableType,fieldSetType,err) !DLLEXPORT(cmfe_Field_ParameterSetDestroyNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns a pointer to the specified field parameter set local integer data array for a field identified by an user number. The pointer must be restored with a call to OpenCMISS::Iron::cmfe_Field_ParameterSetDataRestore call. Note: the values can be used for read operations but a field parameter set update or add calls must be used to change any values. - SUBROUTINE cmfe_Field_ParameterSetDataGetIntgNumber(regionUserNumber,fieldUserNumber,variableType,fieldSetType,parameters,err) + SUBROUTINE cmfe_Field_ParameterSetDataGetIntgNumber(contextUserNumber,regionUserNumber,fieldUserNumber,variableType, & + & fieldSetType,parameters,err) !DLLEXPORT(cmfe_Field_ParameterSetDataGetIntgNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns a pointer to the specified field parameter set local single precision data array for a field identified by an user number. The pointer must be restored with a call to OpenCMISS::Iron::cmfe_Field_ParameterSetDataRestore call. Note: the values can be used for read operations but a field parameter set update or add calls must be used to change any values. - SUBROUTINE cmfe_Field_ParameterSetDataGetSPNumber(regionUserNumber,fieldUserNumber,variableType,fieldSetType,parameters,err) + SUBROUTINE cmfe_Field_ParameterSetDataGetSPNumber(contextUserNumber,regionUserNumber,fieldUserNumber,variableType, & + & fieldSetType,parameters,err) !DLLEXPORT(cmfe_Field_ParameterSetDataGetSPNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns a pointer to the specified field parameter set local double precision data array for a field identified by an user number. The pointer must be restored with a call to OpenCMISS::Iron::cmfe_Field_ParameterSetDataRestore call. Note: the values can be used for read operations but a field parameter set update or add calls must be used to change any values. - SUBROUTINE cmfe_Field_ParameterSetDataGetDPNumber(regionUserNumber,fieldUserNumber,variableType,fieldSetType,parameters,err) + SUBROUTINE cmfe_Field_ParameterSetDataGetDPNumber(contextUserNumber,regionUserNumber,fieldUserNumber,variableType, & + & fieldSetType,parameters,err) !DLLEXPORT(cmfe_Field_ParameterSetDataGetDPNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns a pointer to the specified field parameter set local logical data array for a field identified by an user number. The pointer must be restored with a call to OpenCMISS::Iron::cmfe_Field_ParameterSetDataRestore call. Note: the values can be used for read operations but a field parameter set update or add calls must be used to change any values. - SUBROUTINE cmfe_Field_ParameterSetDataGetLNumber(regionUserNumber,fieldUserNumber,variableType,fieldSetType,parameters,err) + SUBROUTINE cmfe_Field_ParameterSetDataGetLNumber(contextUserNumber,regionUserNumber,fieldUserNumber,variableType, & + & fieldSetType,parameters,err) !DLLEXPORT(cmfe_Field_ParameterSetDataGetLNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Restores the specified field variable parameter set local integer array that was obtained with an OpenCMISS::Iron::cmfe_Field_ParameterSetDataGet call for a field that is specified with an user number. - SUBROUTINE cmfe_Field_ParameterSetDataRestoreIntgNumber(regionUserNumber,fieldUserNumber,variableType,fieldSetType,parameters,err) + SUBROUTINE cmfe_Field_ParameterSetDataRestoreIntgNumber(contextUserNumber,regionUserNumber,fieldUserNumber,variableType, & + & fieldSetType,parameters,err) !DLLEXPORT(cmfe_Field_ParameterSetDataRestoreIntgNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Restores the specified field variable parameter set local single precision array that was obtained with an OpenCMISS::Iron::cmfe_Field_ParameterSetDataGet call for a field that is specified with an user number. - SUBROUTINE cmfe_Field_ParameterSetDataRestoreSPNumber(regionUserNumber,fieldUserNumber,variableType,fieldSetType,parameters,err) + SUBROUTINE cmfe_Field_ParameterSetDataRestoreSPNumber(contextUserNumber,regionUserNumber,fieldUserNumber,variableType, & + & fieldSetType,parameters,err) !DLLEXPORT(cmfe_Field_ParameterSetDataRestoreSPNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Restores the specified field variable parameter set local double precision array that was obtained with an OpenCMISS::Iron::cmfe_Field_ParameterSetDataGet call for a field that is specified with an user number. - SUBROUTINE cmfe_Field_ParameterSetDataRestoreDPNumber(regionUserNumber,fieldUserNumber,variableType,fieldSetType,parameters,err) + SUBROUTINE cmfe_Field_ParameterSetDataRestoreDPNumber(contextUserNumber,regionUserNumber,fieldUserNumber,variableType, & + & fieldSetType,parameters,err) !DLLEXPORT(cmfe_Field_ParameterSetDataRestoreDPNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Restores the specified field variable parameter set local logical array that was obtained with an OpenCMISS::Iron::cmfe_Field_ParameterSetDataGet call for a field that is specified with an user number. - SUBROUTINE cmfe_Field_ParameterSetDataRestoreLNumber(regionUserNumber,fieldUserNumber,variableType,fieldSetType,parameters,err) + SUBROUTINE cmfe_Field_ParameterSetDataRestoreLNumber(contextUserNumber,regionUserNumber,fieldUserNumber,variableType, & + & fieldSetType,parameters,err) !DLLEXPORT(cmfe_Field_ParameterSetDataRestoreLNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns from the given parameter set an integer value for the specified constant of a field variable component for a field identified by a user number. - SUBROUTINE cmfe_Field_ParameterSetGetConstantIntgNumber(regionUserNumber,fieldUserNumber,variableType,fieldSetType, & - & componentNumber,value,err) + SUBROUTINE cmfe_Field_ParameterSetGetConstantIntgNumber(contextUserNumber,regionUserNumber,fieldUserNumber,variableType, & + & fieldSetType,componentNumber,value,err) !DLLEXPORT(cmfe_Field_ParameterSetGetConstantIntgNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns from the given parameter set a single precision value for the specified constant of a field variable component for a field identified by a user number. - SUBROUTINE cmfe_Field_ParameterSetGetConstantSPNumber(regionUserNumber,fieldUserNumber,variableType,fieldSetType, & - & componentNumber,value,err) + SUBROUTINE cmfe_Field_ParameterSetGetConstantSPNumber(contextUserNumber,regionUserNumber,fieldUserNumber,variableType, & + & fieldSetType,componentNumber,value,err) !DLLEXPORT(cmfe_Field_ParameterSetGetConstantSPNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns from the given parameter set a double precision value for the specified constant of a field variable component for a field identified by a user number. - SUBROUTINE cmfe_Field_ParameterSetGetConstantDPNumber(regionUserNumber,fieldUserNumber,variableType,fieldSetType, & - & componentNumber,value,err) + SUBROUTINE cmfe_Field_ParameterSetGetConstantDPNumber(contextUserNumber,regionUserNumber,fieldUserNumber,variableType, & + & fieldSetType,componentNumber,value,err) !DLLEXPORT(cmfe_Field_ParameterSetGetConstantDPNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns from the given parameter set a logical value for the specified constant of a field variable component for a field identified by a user number. - SUBROUTINE cmfe_Field_ParameterSetGetConstantLNumber(regionUserNumber,fieldUserNumber,variableType,fieldSetType, & - & componentNumber,value,err) + SUBROUTINE cmfe_Field_ParameterSetGetConstantLNumber(contextUserNumber,regionUserNumber,fieldUserNumber,variableType, & + & fieldSetType,componentNumber,value,err) !DLLEXPORT(cmfe_Field_ParameterSetGetConstantLNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns from the given parameter set a integer value for the specified data point of a field variable component for a field identified by a user number. - SUBROUTINE cmfe_Field_ParameterSetGetDataPointIntgNumberI(parentRegionUserNumber,interfaceUserNumber,fieldUserNumber, & - & variableType,fieldSetType,userDataPointNumber,componentNumber,value,err) + SUBROUTINE cmfe_Field_ParameterSetGetDataPointIntgNumberI(contextUserNumber,parentRegionUserNumber,interfaceUserNumber, & + & fieldUserNumber,variableType,fieldSetType,userDataPointNumber,componentNumber,value,err) !DLLEXPORT(cmfe_Field_ParameterSetGetDataPointIntgNumberI) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns from the given parameter set a integer value for the specified data point of a field variable component for a field identified by a user number. - SUBROUTINE cmfe_Field_ParameterSetGetDataPointIntgNumberR(regionUserNumber,fieldUserNumber,variableType,fieldSetType, & - & userDataPointNumber,componentNumber,value,err) + SUBROUTINE cmfe_Field_ParameterSetGetDataPointIntgNumberR(contextUserNumber,regionUserNumber,fieldUserNumber,variableType, & + & fieldSetType,userDataPointNumber,componentNumber,value,err) !DLLEXPORT(cmfe_Field_ParameterSetGetDataPointIntgNumberR) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns from the given parameter set a single precision value for the specified data point of a field variable component for a field identified by a user number. - SUBROUTINE cmfe_Field_ParameterSetGetDataPointSPNumberI(parentRegionUserNumber,interfaceUserNumber,fieldUserNumber, & - & variableType,fieldSetType,userDataPointNumber,componentNumber,value,err) + SUBROUTINE cmfe_Field_ParameterSetGetDataPointSPNumberI(contextUserNumber,parentRegionUserNumber,interfaceUserNumber, & + & fieldUserNumber,variableType,fieldSetType,userDataPointNumber,componentNumber,value,err) !DLLEXPORT(cmfe_Field_ParameterSetGetDataPointSPNumberI) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns from the given parameter set a single precision value for the specified data point of a field variable component for a field identified by a user number. - SUBROUTINE cmfe_Field_ParameterSetGetDataPointSPNumberR(regionUserNumber,fieldUserNumber,variableType,fieldSetType, & - & userDataPointNumber,componentNumber,value,err) + SUBROUTINE cmfe_Field_ParameterSetGetDataPointSPNumberR(contextUserNumber,regionUserNumber,fieldUserNumber,variableType, & + & fieldSetType,userDataPointNumber,componentNumber,value,err) !DLLEXPORT(cmfe_Field_ParameterSetGetDataPointSPNumberR) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns from the given parameter set a double precision value for the specified data point of a field variable component for a field identified by a user number. - SUBROUTINE cmfe_Field_ParameterSetGetDataPointDPNumberI(parentRegionUserNumber,interfaceUserNumber,fieldUserNumber, & - & variableType,fieldSetType,userDataPointNumber,componentNumber,value,err) + SUBROUTINE cmfe_Field_ParameterSetGetDataPointDPNumberI(contextUserNumber,parentRegionUserNumber,interfaceUserNumber, & + & fieldUserNumber,variableType,fieldSetType,userDataPointNumber,componentNumber,value,err) !DLLEXPORT(cmfe_Field_ParameterSetGetDataPointDPNumberI) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns from the given parameter set a double precision value for the specified data point of a field variable component for a field identified by a user number. - SUBROUTINE cmfe_Field_ParameterSetGetDataPointDPNumberR(regionUserNumber,fieldUserNumber,variableType,fieldSetType, & - & userDataPointNumber,componentNumber,value,err) + SUBROUTINE cmfe_Field_ParameterSetGetDataPointDPNumberR(contextUserNumber,regionUserNumber,fieldUserNumber,variableType, & + & fieldSetType,userDataPointNumber,componentNumber,value,err) !DLLEXPORT(cmfe_Field_ParameterSetGetDataPointDPNumberR) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns from the given parameter set a logical value for the specified data point of a field variable component for a field identified by a user number. - SUBROUTINE cmfe_Field_ParameterSetGetDataPointLNumberI(parentRegionUserNumber,interfaceUserNumber,fieldUserNumber, & - & variableType,fieldSetType,userDataPointNumber,componentNumber,value,err) + SUBROUTINE cmfe_Field_ParameterSetGetDataPointLNumberI(contextUserNumber,parentRegionUserNumber,interfaceUserNumber, & + & fieldUserNumber,variableType,fieldSetType,userDataPointNumber,componentNumber,value,err) !DLLEXPORT(cmfe_Field_ParameterSetGetDataPointLNumberI) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns from the given parameter set a logical value for the specified data point of a field variable component for a field identified by a user number. - SUBROUTINE cmfe_Field_ParameterSetGetDataPointLNumberR(regionUserNumber,fieldUserNumber,variableType,fieldSetType, & - & userDataPointNumber,componentNumber,value,err) + SUBROUTINE cmfe_Field_ParameterSetGetDataPointLNumberR(contextUserNumber,regionUserNumber,fieldUserNumber,variableType, & + & fieldSetType,userDataPointNumber,componentNumber,value,err) !DLLEXPORT(cmfe_Field_ParameterSetGetDataPointLNumberR) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns from the given parameter set an integer value for the specified element of a field variable component for a field identified by a user number. - SUBROUTINE cmfe_Field_ParameterSetGetElementIntgNumber(regionUserNumber,fieldUserNumber,variableType,fieldSetType, & - & userElementNumber,componentNumber,value,err) + SUBROUTINE cmfe_Field_ParameterSetGetElementIntgNumber(contextUserNumber,regionUserNumber,fieldUserNumber,variableType, & + & fieldSetType,userElementNumber,componentNumber,value,err) !DLLEXPORT(cmfe_Field_ParameterSetGetElementIntgNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns from the given parameter set a single precision value for the specified element of a field variable component for a field identified by a user number. - SUBROUTINE cmfe_Field_ParameterSetGetElementSPNumber(regionUserNumber,fieldUserNumber,variableType,fieldSetType, & - & userElementNumber,componentNumber,value,err) + SUBROUTINE cmfe_Field_ParameterSetGetElementSPNumber(contextUserNumber,regionUserNumber,fieldUserNumber,variableType, & + & fieldSetType,userElementNumber,componentNumber,value,err) !DLLEXPORT(cmfe_Field_ParameterSetGetElementSPNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns from the given parameter set a double precision value for the specified element of a field variable component for a field identified by a user number. - SUBROUTINE cmfe_Field_ParameterSetGetElementDPNumber(regionUserNumber,fieldUserNumber,variableType,fieldSetType, & - & userElementNumber,componentNumber,value,err) + SUBROUTINE cmfe_Field_ParameterSetGetElementDPNumber(contextUserNumber,regionUserNumber,fieldUserNumber,variableType, & + & fieldSetType,userElementNumber,componentNumber,value,err) !DLLEXPORT(cmfe_Field_ParameterSetGetElementDPNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns from the given parameter set a logical value for the specified element of a field variable component for a field identified by a user number. - SUBROUTINE cmfe_Field_ParameterSetGetElementLNumber(regionUserNumber,fieldUserNumber,variableType,fieldSetType, & - & userElementNumber,componentNumber,value,err) + SUBROUTINE cmfe_Field_ParameterSetGetElementLNumber(contextUserNumber,regionUserNumber,fieldUserNumber,variableType, & + & fieldSetType,userElementNumber,componentNumber,value,err) !DLLEXPORT(cmfe_Field_ParameterSetGetElementLNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns from the given parameter set an integer value for the specified node and derivative of a field variable component for a field identified by a user number. - SUBROUTINE cmfe_Field_ParameterSetGetNodeIntgNumber(regionUserNumber,fieldUserNumber,variableType,fieldSetType, & - & versionNumber,derivativeNumber,userNodeNumber,componentNumber,value,err) + SUBROUTINE cmfe_Field_ParameterSetGetNodeIntgNumber(contextUserNumber,regionUserNumber,fieldUserNumber,variableType, & + & fieldSetType,versionNumber,derivativeNumber,userNodeNumber,componentNumber,value,err) !DLLEXPORT(cmfe_Field_ParameterSetGetNodeIntgNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns from the given parameter set a single precision value for the specified node and derivative of a field variable component for a field identified by a user number. - SUBROUTINE cmfe_Field_ParameterSetGetNodeSPNumber(regionUserNumber,fieldUserNumber,variableType,fieldSetType, & - & versionNumber,derivativeNumber,userNodeNumber,componentNumber,value,err) + SUBROUTINE cmfe_Field_ParameterSetGetNodeSPNumber(contextUserNumber,regionUserNumber,fieldUserNumber,variableType, & + & fieldSetType,versionNumber,derivativeNumber,userNodeNumber,componentNumber,value,err) !DLLEXPORT(cmfe_Field_ParameterSetGetNodeSPNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns from the given parameter set a double precision value for the specified node and derivative of a field variable component for a field identified by a user number. - SUBROUTINE cmfe_Field_ParameterSetGetNodeDPNumber(regionUserNumber,fieldUserNumber,variableType,fieldSetType, & - & versionNumber,derivativeNumber,userNodeNumber,componentNumber,value,err) + SUBROUTINE cmfe_Field_ParameterSetGetNodeDPNumber(contextUserNumber,regionUserNumber,fieldUserNumber,variableType, & + & fieldSetType,versionNumber,derivativeNumber,userNodeNumber,componentNumber,value,err) !DLLEXPORT(cmfe_Field_ParameterSetGetNodeDPNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns from the given parameter set a logical value for the specified node and derivative of a field variable component for a field identified by a user number. - SUBROUTINE cmfe_Field_ParameterSetGetNodeLNumber(regionUserNumber,fieldUserNumber,variableType,fieldSetType, & - & versionNumber,derivativeNumber,userNodeNumber,componentNumber,value,err) + SUBROUTINE cmfe_Field_ParameterSetGetNodeLNumber(contextUserNumber,regionUserNumber,fieldUserNumber,variableType, & + & fieldSetType,versionNumber,derivativeNumber,userNodeNumber,componentNumber,value,err) !DLLEXPORT(cmfe_Field_ParameterSetGetNodeLNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Updates the given parameter set with the given integer value for the constant of the field variable component for a field identified by a user number. - SUBROUTINE cmfe_Field_ParameterSetUpdateConstantIntgNumber(regionUserNumber,fieldUserNumber,variableType,fieldSetType, & - & componentNumber,value,err) + SUBROUTINE cmfe_Field_ParameterSetUpdateConstantIntgNumber(contextUserNumber,regionUserNumber,fieldUserNumber,variableType, & + & fieldSetType,componentNumber,value,err) !DLLEXPORT(cmfe_Field_ParameterSetUpdateConstantIntgNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Updates the given parameter set with the given single precision value for the constant of the field variable component for a field identified by a user number. - SUBROUTINE cmfe_Field_ParameterSetUpdateConstantSPNumber(regionUserNumber,fieldUserNumber,variableType,fieldSetType, & - & componentNumber,value,err) + SUBROUTINE cmfe_Field_ParameterSetUpdateConstantSPNumber(contextUserNumber,regionUserNumber,fieldUserNumber,variableType, & + & fieldSetType,componentNumber,value,err) !DLLEXPORT(cmfe_Field_ParameterSetUpdateConstantSPNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Updates the given parameter set with the given double precision value for the constant of the field variable component for a field identified by a user number. - SUBROUTINE cmfe_Field_ParameterSetUpdateConstantDPNumber(regionUserNumber,fieldUserNumber,variableType,fieldSetType, & - & componentNumber,value,err) + SUBROUTINE cmfe_Field_ParameterSetUpdateConstantDPNumber(contextUserNumber,regionUserNumber,fieldUserNumber,variableType, & + & fieldSetType,componentNumber,value,err) !DLLEXPORT(cmfe_Field_ParameterSetUpdateConstantDPNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Updates the given parameter set with the given logical value for the constant of the field variable component for a field identified by a user number. - SUBROUTINE cmfe_Field_ParameterSetUpdateConstantLNumber(regionUserNumber,fieldUserNumber,variableType,fieldSetType, & - & componentNumber,value,err) + SUBROUTINE cmfe_Field_ParameterSetUpdateConstantLNumber(contextUserNumber,regionUserNumber,fieldUserNumber,variableType, & + & fieldSetType,componentNumber,value,err) !DLLEXPORT(cmfe_Field_ParameterSetUpdateConstantLNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Update the given parameter set a integer value for the specified data point of a field variable component for a field identified by a user number. - SUBROUTINE cmfe_Field_ParameterSetUpdateDataPointIntgNumberI(parentRegionUserNumber,interfaceUserNumber,fieldUserNumber, & - & variableType,fieldSetType,userDataPointNumber,componentNumber,value,err) + SUBROUTINE cmfe_Field_ParameterSetUpdateDataPointIntgNumberI(contextUserNumber,parentRegionUserNumber,interfaceUserNumber, & + & fieldUserNumber,variableType,fieldSetType,userDataPointNumber,componentNumber,value,err) !DLLEXPORT(cmfe_Field_ParameterSetUpdateDataPointIntgNumberI) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Update the given parameter set a integer value for the specified data point of a field variable component for a field identified by a user number. - SUBROUTINE cmfe_Field_ParameterSetUpdateDataPointIntgNumberR(regionUserNumber,fieldUserNumber,variableType,fieldSetType, & - & userDataPointNumber,componentNumber,value,err) + SUBROUTINE cmfe_Field_ParameterSetUpdateDataPointIntgNumberR(contextUserNumber,regionUserNumber,fieldUserNumber,variableType, & + & fieldSetType,userDataPointNumber,componentNumber,value,err) !DLLEXPORT(cmfe_Field_ParameterSetUpdateDataPointIntgNumberR) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Update the given parameter set a single precision value for the specified data point of a field variable component for a field identified by a user number. - SUBROUTINE cmfe_Field_ParameterSetUpdateDataPointSPNumberI(parentRegionUserNumber,interfaceUserNumber,fieldUserNumber, & - & variableType,fieldSetType,userDataPointNumber,componentNumber,value,err) + SUBROUTINE cmfe_Field_ParameterSetUpdateDataPointSPNumberI(contextUserNumber,parentRegionUserNumber,interfaceUserNumber, & + & fieldUserNumber,variableType,fieldSetType,userDataPointNumber,componentNumber,value,err) !DLLEXPORT(cmfe_Field_ParameterSetUpdateDataPointSPNumberI) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Update the given parameter set a single precision value for the specified data point of a field variable component for a field identified by a user number. - SUBROUTINE cmfe_Field_ParameterSetUpdateDataPointSPNumberR(regionUserNumber,fieldUserNumber,variableType,fieldSetType, & - & userDataPointNumber,componentNumber,value,err) + SUBROUTINE cmfe_Field_ParameterSetUpdateDataPointSPNumberR(contextUserNumber,regionUserNumber,fieldUserNumber,variableType, & + & fieldSetType,userDataPointNumber,componentNumber,value,err) !DLLEXPORT(cmfe_Field_ParameterSetUpdateDataPointSPNumberR) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Update the given parameter set a double precision value for the specified data point of a field variable component for a field identified by a user number. - SUBROUTINE cmfe_Field_ParameterSetUpdateDataPointDPNumberI(parentRegionUserNumber,interfaceUserNumber,fieldUserNumber, & - & variableType,fieldSetType,userDataPointNumber,componentNumber,value,err) + SUBROUTINE cmfe_Field_ParameterSetUpdateDataPointDPNumberI(contextUserNumber,parentRegionUserNumber,interfaceUserNumber, & + & fieldUserNumber,variableType,fieldSetType,userDataPointNumber,componentNumber,value,err) !DLLEXPORT(cmfe_Field_ParameterSetUpdateDataPointDPNumberI) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Update the given parameter set a double precision value for the specified data point of a field variable component for a field identified by a user number. - SUBROUTINE cmfe_Field_ParameterSetUpdateDataPointDPNumberR(regionUserNumber,fieldUserNumber,variableType,fieldSetType, & - & userDataPointNumber,componentNumber,value,err) + SUBROUTINE cmfe_Field_ParameterSetUpdateDataPointDPNumberR(contextUserNumber,regionUserNumber,fieldUserNumber,variableType, & + & fieldSetType,userDataPointNumber,componentNumber,value,err) !DLLEXPORT(cmfe_Field_ParameterSetUpdateDataPointDPNumberR) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Update the given parameter set a logical value for the specified data point of a field variable component for a field identified by a user number. - SUBROUTINE cmfe_Field_ParameterSetUpdateDataPointLNumberI(parentRegionUserNumber,interfaceUserNumber,fieldUserNumber, & - & variableType,fieldSetType,userDataPointNumber,componentNumber,value,err) + SUBROUTINE cmfe_Field_ParameterSetUpdateDataPointLNumberI(contextUserNumber,parentRegionUserNumber,interfaceUserNumber, & + & fieldUserNumber,variableType,fieldSetType,userDataPointNumber,componentNumber,value,err) !DLLEXPORT(cmfe_Field_ParameterSetUpdateDataPointLNumberI) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Update the given parameter set a logical value for the specified data point of a field variable component for a field identified by a user number. - SUBROUTINE cmfe_Field_ParameterSetUpdateDataPointLNumberR(regionUserNumber,fieldUserNumber,variableType,fieldSetType, & - & userDataPointNumber,componentNumber,value,err) + SUBROUTINE cmfe_Field_ParameterSetUpdateDataPointLNumberR(contextUserNumber,regionUserNumber,fieldUserNumber,variableType, & + & fieldSetType,userDataPointNumber,componentNumber,value,err) !DLLEXPORT(cmfe_Field_ParameterSetUpdateDataPointLNumberR) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Updates the given parameter set with the given integer value for the element of the field variable component for a field identified by a user number. - SUBROUTINE cmfe_Field_ParameterSetUpdateElementIntgNumber(regionUserNumber,fieldUserNumber,variableType,fieldSetType, & - & userElementNumber,componentNumber,value,err) + SUBROUTINE cmfe_Field_ParameterSetUpdateElementIntgNumber(contextUserNumber,regionUserNumber,fieldUserNumber,variableType, & + & fieldSetType,userElementNumber,componentNumber,value,err) !DLLEXPORT(cmfe_Field_ParameterSetUpdateElementIntgNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Updates the given parameter set with the given single precision value for the element of the field variable component for a field identified by a user number. - SUBROUTINE cmfe_Field_ParameterSetUpdateElementSPNumber(regionUserNumber,fieldUserNumber,variableType,fieldSetType, & - & userElementNumber,componentNumber,value,err) + SUBROUTINE cmfe_Field_ParameterSetUpdateElementSPNumber(contextUserNumber,regionUserNumber,fieldUserNumber,variableType, & + & fieldSetType,userElementNumber,componentNumber,value,err) !DLLEXPORT(cmfe_Field_ParameterSetUpdateElementSPNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Updates the given parameter set with the given double precision value for the element of the field variable component for a field identified by a user number. - SUBROUTINE cmfe_Field_ParameterSetUpdateElementDPNumber(regionUserNumber,fieldUserNumber,variableType,fieldSetType, & - & userElementNumber,componentNumber,value,err) + SUBROUTINE cmfe_Field_ParameterSetUpdateElementDPNumber(contextUserNumber,regionUserNumber,fieldUserNumber,variableType, & + & fieldSetType,userElementNumber,componentNumber,value,err) !DLLEXPORT(cmfe_Field_ParameterSetUpdateElementDPNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Updates the given parameter set with the given logical value for the element of the field variable component for a field identified by a user number. - SUBROUTINE cmfe_Field_ParameterSetUpdateElementLNumber(regionUserNumber,fieldUserNumber,variableType,fieldSetType, & - & userElementNumber,componentNumber,value,err) + SUBROUTINE cmfe_Field_ParameterSetUpdateElementLNumber(contextUserNumber,regionUserNumber,fieldUserNumber,variableType, & + & fieldSetType,userElementNumber,componentNumber,value,err) !DLLEXPORT(cmfe_Field_ParameterSetUpdateElementLNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Finishes the parameter set update for a field variable for a field identified by a user number. - SUBROUTINE cmfe_Field_ParameterSetUpdateFinishNumber(regionUserNumber,fieldUserNumber,variableType,fieldSetType,err) + SUBROUTINE cmfe_Field_ParameterSetUpdateFinishNumber(contextUserNumber,regionUserNumber,fieldUserNumber,variableType, & + & fieldSetType,err) !DLLEXPORT(cmfe_Field_ParameterSetUpdateFinishNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Updates the given parameter set with the given integer value for the node and derivative of the field variable component for a field identified by a user number. - SUBROUTINE cmfe_Field_ParameterSetUpdateNodeIntgNumber(regionUserNumber,fieldUserNumber,variableType,fieldSetType, & - & versionNumber,derivativeNumber,userNodeNumber,componentNumber,value,err) + SUBROUTINE cmfe_Field_ParameterSetUpdateNodeIntgNumber(contextUserNumber,regionUserNumber,fieldUserNumber,variableType, & + & fieldSetType,versionNumber,derivativeNumber,userNodeNumber,componentNumber,value,err) !DLLEXPORT(cmfe_Field_ParameterSetUpdateNodeIntgNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Updates the given parameter set with the given single precision value for the node and derivative of the field variable component for a field identified by a user number. - SUBROUTINE cmfe_Field_ParameterSetUpdateNodeSPNumber(regionUserNumber,fieldUserNumber,variableType,fieldSetType, & - & versionNumber,derivativeNumber,userNodeNumber,componentNumber,value,err) + SUBROUTINE cmfe_Field_ParameterSetUpdateNodeSPNumber(contextUserNumber,regionUserNumber,fieldUserNumber,variableType, & + & fieldSetType,versionNumber,derivativeNumber,userNodeNumber,componentNumber,value,err) !DLLEXPORT(cmfe_Field_ParameterSetUpdateNodeSPNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Updates the given parameter set with the given double precision value for the node and derivative of the field variable component for a field identified by a user number. - SUBROUTINE cmfe_Field_ParameterSetUpdateNodeDPNumber(regionUserNumber,fieldUserNumber,variableType,fieldSetType, & - & versionNumber,derivativeNumber,userNodeNumber,componentNumber,value,err) + SUBROUTINE cmfe_Field_ParameterSetUpdateNodeDPNumber(contextUserNumber,regionUserNumber,fieldUserNumber,variableType, & + & fieldSetType,versionNumber,derivativeNumber,userNodeNumber,componentNumber,value,err) !DLLEXPORT(cmfe_Field_ParameterSetUpdateNodeDPNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Updates the given parameter set with the given logical value for the node and derivative of the field variable component for a field identified by a user number. - SUBROUTINE cmfe_Field_ParameterSetUpdateNodeLNumber(regionUserNumber,fieldUserNumber,variableType,fieldSetType, & - & versionNumber,derivativeNumber,userNodeNumber,componentNumber,value,err) + SUBROUTINE cmfe_Field_ParameterSetUpdateNodeLNumber(contextUserNumber,regionUserNumber,fieldUserNumber,variableType, & + & fieldSetType,versionNumber,derivativeNumber,userNodeNumber,componentNumber,value,err) !DLLEXPORT(cmfe_Field_ParameterSetUpdateNodeLNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Updates the given parameter set with the given integer value for the element Gauss point of the field variable component for a field identified by a user number. - SUBROUTINE cmfe_Field_ParameterSetUpdateGaussPointIntgNumber(regionUserNumber,fieldUserNumber,variableType,fieldSetType, & - & gaussPointNumber,userElementNumber,componentNumber,value,err) + SUBROUTINE cmfe_Field_ParameterSetUpdateGaussPointIntgNumber(contextUserNumber,regionUserNumber,fieldUserNumber,variableType, & + & fieldSetType,gaussPointNumber,userElementNumber,componentNumber,value,err) !DLLEXPORT(cmfe_Field_ParameterSetUpdateGaussPointIntgNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Updates the given parameter set with the given single precision value for the element Gauss point of the field variable component for a field identified by a user number. - SUBROUTINE cmfe_Field_ParameterSetUpdateGaussPointSPNumber(regionUserNumber,fieldUserNumber,variableType,fieldSetType, & - & gaussPointNumber,userElementNumber,componentNumber,value,err) + SUBROUTINE cmfe_Field_ParameterSetUpdateGaussPointSPNumber(contextUserNumber,regionUserNumber,fieldUserNumber,variableType, & + & fieldSetType,gaussPointNumber,userElementNumber,componentNumber,value,err) !DLLEXPORT(cmfe_Field_ParameterSetUpdateGaussPointSPNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Updates the given parameter set with the given double precision value for the element Gauss point of the field variable component for a field identified by a user number. - SUBROUTINE cmfe_Field_ParameterSetUpdateGaussPointDPNumber(regionUserNumber,fieldUserNumber,variableType,fieldSetType, & - & gaussPointNumber,userElementNumber,componentNumber,value,err) + SUBROUTINE cmfe_Field_ParameterSetUpdateGaussPointDPNumber(contextUserNumber,regionUserNumber,fieldUserNumber,variableType, & + & fieldSetType,gaussPointNumber,userElementNumber,componentNumber,value,err) !DLLEXPORT(cmfe_Field_ParameterSetUpdateGaussPointDPNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Updates the given parameter set with the given logical value for the element Gauss point of the field variable component for a field identified by a user number. - SUBROUTINE cmfe_Field_ParameterSetUpdateGaussPointLNumber(regionUserNumber,fieldUserNumber,variableType,fieldSetType, & - & gaussPointNumber,userElementNumber,componentNumber,value,err) + SUBROUTINE cmfe_Field_ParameterSetUpdateGaussPointLNumber(contextUserNumber,regionUserNumber,fieldUserNumber,variableType, & + & fieldSetType,gaussPointNumber,userElementNumber,componentNumber,value,err) !DLLEXPORT(cmfe_Field_ParameterSetUpdateGaussPointLNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Interpolates the given parameter set at a specified xi location for the specified element and derviative and returns double precision values for a field identified by a user number. - SUBROUTINE cmfe_Field_ParameterSetInterpolateSingleXiDPNumber(regionUserNumber,fieldUserNumber,variableType,fieldSetType, & - & derivativeNumber,userElementNumber,xi,values,err) + SUBROUTINE cmfe_Field_ParameterSetInterpolateSingleXiDPNumber(contextUserNumber,regionUserNumber,fieldUserNumber,variableType, & + & fieldSetType,derivativeNumber,userElementNumber,xi,values,err) !DLLEXPORT(cmfe_Field_ParameterSetInterpolateSingleXiDPNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Interpolates the given parameter set at a specified set of xi locations for the specified element and derviative and returns double precision values for a field identified by a user number. - SUBROUTINE cmfe_Field_ParameterSetInterpolateMultipleXiDPNumber(regionUserNumber,fieldUserNumber,variableType,fieldSetType, & - & derivativeNumber,userElementNumber,xi,values,err) + SUBROUTINE cmfe_Field_ParameterSetInterpolateMultipleXiDPNumber(contextUserNumber,regionUserNumber,fieldUserNumber,variableType, & + & fieldSetType,derivativeNumber,userElementNumber,xi,values,err) !DLLEXPORT(cmfe_Field_ParameterSetInterpolateMultipleXiDPNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Interpolates the given parameter set at a specified Gauss point for the specified element and derviative and returns double precision values for a or a field identified by a user number. - SUBROUTINE cmfe_Field_ParameterSetInterpolateSingleGaussDPNumber(regionUserNumber,fieldUserNumber,variableType,fieldSetType, & - & derivativeNumber,userElementNumber,quadratureScheme,GaussPoint,values,err) + SUBROUTINE cmfe_Field_ParameterSetInterpolateSingleGaussDPNumber(contextUserNumber,regionUserNumber,fieldUserNumber, & + & variableType,fieldSetType,derivativeNumber,userElementNumber,quadratureScheme,GaussPoint,values,err) !DLLEXPORT(cmfe_Field_ParameterSetInterpolateSingleGaussDPNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Interpolates the given parameter set at a specified set of Gauss points for the specified element and derviative and returns double precision values for a or a field identified by a user number. If no Gauss points are specified then all Gauss points are interpolated. - SUBROUTINE cmfe_Field_ParameterSetInterpolateMultipleGaussDPNumber(regionUserNumber,fieldUserNumber,variableType,fieldSetType, & - & derivativeNumber,userElementNumber,quadratureScheme,GaussPoints,values,err) + SUBROUTINE cmfe_Field_ParameterSetInterpolateMultipleGaussDPNumber(contextUserNumber,regionUserNumber,fieldUserNumber, & + & variableType,fieldSetType,derivativeNumber,userElementNumber,quadratureScheme,GaussPoints,values,err) !DLLEXPORT(cmfe_Field_ParameterSetInterpolateMultipleGaussDPNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Starts the parameter set update for a field variable for a field identified by a user number. - SUBROUTINE cmfe_Field_ParameterSetUpdateStartNumber(regionUserNumber,fieldUserNumber,variableType,fieldSetType,err) + SUBROUTINE cmfe_Field_ParameterSetUpdateStartNumber(contextUserNumber,regionUserNumber,fieldUserNumber,variableType, & + & fieldSetType,err) !DLLEXPORT(cmfe_Field_ParameterSetUpdateStartNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Copy the parameters from the parameter set of a component of a field variable to the paramters of a parameter set of !>a component of another field variable, where both fields are identified by user numbers. - SUBROUTINE cmfe_Field_ParametersToFieldParametersComponentCopyNumber(fromRegionUserNumber,fromFieldUserNumber,fromVariableType, & - & fromParameterSetType, fromComponentNumber,toRegionUserNumber,toFieldUserNumber,toVariableType,toParameterSetType, & - & toComponentNumber,err) + SUBROUTINE cmfe_Field_ParametersToFieldParametersComponentCopyNumber(contextUserNumber,fromRegionUserNumber, & + & fromFieldUserNumber,fromVariableType,fromParameterSetType,fromComponentNumber,toRegionUserNumber, & + & toFieldUserNumber,toVariableType,toParameterSetType,toComponentNumber,err) !DLLEXPORT(cmfe_Field_ParametersToFieldParametersComponentCopyNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the scaling type for a field identified by a user number. - SUBROUTINE cmfe_Field_ScalingTypeGetNumber(regionUserNumber,fieldUserNumber,scalingType,err) + SUBROUTINE cmfe_Field_ScalingTypeGetNumber(contextUserNumber,regionUserNumber,fieldUserNumber,scalingType,err) !DLLEXPORT(cmfe_Field_ScalingTypeGetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the scaling type for a field identified by a user number. - SUBROUTINE cmfe_Field_ScalingTypeSetNumber(regionUserNumber,fieldUserNumber,scalingType,err) + SUBROUTINE cmfe_Field_ScalingTypeSetNumber(contextUserNumber,regionUserNumber,fieldUserNumber,scalingType,err) !DLLEXPORT(cmfe_Field_ScalingTypeSetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the field type for a field identified by a user number. - SUBROUTINE cmfe_Field_TypeGetNumber(regionUserNumber,fieldUserNumber,fieldType,err) + SUBROUTINE cmfe_Field_TypeGetNumber(contextUserNumber,regionUserNumber,fieldUserNumber,fieldType,err) !DLLEXPORT(cmfe_Field_TypeGetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the field type for a field identified by a user number. - SUBROUTINE cmfe_Field_TypeSetNumber(regionUserNumber,fieldUserNumber,fieldType,err) + SUBROUTINE cmfe_Field_TypeSetNumber(contextUserNumber,regionUserNumber,fieldUserNumber,fieldType,err) !DLLEXPORT(cmfe_Field_TypeSetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the character string label for a field variable for a field identified by a user number. - SUBROUTINE cmfe_Field_VariableLabelGetCNumber(regionUserNumber,fieldUserNumber,variableType,label,err) + SUBROUTINE cmfe_Field_VariableLabelGetCNumber(contextUserNumber,regionUserNumber,fieldUserNumber,variableType,label,err) !DLLEXPORT(cmfe_Field_VariableLabelGetCNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the varying string label for a field variable for a field identified by a user number. - SUBROUTINE cmfe_Field_VariableLabelGetVSNumber(regionUserNumber,fieldUserNumber,variableType,label,err) + SUBROUTINE cmfe_Field_VariableLabelGetVSNumber(contextUserNumber,regionUserNumber,fieldUserNumber,variableType,label,err) !DLLEXPORT(cmfe_Field_VariableLabelGetVSNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the character string label for a field variable for a field identified by a user number. - SUBROUTINE cmfe_Field_VariableLabelSetCNumber(regionUserNumber,fieldUserNumber,variableType,label,err) + SUBROUTINE cmfe_Field_VariableLabelSetCNumber(contextUserNumber,regionUserNumber,fieldUserNumber,variableType,label,err) !DLLEXPORT(cmfe_Field_VariableLabelSetCNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the varying string label for a field variable for a field identified by a user number. - SUBROUTINE cmfe_Field_VariableLabelSetVSNumber(regionUserNumber,fieldUserNumber,variableType,label,err) + SUBROUTINE cmfe_Field_VariableLabelSetVSNumber(contextUserNumber,regionUserNumber,fieldUserNumber,variableType,label,err) !DLLEXPORT(cmfe_Field_VariableLabelSetVSNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the field variable types for a field identified by a user number. - SUBROUTINE cmfe_Field_VariableTypesGetNumber(regionUserNumber,fieldUserNumber,variableTypes,err) + SUBROUTINE cmfe_Field_VariableTypesGetNumber(contextUserNumber,regionUserNumber,fieldUserNumber,variableTypes,err) !DLLEXPORT(cmfe_Field_VariableTypesGetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the field variable types for a field identified by a user number. - SUBROUTINE cmfe_Field_VariableTypesSetNumber(regionUserNumber,fieldUserNumber,variableTypes,err) + SUBROUTINE cmfe_Field_VariableTypesSetNumber(contextUserNumber,regionUserNumber,fieldUserNumber,variableTypes,err) !DLLEXPORT(cmfe_Field_VariableTypesSetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the basis for a generated mesh on a region identified by a user number. - SUBROUTINE cmfe_GeneratedMesh_BasisGetNumber(regionUserNumber,generatedMeshUserNumber,basisUserNumbers,err) + SUBROUTINE cmfe_GeneratedMesh_BasisGetNumber(contextUserNumber,regionUserNumber,generatedMeshUserNumber,basisUserNumbers,err) !DLLEXPORT(cmfe_GeneratedMesh_BasisGetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the basis for a generated mesh on a region identified by a user number. - SUBROUTINE cmfe_GeneratedMesh_BasisSetNumber0(regionUserNumber,generatedMeshUserNumber,basisUserNumber,err) + SUBROUTINE cmfe_GeneratedMesh_BasisSetNumber0(contextUserNumber,regionUserNumber,generatedMeshUserNumber,basisUserNumber,err) !DLLEXPORT(cmfe_GeneratedMesh_BasisSetNumber0) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !basis - CALL GENERATED_MESH_BASIS_SET(generatedMesh,bases,err,error,*999) + CALL cmfe_GeneratedMesh_BasisSetNumber1(contextUserNumber,regionUserNumber,generatedMeshUserNumber,[basisUserNumber],err) EXITS("cmfe_GeneratedMesh_BasisSetNumber0") RETURN @@ -38120,10 +41479,11 @@ END SUBROUTINE cmfe_GeneratedMesh_BasisSetNumber0 ! !>Sets/changes the basis for a generated mesh on a region identified by a user number. - SUBROUTINE cmfe_GeneratedMesh_BasisSetNumber1(regionUserNumber,generatedMeshUserNumber,basisUserNumbers,err) + SUBROUTINE cmfe_GeneratedMesh_BasisSetNumber1(contextUserNumber,regionUserNumber,generatedMeshUserNumber,basisUserNumbers,err) !DLLEXPORT(cmfe_GeneratedMesh_BasisSetNumber1) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the base vectors for a generated mesh on a region identified by a user number. - SUBROUTINE cmfe_GeneratedMesh_BaseVectorsSetNumber(regionUserNumber,generatedMeshUserNumber,baseVectors,err) + SUBROUTINE cmfe_GeneratedMesh_BaseVectorsSetNumber(contextUserNumber,regionUserNumber,generatedMeshUserNumber,baseVectors,err) !DLLEXPORT(cmfe_GeneratedMesh_BaseVectorsSetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Finishes the creation of a generated mesh on a region identified by a user number. - SUBROUTINE cmfe_GeneratedMesh_CreateFinishNumber(regionUserNumber,generatedMeshUserNumber,meshUserNumber,err) + SUBROUTINE cmfe_GeneratedMesh_CreateFinishNumber(contextUserNumber,regionUserNumber,generatedMeshUserNumber,meshUserNumber,err) !DLLEXPORT(cmfe_GeneratedMesh_CreateFinishNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Starts the creation of a generated mesh on a region identified by a user number. - SUBROUTINE cmfe_GeneratedMesh_CreateStartNumber(generatedMeshUserNumber,regionUserNumber,err) + SUBROUTINE cmfe_GeneratedMesh_CreateStartNumber(generatedMeshUserNumber,contextUserNumber,regionUserNumber,err) !DLLEXPORT(cmfe_GeneratedMesh_CreateStartNumber) !Argument variables INTEGER(INTG), INTENT(IN) :: generatedMeshUserNumber !Destroys a generated mesh on a region identified by a user number. - SUBROUTINE cmfe_GeneratedMesh_DestroyNumber(regionUserNumber,generatedMeshUserNumber,err) + SUBROUTINE cmfe_GeneratedMesh_DestroyNumber(contextUserNumber,regionUserNumber,generatedMeshUserNumber,err) !DLLEXPORT(cmfe_GeneratedMesh_DestroyNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the extent for a generated mesh on a region identified by a user number. - SUBROUTINE cmfe_GeneratedMesh_ExtentGetNumber(regionUserNumber,generatedMeshUserNumber,extent,err) + SUBROUTINE cmfe_GeneratedMesh_ExtentGetNumber(contextUserNumber,regionUserNumber,generatedMeshUserNumber,extent,err) !DLLEXPORT(cmfe_GeneratedMesh_ExtentGetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the extent for a generated mesh on a region identified by a user number. - SUBROUTINE cmfe_GeneratedMesh_ExtentSetNumber(regionUserNumber,generatedMeshUserNumber,extent,err) + SUBROUTINE cmfe_GeneratedMesh_ExtentSetNumber(contextUserNumber,regionUserNumber,generatedMeshUserNumber,extent,err) !DLLEXPORT(cmfe_GeneratedMesh_ExtentSetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the number of elements for a generated mesh on a region identified by a user number. - SUBROUTINE cmfe_GeneratedMesh_NumberOfElementsGetNumber(regionUserNumber,generatedMeshUserNumber,numberOfElements,err) + SUBROUTINE cmfe_GeneratedMesh_NumberOfElementsGetNumber(contextUserNumber,regionUserNumber,generatedMeshUserNumber, & + & numberOfElements,err) !DLLEXPORT(cmfe_GeneratedMesh_NumberOfElementsGetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the number of elements for a generated mesh on a region identified by a user number. - SUBROUTINE cmfe_GeneratedMesh_NumberOfElementsSetNumber(regionUserNumber,generatedMeshUserNumber,numberOfElements,err) + SUBROUTINE cmfe_GeneratedMesh_NumberOfElementsSetNumber(contextUserNumber,regionUserNumber,generatedMeshUserNumber, & + & numberOfElements,err) !DLLEXPORT(cmfe_GeneratedMesh_NumberOfElementsSetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the origin of a generated mesh on a region identified by a user number. - SUBROUTINE cmfe_GeneratedMesh_OriginGetNumber(regionUserNumber,generatedMeshUserNumber,origin,err) + SUBROUTINE cmfe_GeneratedMesh_OriginGetNumber(contextUserNumber,regionUserNumber,generatedMeshUserNumber,origin,err) !DLLEXPORT(cmfe_GeneratedMesh_OriginGetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the origin of a generated mesh on a region identified by a user number. - SUBROUTINE cmfe_GeneratedMesh_OriginSetNumber(regionUserNumber,generatedMeshUserNumber,origin,err) + SUBROUTINE cmfe_GeneratedMesh_OriginSetNumber(contextUserNumber,regionUserNumber,generatedMeshUserNumber,origin,err) !DLLEXPORT(cmfe_GeneratedMesh_OriginSetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the type of a generated mesh on a region identified by a user number. - SUBROUTINE cmfe_GeneratedMesh_TypeGetNumber(regionUserNumber,generatedMeshUserNumber,generatedMeshType,err) + SUBROUTINE cmfe_GeneratedMesh_TypeGetNumber(contextUserNumber,regionUserNumber,generatedMeshUserNumber,generatedMeshType,err) !DLLEXPORT(cmfe_GeneratedMesh_TypeGetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the type of a generated mesh on a region identified by a user number. - SUBROUTINE cmfe_GeneratedMesh_TypeSetNumber(regionUserNumber,generatedMeshUserNumber,generatedMeshType,err) + SUBROUTINE cmfe_GeneratedMesh_TypeSetNumber(contextUserNumber,regionUserNumber,generatedMeshUserNumber,generatedMeshType,err) !DLLEXPORT(cmfe_GeneratedMesh_TypeSetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Calculates and sets the geometric field parameters for a generated mesh identified by a user number. - SUBROUTINE cmfe_GeneratedMesh_GeometricParametersCalculateNumber(regionUserNumber,generatedMeshUserNumber, & + SUBROUTINE cmfe_GeneratedMesh_GeometricParametersCalculateNumber(contextUserNumber,regionUserNumber,generatedMeshUserNumber, & & fieldUserNumber,err) !DLLEXPORT(cmfe_GeneratedMesh_GeometricParametersCalculateNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns a list of the nodes belonging to a surface, and their normal xi direction, of a generated mesh identified by an object. - SUBROUTINE cmfe_GeneratedMesh_SurfaceGetNumber0(regionUserNumber,generatedMeshUserNumber,surfaceType,surfaceNodes,normalXi,err) + SUBROUTINE cmfe_GeneratedMesh_SurfaceGetNumber0(contextUserNumber,regionUserNumber,generatedMeshUserNumber,surfaceType, & + & surfaceNodes,normalXi,err) !DLLEXPORT(cmfe_GeneratedMesh_SurfaceGetNumber0) !Argument variables INTEGER(INTG), INTENT(IN) :: regionUserNumber !Returns a list of the nodes belonging to a surface, and their normal xi direction, of a generated mesh identified by an object. - SUBROUTINE cmfe_GeneratedMesh_SurfaceGetNumber1(regionUserNumber,meshComponent,generatedMeshUserNumber,surfaceType, & - & surfaceNodes,normalXi,err) + SUBROUTINE cmfe_GeneratedMesh_SurfaceGetNumber1(contextUserNumber,regionUserNumber,meshComponent,generatedMeshUserNumber, & + & surfaceType,surfaceNodes,normalXi,err) !DLLEXPORT(cmfe_GeneratedMesh_SurfaceGetNumber1) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Creates a mesh embedding - SUBROUTINE cmfe_MeshEmbedding_CreateNumber(regionOneUserNumber,regionTwoUserNumber,meshEmbedding,parentMeshUserNumber, & - & childMeshUserNumber,err) + SUBROUTINE cmfe_MeshEmbedding_CreateNumber(contextUserNumber,regionOneUserNumber,regionTwoUserNumber,meshEmbedding, & + & parentMeshUserNumber,childMeshUserNumber,err) !DLLEXPORT(cmfe_MeshEmbedding_CreateNumber) + !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Finishes the creation of an interface identified by a user number. - SUBROUTINE cmfe_Interface_CreateFinishNumber(regionUserNumber,interfaceUserNumber,err) + SUBROUTINE cmfe_Interface_CreateFinishNumber(contextUserNumber,regionUserNumber,interfaceUserNumber,err) !DLLEXPORT(cmfe_Interface_CreateFinishNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Starts the creation of an interface identified by a user number. - SUBROUTINE cmfe_Interface_CreateStartNumber(interfaceUserNumber,regionUserNumber,err) + SUBROUTINE cmfe_Interface_CreateStartNumber(interfaceUserNumber,contextUserNumber,regionUserNumber,err) !DLLEXPORT(cmfe_Interface_CreateStartNumber) !Argument variables INTEGER(INTG), INTENT(IN) :: interfaceUserNumber !Sets/changes the coordinate system for an interface identified by an user number. - SUBROUTINE cmfe_Interface_CoordinateSystemSetNumber(parentRegionUserNumber,interfaceUserNumber,coordinateSystemUserNumber,err) + SUBROUTINE cmfe_Interface_CoordinateSystemSetNumber(contextUserNumber,parentRegionUserNumber,interfaceUserNumber, & + & coordinateSystemUserNumber,err) !DLLEXPORT(cmfe_Interface_CoordinateSystemSetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the coordinate system for an interface identified by an user number. - SUBROUTINE cmfe_Interface_CoordinateSystemGetNumber(parentRegionUserNumber,interfaceUserNumber,coordinateSystemUserNumber,err) + SUBROUTINE cmfe_Interface_CoordinateSystemGetNumber(contextUserNumber,parentRegionUserNumber,interfaceUserNumber, & + & coordinateSystemUserNumber,err) !DLLEXPORT(cmfe_Interface_CoordinateSystemGetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Destroys an interface identified by a user number. - SUBROUTINE cmfe_Interface_DestroyNumber(regionUserNumber,interfaceUserNumber,err) + SUBROUTINE cmfe_Interface_DestroyNumber(contextUserNumber,regionUserNumber,interfaceUserNumber,err) !DLLEXPORT(cmfe_Interface_DestroyNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the character string label for an interface identified by an user number. - SUBROUTINE cmfe_Interface_LabelGetCNumber(parentRegionUserNumber,interfaceUserNumber,label,err) + SUBROUTINE cmfe_Interface_LabelGetCNumber(contextUserNumber,parentRegionUserNumber,interfaceUserNumber,label,err) !DLLEXPORT(cmfe_Interface_LabelGetCNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the varying string label for an interface identified by an user number. - SUBROUTINE cmfe_Interface_LabelGetVSNumber(parentRegionUserNumber,interfaceUserNumber,label,err) + SUBROUTINE cmfe_Interface_LabelGetVSNumber(contextUserNumber,parentRegionUserNumber,interfaceUserNumber,label,err) !DLLEXPORT(cmfe_Interface_LabelGetVSNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the character string label for an interface identified by an user number. - SUBROUTINE cmfe_Interface_LabelSetCNumber(parentRegionUserNumber,interfaceUserNumber,label,err) + SUBROUTINE cmfe_Interface_LabelSetCNumber(contextUserNumber,parentRegionUserNumber,interfaceUserNumber,label,err) !DLLEXPORT(cmfe_Interface_LabelSetCNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the varying string label for an interface identified by an user number. - SUBROUTINE cmfe_Interface_LabelSetVSNumber(parentRegionUserNumber,interfaceUserNumber,label,err) + SUBROUTINE cmfe_Interface_LabelSetVSNumber(contextUserNumber,parentRegionUserNumber,interfaceUserNumber,label,err) !DLLEXPORT(cmfe_Interface_LabelSetVSNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Adds a mesh to be coupled in an interface identified by a user number. - SUBROUTINE cmfe_Interface_MeshAddNumber(interfaceRegionUserNumber,interfaceUserNumber,meshRegionUserNumber, & + SUBROUTINE cmfe_Interface_MeshAddNumber(contextUserNumber,interfaceRegionUserNumber,interfaceUserNumber,meshRegionUserNumber, & & meshUserNumber,meshIndex,err) !DLLEXPORT(cmfe_Interface_MeshAddNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Finishes the creation of an interface coupled mesh connectivity identified by a user number. - SUBROUTINE cmfe_InterfaceMeshConnectivity_CreateFinishNumber(regionUserNumber,interfaceUserNumber,err) + SUBROUTINE cmfe_InterfaceMeshConnectivity_CreateFinishNumber(contextUserNumber,regionUserNumber,interfaceUserNumber,err) !DLLEXPORT(cmfe_InterfaceMeshConnectivity_CreateFinishNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Starts the creation of an interface meshes connectivity identified by a user number. - SUBROUTINE cmfe_InterfaceMeshConnectivity_CreateStartNumber(regionUserNumber,interfaceUserNumber,meshNumber,err) + SUBROUTINE cmfe_InterfaceMeshConnectivity_CreateStartNumber(contextUserNumber,regionUserNumber,interfaceUserNumber, & + & meshNumber,err) !DLLEXPORT(cmfe_InterfaceMeshConnectivity_CreateStartNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets the connectivity between an element in a coupled mesh to an element in the interface mesh - SUBROUTINE cmfe_InterfaceMeshConnectivity_ElementNumberSetNumber(regionUserNumber,interfaceUserNumber, & + SUBROUTINE cmfe_InterfaceMeshConnectivity_ElementNumberSetNumber(contextUserNumber,regionUserNumber,interfaceUserNumber, & & interfaceElementNumber,coupledMeshIndexNumber,coupledMeshElementNumber,err) !DLLEXPORT(cmfe_InterfaceMeshConnectivity_ElementNumberSetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets the connectivity between an element in a coupled mesh to an element in the interface mesh - SUBROUTINE cmfe_InterfaceMeshConnectivity_NodeNumberSetNumber(regionUserNumber,interfaceUserNumber, & + SUBROUTINE cmfe_InterfaceMeshConnectivity_NodeNumberSetNumber(contextUserNumber,regionUserNumber,interfaceUserNumber, & & interfaceElementNumber,coupledMeshIndexNumber,coupledMeshElementNumber,err) !DLLEXPORT(cmfe_InterfaceMeshConnectivity_NodeNumberSetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets the mapping from an xi position of a coupled mesh element to a node of an interface mesh element - SUBROUTINE cmfe_InterfaceMeshConnectivity_ElementXiSetNumber(regionUserNumber,interfaceUserNumber,interfaceElementNumber, & - & coupledMeshIndexNumber,coupledMeshElementNumber,interfaceMeshLocalNodeNumber,interfaceMeshComponentNodeNumber,xi,err) + SUBROUTINE cmfe_InterfaceMeshConnectivity_ElementXiSetNumber(contextUserNumber,regionUserNumber,interfaceUserNumber, & + & interfaceElementNumber,coupledMeshIndexNumber,coupledMeshElementNumber,interfaceMeshLocalNodeNumber, & + & interfaceMeshComponentNodeNumber,xi,err) !DLLEXPORT(cmfe_InterfaceMeshConnectivity_ElementXiSetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Destroys an interface meshes connectivity identified by a user number. - SUBROUTINE cmfe_InterfaceMeshConnectivity_DestroyNumber(regionUserNumber,interfaceUserNumber,err) + SUBROUTINE cmfe_InterfaceMeshConnectivity_DestroyNumber(contextUserNumber,regionUserNumber,interfaceUserNumber,err) !DLLEXPORT(cmfe_InterfaceMeshConnectivity_DestroyNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Finishes the creation of an interface coupled mesh points connectivity identified by a user number. - SUBROUTINE cmfe_InterfacePointsConnectivity_CreateFinishNumber(regionUserNumber,interfaceUserNumber,err) + SUBROUTINE cmfe_InterfacePointsConnectivity_CreateFinishNumber(contextUserNumber,regionUserNumber,interfaceUserNumber,err) !DLLEXPORT(cmfe_InterfacePointsConnectivity_CreateFinishNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Starts the creation of an interface points connectivity identified by a user number. - SUBROUTINE cmfe_InterfacePointsConnectivity_CreateStartNumber(regionUserNumber,interfaceUserNumber,meshUserNumber, & - & dataPointsUserNumber,err) + SUBROUTINE cmfe_InterfacePointsConnectivity_CreateStartNumber(contextUserNumber,regionUserNumber,interfaceUserNumber, & + & meshUserNumber,dataPointsUserNumber,err) !DLLEXPORT(cmfe_InterfacePointsConnectivity_CreateStartNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Destroys an interface points connectivity identified by a user number. - SUBROUTINE cmfe_InterfacePointsConnectivity_DestroyNumber(regionUserNumber,interfaceUserNumber,err) + SUBROUTINE cmfe_InterfacePointsConnectivity_DestroyNumber(contextUserNumber,regionUserNumber,interfaceUserNumber,err) !DLLEXPORT(cmfe_InterfacePointsConnectivity_DestroyNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Gets coupled mesh element number that the data point in the interface is connected to - SUBROUTINE cmfe_InterfacePointsConnectivity_ElementNumberGetNumber(regionUserNumber,interfaceUserNumber, & + SUBROUTINE cmfe_InterfacePointsConnectivity_ElementNumberGetNumber(contextUserNumber,regionUserNumber,interfaceUserNumber, & & interfaceDataPointIndexNumber,coupledMeshIndexNumber,meshComponentNumber,coupledMeshElementNumber,err) !DLLEXPORT(cmfe_InterfacePointsConnectivity_ElementNumberGetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets coupled mesh element number that the data point in the interface is connected to - SUBROUTINE cmfe_InterfacePointsConnectivity_ElementNumberSetNumber(regionUserNumber,interfaceUserNumber, & + SUBROUTINE cmfe_InterfacePointsConnectivity_ElementNumberSetNumber(contextUserNumber,regionUserNumber,interfaceUserNumber, & & interfaceDataPointIndexNumber,coupledMeshIndexNumber,coupledMeshElementNumber,meshComponentNumber,err) !DLLEXPORT(cmfe_InterfacePointsConnectivity_ElementNumberSetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Gets the xi coordinate mapping between the data points in interface and xi coordinates in a coupled region mesh - SUBROUTINE cmfe_InterfacePointsConnectivity_PointXiGetNumber(regionUserNumber,interfaceUserNumber, & + SUBROUTINE cmfe_InterfacePointsConnectivity_PointXiGetNumber(contextUserNumber,regionUserNumber,interfaceUserNumber, & & interfaceDataPointIndexNumber,coupledMeshIndexNumber,xi,err) !DLLEXPORT(cmfe_InterfacePointsConnectivity_PointXiGetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets the xi coordinate mapping between the data points in interface and xi coordinates in a coupled region mesh - SUBROUTINE cmfe_InterfacePointsConnectivity_PointXiSetNumber(regionUserNumber,interfaceUserNumber, & + SUBROUTINE cmfe_InterfacePointsConnectivity_PointXiSetNumber(contextUserNumber,regionUserNumber,interfaceUserNumber, & & interfaceDataPointIndexNumber,coupledMeshIndexNumber,xi,err) !DLLEXPORT(cmfe_InterfacePointsConnectivity_PointXiSetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Update points connectivity with projection results, data projection identified by region user number - SUBROUTINE cmfe_InterfacePointsConnectivity_UpdateFromProjectionRNumber(regionUserNumber,interfaceUserNumber, & - & dataPointsRegionUserNumber,dataPointsUserNumber,dataProjectionUserNumber,coupledMeshIndex,err) + SUBROUTINE cmfe_InterfacePointsConnectivity_UpdateFromProjectionRNumber(contextUserNumber,regionUserNumber, & + & interfaceUserNumber,dataPointsRegionUserNumber,dataPointsUserNumber,dataProjectionUserNumber,coupledMeshIndex,err) !DLLEXPORT(cmfe_InterfacePointsConnectivity_UpdateFromProjectionRNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Update points connectivity with projection results, data projection identified by interface user number - SUBROUTINE cmfe_InterfacePointsConnectivity_UpdateFromProjectionINumber(regionUserNumber,interfaceUserNumber, & + SUBROUTINE cmfe_InterfacePointsConnectivity_UpdateFromProjectionINumber(contextUserNumber,regionUserNumber,interfaceUserNumber, & & dataPointsRegionUserNumber,dataPointsInterfaceUserNumber,dataPointsUserNumber,dataProjectionUserNumber,coupledMeshIndex,err) !DLLEXPORT(cmfe_InterfacePointsConnectivity_UpdateFromProjectionINumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Finishes the creation of an interface condition identified by an user number. - SUBROUTINE cmfe_InterfaceCondition_CreateFinishNumber(regionUserNumber,interfaceUserNumber,interfaceConditionUserNumber,err) + SUBROUTINE cmfe_InterfaceCondition_CreateFinishNumber(contextUserNumber,regionUserNumber,interfaceUserNumber, & + & interfaceConditionUserNumber,err) !DLLEXPORT(cmfe_InterfaceCondition_CreateFinishNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Starts the creation of an interface condition identified by a user number. - SUBROUTINE cmfe_InterfaceCondition_CreateStartNumber(interfaceConditionUserNumber,regionUserNumber,interfaceUserNumber, & - & geometricFieldUserNumber,err) + SUBROUTINE cmfe_InterfaceCondition_CreateStartNumber(interfaceConditionUserNumber,contextUserNumber,regionUserNumber, & + & interfaceUserNumber,geometricFieldUserNumber,err) !DLLEXPORT(cmfe_InterfaceCondition_CreateStartNumber) !Argument variables INTEGER(INTG), INTENT(IN) :: interfaceConditionUserNumber !Adds a dependent variable to an interface condition identified by a user number. - SUBROUTINE cmfe_InterfaceCondition_DependentVariableAddNumber(interfaceRegionUserNumber,interfaceUserNumber, & + SUBROUTINE cmfe_InterfaceCondition_DependentVariableAddNumber(contextUserNumber,interfaceRegionUserNumber,interfaceUserNumber, & & interfaceConditionUserNumber,meshIndex,equationsSetRegionUserNumber,equationsSetUserNumber,variableType,err) !DLLEXPORT(cmfe_InterfaceCondition_DependentVariableAddNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Destroys an interface condition identified by a user number. - SUBROUTINE cmfe_InterfaceCondition_DestroyNumber(regionUserNumber,interfaceUserNumber,interfaceConditionUserNumber,err) + SUBROUTINE cmfe_InterfaceCondition_DestroyNumber(contextUserNumber,regionUserNumber,interfaceUserNumber, & + & interfaceConditionUserNumber,err) !DLLEXPORT(cmfe_InterfaceCondition_DestroyNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Finishes the creation of equations for an interface condition identified by an user number. - SUBROUTINE cmfe_InterfaceCondition_EquationsCreateFinishNumber(regionUserNumber,interfaceUserNumber, & + SUBROUTINE cmfe_InterfaceCondition_EquationsCreateFinishNumber(contextUserNumber,regionUserNumber,interfaceUserNumber, & & interfaceConditionUserNumber,err) !DLLEXPORT(cmfe_InterfaceCondition_EquationsCreateFinishNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Starts the creation of interface equations for an interface condition identified by a user number. - SUBROUTINE cmfe_InterfaceCondition_EquationsCreateStartNumber(regionUserNumber,interfaceUserNumber,interfaceConditionUserNumber, & - & err) + SUBROUTINE cmfe_InterfaceCondition_EquationsCreateStartNumber(contextUserNumber,regionUserNumber,interfaceUserNumber, & + & interfaceConditionUserNumber,err) !DLLEXPORT(cmfe_InterfaceCondition_EquationsCreateStartNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Destroys interface equations for an interface condition identified by a user number. - SUBROUTINE cmfe_InterfaceCondition_EquationsDestroyNumber(regionUserNumber,interfaceUserNumber,interfaceConditionUserNumber,err) + SUBROUTINE cmfe_InterfaceCondition_EquationsDestroyNumber(contextUserNumber,regionUserNumber,interfaceUserNumber, & + & interfaceConditionUserNumber,err) !DLLEXPORT(cmfe_InterfaceCondition_EquationsDestroyNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the integration type for an interface condition identified by a user number. - SUBROUTINE cmfe_InterfaceCondition_IntegrationTypeGetNumber(regionUserNumber,interfaceUserNumber,interfaceConditionUserNumber, & - & interfaceConditionIntegrationType,err) + SUBROUTINE cmfe_InterfaceCondition_IntegrationTypeGetNumber(contextUserNumber,regionUserNumber,interfaceUserNumber, & + & interfaceConditionUserNumber,interfaceConditionIntegrationType,err) !DLLEXPORT(cmfe_InterfaceCondition_IntegrationTypeGetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the integration type for an interface condition identified by a user number. - SUBROUTINE cmfe_InterfaceCondition_IntegrationTypeSetNumber(regionUserNumber,interfaceUserNumber,interfaceConditionUserNumber, & - & interfaceConditionIntegrationType,err) + SUBROUTINE cmfe_InterfaceCondition_IntegrationTypeSetNumber(contextUserNumber,regionUserNumber,interfaceUserNumber, & + & interfaceConditionUserNumber,interfaceConditionIntegrationType,err) !DLLEXPORT(cmfe_InterfaceCondition_IntegrationTypeSetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Finishes the creation of a Lagrange Multiplier Field for an interface condition identified by an user number. - SUBROUTINE cmfe_InterfaceCondition_LagrangeFieldCreateFinishNumber(regionUserNumber,interfaceUserNumber, & + SUBROUTINE cmfe_InterfaceCondition_LagrangeFieldCreateFinishNumber(contextUserNumber,regionUserNumber,interfaceUserNumber, & & interfaceConditionUserNumber,err) !DLLEXPORT(cmfe_InterfaceCondition_LagrangeFieldCreateFinishNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Starts the creation of a Lagrange multiplier field for an interface condition identified by a user number. - SUBROUTINE cmfe_InterfaceCondition_LagrangeFieldCreateStartNumber(regionUserNumber,interfaceUserNumber, & + SUBROUTINE cmfe_InterfaceCondition_LagrangeFieldCreateStartNumber(contextUserNumber,regionUserNumber,interfaceUserNumber, & & interfaceConditionUserNumber,lagrangeFieldUserNumber,err) !DLLEXPORT(cmfe_InterfaceCondition_LagrangeFieldCreateStartNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the character string label for an interface condition identified by a user number. - SUBROUTINE cmfe_InterfaceCondition_LabelGetCNumber(regionUserNumber,interfaceUserNumber,interfaceConditionUserNumber,label,err) + SUBROUTINE cmfe_InterfaceCondition_LabelGetCNumber(contextUserNumber,regionUserNumber,interfaceUserNumber, & + & interfaceConditionUserNumber,label,err) !DLLEXPORT(cmfe_InterfaceCondition_LabelGetCNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the varying string label for an interface condition identified by a user number. - SUBROUTINE cmfe_InterfaceCondition_LabelGetVSNumber(regionUserNumber,interfaceUserNumber,interfaceConditionUserNumber,label,err) + SUBROUTINE cmfe_InterfaceCondition_LabelGetVSNumber(contextUserNumber,regionUserNumber,interfaceUserNumber, & + & interfaceConditionUserNumber,label,err) !DLLEXPORT(cmfe_InterfaceCondition_LabelGetVSNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the character string label for an interface condition identified by a user number. - SUBROUTINE cmfe_InterfaceCondition_LabelSetCNumber(regionUserNumber,interfaceUserNumber,interfaceConditionUserNumber,label,err) + SUBROUTINE cmfe_InterfaceCondition_LabelSetCNumber(contextUserNumber,regionUserNumber,interfaceUserNumber, & + & interfaceConditionUserNumber,label,err) !DLLEXPORT(cmfe_InterfaceCondition_LabelSetCNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the varying string label for an interface condition identified by a user number. - SUBROUTINE cmfe_InterfaceCondition_LabelSetVSNumber(regionUserNumber,interfaceUserNumber,interfaceConditionUserNumber,label,err) + SUBROUTINE cmfe_InterfaceCondition_LabelSetVSNumber(contextUserNumber,regionUserNumber,interfaceUserNumber, & + & interfaceConditionUserNumber,label,err) !DLLEXPORT(cmfe_InterfaceCondition_LabelSetVSNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Gets the output type an interface condition identified by a user number. - SUBROUTINE cmfe_InterfaceCondition_OutputTypeGetNumber(regionUserNumber,interfaceUserNumber,interfaceConditionUserNumber, & - & outputType,err) + SUBROUTINE cmfe_InterfaceCondition_OutputTypeGetNumber(contextUserNumber,regionUserNumber,interfaceUserNumber, & + & interfaceConditionUserNumber,outputType,err) !DLLEXPORT(cmfe_InterfaceCondition_OutputTypeGetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the output type for an interface condition identified by a user number. - SUBROUTINE cmfe_InterfaceCondition_OutputTypeSetNumber(regionUserNumber,interfaceUserNumber,interfaceConditionUserNumber, & - & outputType,err) + SUBROUTINE cmfe_InterfaceCondition_OutputTypeSetNumber(contextUserNumber,regionUserNumber,interfaceUserNumber, & + & interfaceConditionUserNumber,outputType,err) !DLLEXPORT(cmfe_InterfaceCondition_OutputTypeSetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Finishes the creation of a penalty Field for an interface condition identified by an user number. - SUBROUTINE cmfe_InterfaceCondition_PenaltyFieldCreateFinishNumber(RegionUserNumber,InterfaceUserNumber, & - & InterfaceConditionUserNumber,err) + SUBROUTINE cmfe_InterfaceCondition_PenaltyFieldCreateFinishNumber(contextUserNumber,regionUserNumber,interfaceUserNumber, & + & interfaceConditionUserNumber,err) !DLLEXPORT(cmfe_InterfaceCondition_PenaltyFieldCreateFinishNumber) !Argument variables - INTEGER(INTG), INTENT(IN) :: RegionUserNumber !Finishes the creation of a penalty field for an interface condition identified by an object. - SUBROUTINE cmfe_InterfaceCondition_PenaltyFieldCreateFinishObj(InterfaceCondition,err) + SUBROUTINE cmfe_InterfaceCondition_PenaltyFieldCreateFinishObj(interfaceCondition,err) !DLLEXPORT(cmfe_InterfaceCondition_PenaltyFieldCreateFinishObj) !Argument variables - TYPE(cmfe_InterfaceConditionType), INTENT(IN) :: InterfaceCondition !Starts the creation of a penalty field for an interface condition identified by a user number. - SUBROUTINE cmfe_InterfaceCondition_PenaltyFieldCreateStartNumber(RegionUserNumber,InterfaceUserNumber, & - & InterfaceConditionUserNumber,PenaltyFieldUserNumber,err) + SUBROUTINE cmfe_InterfaceCondition_PenaltyFieldCreateStartNumber(contextUserNumber,regionUserNumber,interfaceUserNumber, & + & interfaceConditionUserNumber,penaltyFieldUserNumber,err) !DLLEXPORT(cmfe_InterfaceCondition_PenaltyFieldCreateStartNumber) !Argument variables - INTEGER(INTG), INTENT(IN) :: RegionUserNumber !Starts the creation of a penalty field for an interface condition identified by an object. - SUBROUTINE cmfe_InterfaceCondition_PenaltyFieldCreateStartObj(InterfaceCondition,PenaltyFieldUserNumber,PenaltyField,err) + SUBROUTINE cmfe_InterfaceCondition_PenaltyFieldCreateStartObj(interfaceCondition,penaltyFieldUserNumber,penaltyField,err) !DLLEXPORT(cmfe_InterfaceCondition_PenaltyFieldCreateStartObj) !Argument variables - TYPE(cmfe_InterfaceConditionType), INTENT(IN) :: InterfaceCondition !Returns the method for an interface condition identified by a user number. - SUBROUTINE cmfe_InterfaceCondition_MethodGetNumber(regionUserNumber,interfaceUserNumber,interfaceConditionUserNumber, & - & interfaceConditionMethod,err) + SUBROUTINE cmfe_InterfaceCondition_MethodGetNumber(contextUserNumber,regionUserNumber,interfaceUserNumber, & + & interfaceConditionUserNumber,interfaceConditionMethod,err) !DLLEXPORT(cmfe_InterfaceCondition_MethodGetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the method for an interface condition identified by a user number. - SUBROUTINE cmfe_InterfaceCondition_MethodSetNumber(regionUserNumber,interfaceUserNumber,interfaceConditionUserNumber, & - & interfaceConditionMethod,err) + SUBROUTINE cmfe_InterfaceCondition_MethodSetNumber(contextUserNumber,regionUserNumber,interfaceUserNumber, & + & interfaceConditionUserNumber,interfaceConditionMethod,err) !DLLEXPORT(cmfe_InterfaceCondition_MethodSetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the operator for an interface condition identified by a user number. - SUBROUTINE cmfe_InterfaceCondition_OperatorGetNumber(regionUserNumber,interfaceUserNumber,interfaceConditionUserNumber, & - & interfaceConditionOperator,err) + SUBROUTINE cmfe_InterfaceCondition_OperatorGetNumber(contextUserNumber,regionUserNumber,interfaceUserNumber, & + & interfaceConditionUserNumber,interfaceConditionOperator,err) !DLLEXPORT(cmfe_InterfaceCondition_OperatorGetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the operator for an interface condition identified by a user number. - SUBROUTINE cmfe_InterfaceCondition_OperatorSetNumber(regionUserNumber,interfaceUserNumber,interfaceConditionUserNumber, & - & interfaceConditionOperator,err) + SUBROUTINE cmfe_InterfaceCondition_OperatorSetNumber(contextUserNumber,regionUserNumber,interfaceUserNumber, & + & interfaceConditionUserNumber,interfaceConditionOperator,err) !DLLEXPORT(cmfe_InterfaceCondition_OperatorSetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the matrix time dependence type for an interface equations identified by a user number. - SUBROUTINE cmfe_InterfaceEquations_MatrixTimeDependenceTypeGetNumber0(regionUserNumber,interfaceUserNumber, & + SUBROUTINE cmfe_InterfaceEquations_MatrixTimeDependenceTypeGetNumber0(contextUserNumber,regionUserNumber,interfaceUserNumber, & & interfaceConditionUserNumber,interfaceMatrixIdx,hasTranspose,timeDependenceType,err) !DLLEXPORT(cmfe_InterfaceEquations_MatrixTimeDependenceTypeGetNumber0) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the matrix time dependence type for an interface equations identified by a user number. - SUBROUTINE cmfe_InterfaceEquations_MatrixTimeDependenceTypeGetNumber1(regionUserNumber,interfaceUserNumber, & + SUBROUTINE cmfe_InterfaceEquations_MatrixTimeDependenceTypeGetNumber1(contextUserNumber,regionUserNumber,interfaceUserNumber, & & interfaceConditionUserNumber,interfaceMatrixIdx,hasTranspose,timeDependenceTypes,err) !DLLEXPORT(cmfe_InterfaceEquations_MatrixTimeDependenceTypeGetNumber1) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the matrix time dependence type for an interface equations identified by a user number. - SUBROUTINE cmfe_InterfaceEquations_MatrixTimeDependenceTypeSetNumber0(regionUserNumber,interfaceUserNumber, & + SUBROUTINE cmfe_InterfaceEquations_MatrixTimeDependenceTypeSetNumber0(contextUserNumber,regionUserNumber,interfaceUserNumber, & & interfaceConditionUserNumber,interfaceMatrixIdx,hasTranspose,timeDependenceType,err) !DLLEXPORT(cmfe_InterfaceEquations_MatrixTimeDependenceTypeSetNumber0) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the matrix time dependence type for an interface equations identified by a user number. - SUBROUTINE cmfe_InterfaceEquations_MatrixTimeDependenceTypeSetNumber1(regionUserNumber,interfaceUserNumber, & + SUBROUTINE cmfe_InterfaceEquations_MatrixTimeDependenceTypeSetNumber1(contextUserNumber,regionUserNumber,interfaceUserNumber, & & interfaceConditionUserNumber,interfaceMatrixIdx,hasTranspose,timeDependenceTypes,err) !DLLEXPORT(cmfe_InterfaceEquations_MatrixTimeDependenceTypeSetNumber1) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the output type for an interface equations identified by a user number. - SUBROUTINE cmfe_InterfaceEquations_OutputTypeGetNumber(regionUserNumber,interfaceUserNumber,interfaceConditionUserNumber, & - & outputType,err) + SUBROUTINE cmfe_InterfaceEquations_OutputTypeGetNumber(contextUserNumber,regionUserNumber,interfaceUserNumber, & + & interfaceConditionUserNumber,outputType,err) !DLLEXPORT(cmfe_InterfaceEquations_OutputTypeGetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the output type for an interface equations identified by a user number. - SUBROUTINE cmfe_InterfaceEquations_OutputTypeSetNumber(regionUserNumber,interfaceUserNumber,interfaceConditionUserNumber, & - & outputType,err) + SUBROUTINE cmfe_InterfaceEquations_OutputTypeSetNumber(contextUserNumber,regionUserNumber,interfaceUserNumber, & + & interfaceConditionUserNumber,outputType,err) !DLLEXPORT(cmfe_InterfaceEquations_OutputTypeSetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the sparsity type for an interface equations identified by a user number. - SUBROUTINE cmfe_InterfaceEquations_SparsityGetNumber(regionUserNumber,interfaceUserNumber,interfaceConditionUserNumber, & - & sparsityType,err) + SUBROUTINE cmfe_InterfaceEquations_SparsityGetNumber(contextUserNumber,regionUserNumber,interfaceUserNumber, & + & interfaceConditionUserNumber,sparsityType,err) !DLLEXPORT(cmfe_InterfaceEquations_SparsityGetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the sparsity type for an interface equations identified by a user number. - SUBROUTINE cmfe_InterfaceEquations_SparsitySetNumber(regionUserNumber,interfaceUserNumber,interfaceConditionUserNumber, & - & sparsityType,err) + SUBROUTINE cmfe_InterfaceEquations_SparsitySetNumber(contextUserNumber,regionUserNumber,interfaceUserNumber, & + & interfaceConditionUserNumber,sparsityType,err) !DLLEXPORT(cmfe_InterfaceEquations_SparsitySetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Finishes the creation of a domain decomposition for a decomposition identified by a user number. - SUBROUTINE cmfe_Decomposition_CreateFinishNumber(regionUserNumber,meshUserNumber,decompositionUserNumber,err) + SUBROUTINE cmfe_Decomposition_CreateFinishNumber(contextUserNumber,regionUserNumber,meshUserNumber,decompositionUserNumber,err) !DLLEXPORT(cmfe_Decomposition_CreateFinishNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Starts the creation of a domain decomposition for a decomposition identified by a user number. - SUBROUTINE cmfe_Decomposition_CreateStartNumber(decompositionUserNumber,regionUserNumber,meshUserNumber,err) + SUBROUTINE cmfe_Decomposition_CreateStartNumber(decompositionUserNumber,contextUserNumber,regionUserNumber,meshUserNumber,err) !DLLEXPORT(cmfe_Decomposition_CreateStartNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Destroys a decomposition identified by a user number. - SUBROUTINE cmfe_Decomposition_DestroyNumber(regionUserNumber,meshUserNumber,decompositionUserNumber,err) + SUBROUTINE cmfe_Decomposition_DestroyNumber(contextUserNumber,regionUserNumber,meshUserNumber,decompositionUserNumber,err) !DLLEXPORT(cmfe_Decomposition_DestroyNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Calculates the element domains for a decomposition identified by a user number. - SUBROUTINE cmfe_Decomposition_ElementDomainCalculateNumber(regionUserNumber,meshUserNumber,decompositionUserNumber,err) + SUBROUTINE cmfe_Decomposition_ElementDomainCalculateNumber(contextUserNumber,regionUserNumber,meshUserNumber, & + & decompositionUserNumber,err) !DLLEXPORT(cmfe_Decomposition_ElementDomainCalculateNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the domain for a given element in a decomposition identified by a user number. - SUBROUTINE cmfe_Decomposition_ElementDomainGetNumber(regionUserNumber,meshUserNumber,decompositionUserNumber, & + SUBROUTINE cmfe_Decomposition_ElementDomainGetNumber(contextUserNumber,regionUserNumber,meshUserNumber,decompositionUserNumber, & & elementUserNumber,domain,err) !DLLEXPORT(cmfe_Decomposition_ElementDomainGetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the domain for a given element in a decomposition identified by a user number. - SUBROUTINE cmfe_Decomposition_ElementDomainSetNumber(regionUserNumber,meshUserNumber,decompositionUserNumber, & + SUBROUTINE cmfe_Decomposition_ElementDomainSetNumber(contextUserNumber,regionUserNumber,meshUserNumber,decompositionUserNumber, & & elementUserNumber,domain,err) !DLLEXPORT(cmfe_Decomposition_ElementDomainSetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the mesh component number used for the decomposition of a mesh for a decomposition identified by a user number. - SUBROUTINE cmfe_Decomposition_MeshComponentGetNumber(regionUserNumber,meshUserNumber,decompositionUserNumber, & + SUBROUTINE cmfe_Decomposition_MeshComponentGetNumber(contextUserNumber,regionUserNumber,meshUserNumber,decompositionUserNumber, & & meshComponentNumber,err) !DLLEXPORT(cmfe_Decomposition_MeshComponentGetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the mesh component number used for the decomposition of a mesh for a decomposition identified by a user number. - SUBROUTINE cmfe_Decomposition_MeshComponentSetNumber(regionUserNumber,meshUserNumber,decompositionUserNumber, & - & meshComponentNumber,err) + SUBROUTINE cmfe_Decomposition_MeshComponentSetNumber(contextUserNumber,regionUserNumber,meshUserNumber, & + & decompositionUserNumber,meshComponentNumber,err) !DLLEXPORT(cmfe_Decomposition_MeshComponentSetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the number of domains for a decomposition identified by a user number. - SUBROUTINE cmfe_Decomposition_NumberOfDomainsGetNumber(regionUserNumber,meshUserNumber,decompositionUserNumber, & - & numberOfDomains,err) + SUBROUTINE cmfe_Decomposition_NumberOfDomainsGetNumber(contextUserNumber,regionUserNumber,meshUserNumber, & + & decompositionUserNumber,numberOfDomains,err) !DLLEXPORT(cmfe_Decomposition_NumberOfDomainsGetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the number of domains for a decomposition identified by a user number. - SUBROUTINE cmfe_Decomposition_NumberOfDomainsSetNumber(regionUserNumber,meshUserNumber,decompositionUserNumber, & - & numberOfDomains,err) + SUBROUTINE cmfe_Decomposition_NumberOfDomainsSetNumber(contextUserNumber,regionUserNumber,meshUserNumber, & + & decompositionUserNumber,numberOfDomains,err) !DLLEXPORT(cmfe_Decomposition_NumberOfDomainsSetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the type of a decomposition identified by a user number. - SUBROUTINE cmfe_Decomposition_TypeGetNumber(regionUserNumber,meshUserNumber,decompositionUserNumber,decompositionType,err) + SUBROUTINE cmfe_Decomposition_TypeGetNumber(contextUserNumber,regionUserNumber,meshUserNumber,decompositionUserNumber, & + & decompositionType,err) !DLLEXPORT(cmfe_Decomposition_TypeGetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the type of a decomposition identified by a user number. - SUBROUTINE cmfe_Decomposition_TypeSetNumber(regionUserNumber,meshUserNumber,decompositionUserNumber,decompositionType,err) + SUBROUTINE cmfe_Decomposition_TypeSetNumber(contextUserNumber,regionUserNumber,meshUserNumber,decompositionUserNumber, & + & decompositionType,err) !DLLEXPORT(cmfe_Decomposition_TypeSetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the work group of a decomposition identified by a user number. - SUBROUTINE cmfe_Decomposition_WorkGroupSetNumber(regionUserNumber,meshUserNumber,decompositionUserNumber,workGroupUserNumber,err) + SUBROUTINE cmfe_Decomposition_WorkGroupSetNumber(contextUserNumber,regionUserNumber,meshUserNumber,decompositionUserNumber, & + & workGroupUserNumber,err) !DLLEXPORT(cmfe_Decomposition_WorkGroupSetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets whether lines should be calculated - SUBROUTINE cmfe_Decomposition_CalculateLinesSetNumber(regionUserNumber,meshUserNumber,& - & decompositionUserNumber,calculateLinesFlag,err) + SUBROUTINE cmfe_Decomposition_CalculateLinesSetNumber(contextUserNumber,regionUserNumber,meshUserNumber,& + & decompositionUserNumber,calculateLinesFlag,err) !DLLEXPORT(cmfe_Decomposition_CalculateLinesSetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets whether faces should be calculated - SUBROUTINE cmfe_Decomposition_CalculateFacesSetNumber(regionUserNumber,meshUserNumber, & - & decompositionUserNumber,calculateFacesFlag,err) + SUBROUTINE cmfe_Decomposition_CalculateFacesSetNumber(contextUserNumber,regionUserNumber,meshUserNumber, & + & decompositionUserNumber,calculateFacesFlag,err) !DLLEXPORT(cmfe_Decomposition_CalculateFacesSetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the domain for a given node in a decomposition identified by a user number. - SUBROUTINE cmfe_Decomposition_NodeDomainGetNumber(regionUserNumber,meshUserNumber,decompositionUserNumber, & + SUBROUTINE cmfe_Decomposition_NodeDomainGetNumber(contextUserNumber,regionUserNumber,meshUserNumber,decompositionUserNumber, & & nodeUserNumber,meshComponentNumber,domain,err) !DLLEXPORT(cmfe_Decomposition_NodeDomainGetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Finishes the creation of a mesh for a mesh identified by a user number. - SUBROUTINE cmfe_Mesh_CreateFinishNumber(regionUserNumber,meshUserNumber,err) + SUBROUTINE cmfe_Mesh_CreateFinishNumber(contextUserNumber,regionUserNumber,meshUserNumber,err) !DLLEXPORT(cmfe_Mesh_CreateFinishNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Starts the creation of a mesh for a mesh identified by a user number. - SUBROUTINE cmfe_Mesh_CreateStartNumber(meshUserNumber,regionUserNumber,numberOfDimensions,err) + SUBROUTINE cmfe_Mesh_CreateStartNumber(meshUserNumber,contextUserNumber,regionUserNumber,numberOfDimensions,err) !DLLEXPORT(cmfe_Mesh_CreateStartNumber) !Argument variables INTEGER(INTG), INTENT(IN) :: meshUserNumber !Destroys a mesh identified by a user number. - SUBROUTINE cmfe_Mesh_DestroyNumber(regionUserNumber,meshUserNumber,err) + SUBROUTINE cmfe_Mesh_DestroyNumber(contextUserNumber,regionUserNumber,meshUserNumber,err) !DLLEXPORT(cmfe_Mesh_DestroyNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the number of components in a mesh identified by a user number. - SUBROUTINE cmfe_Mesh_NumberOfComponentsGetNumber(regionUserNumber,meshUserNumber,numberOfComponents,err) + SUBROUTINE cmfe_Mesh_NumberOfComponentsGetNumber(contextUserNumber,regionUserNumber,meshUserNumber,numberOfComponents,err) !DLLEXPORT(cmfe_Mesh_NumberOfComponentsGetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the number of components in a mesh identified by a user number. - SUBROUTINE cmfe_Mesh_NumberOfComponentsSetNumber(regionUserNumber,meshUserNumber,numberOfComponents,err) + SUBROUTINE cmfe_Mesh_NumberOfComponentsSetNumber(contextUserNumber,regionUserNumber,meshUserNumber,numberOfComponents,err) !DLLEXPORT(cmfe_Mesh_NumberOfComponentsSetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the surrounding elements calculate flag. - SUBROUTINE cmfe_Mesh_SurroundingElementsCalculateSetNumber(regionUserNumber,meshUserNumber,surroundingElementsCalculateFlag,err) + SUBROUTINE cmfe_Mesh_SurroundingElementsCalculateSetNumber(contextUserNumber,regionUserNumber,meshUserNumber, & + & surroundingElementsCalculateFlag,err) !DLLEXPORT(cmfe_Mesh_SurroundingElementsCalculateSetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the number of elements in a mesh identified by a user number. - SUBROUTINE cmfe_Mesh_NumberOfElementsGetNumber(regionUserNumber,meshUserNumber,numberOfElements,err) + SUBROUTINE cmfe_Mesh_NumberOfElementsGetNumber(contextUserNumber,regionUserNumber,meshUserNumber,numberOfElements,err) !DLLEXPORT(cmfe_Mesh_NumberOfElementsGetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the number of elements in a mesh identified by a user number. - SUBROUTINE cmfe_Mesh_NumberOfElementsSetNumber(regionUserNumber,meshUserNumber,numberOfElements,err) + SUBROUTINE cmfe_Mesh_NumberOfElementsSetNumber(contextUserNumber,regionUserNumber,meshUserNumber,numberOfElements,err) !DLLEXPORT(cmfe_Mesh_NumberOfElementsSetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Calculate mesh data points topology in a region identified by a user number based on projection - SUBROUTINE cmfe_Mesh_TopologyDataPointsCalculateProjectionRegionNumber(regionUserNumber,MeshUserNumber, & - & DataProjection,err) + SUBROUTINE cmfe_Mesh_TopologyDataPointsCalculateProjectionRegionNumber(contextUserNumber,regionUserNumber,meshUserNumber, & + & dataProjection,err) !DLLEXPORT(cmfe_Mesh_TopologyDataPointsCalculateProjectionRegionNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Calculate mesh data points topology in an interface identified by a user number based on projection - SUBROUTINE cmfe_Mesh_TopologyDataPointsCalculateProjectionInterfaceNumber(parentRegionUserNumber,interfaceUserNumber, & - & MeshUserNumber,DataProjection,err) + SUBROUTINE cmfe_Mesh_TopologyDataPointsCalculateProjectionInterfaceNumber(contextUserNumber,parentRegionUserNumber, & + & interfaceUserNumber,meshUserNumber,dataProjection,err) !DLLEXPORT(cmfe_Mesh_TopologyDataPointsCalculateProjectionInterfaceNumber) !Argument variables - INTEGER(INTG), INTENT(IN) :: parentregionUserNumber !Calculate mesh data points topology identified by object based on projection - SUBROUTINE cmfe_Mesh_TopologyDataPointsCalculateProjectionObj(Mesh,DataProjection,err) + SUBROUTINE cmfe_Mesh_TopologyDataPointsCalculateProjectionObj(mesh,dataProjection,err) !DLLEXPORT(cmfe_Mesh_TopologyDataPointsCalculateProjectionObj) !Argument variables - TYPE(cmfe_MeshType), INTENT(IN) :: Mesh !Finishes creating elements for a mesh component of a mesh identified by a user number. - SUBROUTINE cmfe_MeshElements_CreateFinishNumber(regionUserNumber,meshUserNumber,meshComponentNumber,err) + SUBROUTINE cmfe_MeshElements_CreateFinishNumber(contextUserNumber,regionUserNumber,meshUserNumber,meshComponentNumber,err) !DLLEXPORT(cmfe_MeshElements_CreateFinishNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Starts creating elements for a mesh component of a mesh identified by a user number. - SUBROUTINE cmfe_MeshElements_CreateStartNumber(regionUserNumber,meshUserNumber,meshComponentNumber,basisUserNumber,err) + SUBROUTINE cmfe_MeshElements_CreateStartNumber(contextUserNumber,regionUserNumber,meshUserNumber,meshComponentNumber, & + & basisUserNumber,err) !DLLEXPORT(cmfe_MeshElements_CreateStartNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the mesh elements for a mesh component on a mesh identified by an user number. - SUBROUTINE cmfe_Mesh_ElementsGetNumber(regionUserNumber,meshUserNumber,meshComponentNumber,meshElements,err) + SUBROUTINE cmfe_Mesh_ElementsGetNumber(contextUserNumber,regionUserNumber,meshUserNumber,meshComponentNumber,meshElements,err) !DLLEXPORT(cmfe_Mesh_ElementsGetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the basis for an element in a mesh identified by an user number. \todo should the global element number be a user number? - SUBROUTINE cmfe_MeshElements_BasisGetNumber(regionUserNumber,meshUserNumber,meshComponentNumber,globalElementNumber, & - & basisUserNumber,err) + SUBROUTINE cmfe_MeshElements_BasisGetNumber(contextUserNumber,regionUserNumber,meshUserNumber,meshComponentNumber, & + & globalElementNumber,basisUserNumber,err) !DLLEXPORT(cmfe_MeshElements_BasisGetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the basis for an element in a mesh identified by an user number. \todo should the global element number be a user number? - SUBROUTINE cmfe_MeshElements_BasisSetNumber(regionUserNumber,meshUserNumber,meshComponentNumber,globalElementNumber, & - & basisUserNumber,err) + SUBROUTINE cmfe_MeshElements_BasisSetNumber(contextUserNumber,regionUserNumber,meshUserNumber,meshComponentNumber, & + & globalElementNumber,basisUserNumber,err) !DLLEXPORT(cmfe_MeshElements_BasisSetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the adjacent element number of a mesh identified by a user number - SUBROUTINE cmfe_MeshElements_AdjacentElementGetNumber(regionUserNumber,meshUserNumber,meshComponentNumber,globalElementNumber, & - & adjacentElementXi,adjacentElement,err) + SUBROUTINE cmfe_MeshElements_AdjacentElementGetNumber(contextUserNumber,regionUserNumber,meshUserNumber,meshComponentNumber, & + & globalElementNumber,adjacentElementXi,adjacentElement,err) !DLLEXPORT(cmfe_MeshElements_AdjacentElementGetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Gets the boundary type for an user element of a mesh identified by a user number - SUBROUTINE cmfe_MeshElements_ElementOnBoundaryGetNumber(regionUserNumber,meshUserNumber,meshComponentNumber,userElementNumber, & - & onBoundary,err) + SUBROUTINE cmfe_MeshElements_ElementOnBoundaryGetNumber(contextUserNumber,regionUserNumber,meshUserNumber,meshComponentNumber, & + & userElementNumber,onBoundary,err) !DLLEXPORT(cmfe_MeshElements_ElementOnBoundaryGetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the element nodes for an element in a mesh identified by an user number. \todo should the global element number be a user number? - SUBROUTINE cmfe_MeshElements_NodesGetNumber(regionUserNumber,meshUserNumber,meshComponentNumber,globalElementNumber, & - & elementUserNodes,err) + SUBROUTINE cmfe_MeshElements_NodesGetNumber(contextUserNumber,regionUserNumber,meshUserNumber,meshComponentNumber, & + & globalElementNumber,elementUserNodes,err) !DLLEXPORT(cmfe_MeshElements_NodesGetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the element nodes for an element in a mesh identified by an user number. \todo should the global element number be a user number? - SUBROUTINE cmfe_MeshElements_NodesSetNumber(regionUserNumber,meshUserNumber,meshComponentNumber,globalElementNumber, & - & elementUserNodes,err) + SUBROUTINE cmfe_MeshElements_NodesSetNumber(contextUserNumber,regionUserNumber,meshUserNumber,meshComponentNumber, & + & globalElementNumber,elementUserNodes,err) !DLLEXPORT(cmfe_MeshElements_NodesSetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the element nodes for an element in a mesh identified by an user number. \todo should the global element number be a user number? - SUBROUTINE cmfe_MeshElements_UserNodeVersionSetNumber(regionUserNumber,meshUserNumber,globalElementNumber,versionNumber, & - & derivativeNumber,userNodeNumber,meshComponentNumber,err) + SUBROUTINE cmfe_MeshElements_UserNodeVersionSetNumber(contextUserNumber,regionUserNumber,meshUserNumber,globalElementNumber, & + & versionNumber,derivativeNumber,userNodeNumber,meshComponentNumber,err) !DLLEXPORT(cmfe_MeshElements_UserNodeVersionSetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the element nodes for an element in a mesh identified by an user number. \todo should the global element number be a user number? - SUBROUTINE cmfe_MeshElements_LocalElementNodeVersionSetNumber(regionUserNumber,meshUserNumber,globalElementNumber,versionNumber, & - & derivativeNumber,localElementNodeNumber,meshComponentNumber,err) + SUBROUTINE cmfe_MeshElements_LocalElementNodeVersionSetNumber(contextUserNumber,regionUserNumber,meshUserNumber, & + & globalElementNumber,versionNumber,derivativeNumber,localElementNodeNumber,meshComponentNumber,err) !DLLEXPORT(cmfe_MeshElements_LocalElementNodeVersionSetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the user number for an element in a mesh identified by an user number. - SUBROUTINE cmfe_MeshElements_UserNumberGetNumber(regionUserNumber,meshUserNumber,meshComponentNumber,elementGlobalNumber, & - & elementUserNumber,err) + SUBROUTINE cmfe_MeshElements_UserNumberGetNumber(contextUserNumber,regionUserNumber,meshUserNumber,meshComponentNumber, & + & elementGlobalNumber,elementUserNumber,err) !DLLEXPORT(cmfe_MeshElements_UserNumberGetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the user number for an element in a mesh identified by an user number. - SUBROUTINE cmfe_MeshElements_UserNumberSetNumber(regionUserNumber,meshUserNumber,meshComponentNumber,elementGlobalNumber, & - & elementUserNumber,err) + SUBROUTINE cmfe_MeshElements_UserNumberSetNumber(contextUserNumber,regionUserNumber,meshUserNumber,meshComponentNumber, & + & elementGlobalNumber,elementUserNumber,err) !DLLEXPORT(cmfe_MeshElements_UserNumberSetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the user numbers for all elements in a mesh identified by an user number. - SUBROUTINE cmfe_MeshElements_UserNumbersAllSetNumber(regionUserNumber,meshUserNumber,meshComponentNumber, & + SUBROUTINE cmfe_MeshElements_UserNumbersAllSetNumber(contextUserNumber,regionUserNumber,meshUserNumber,meshComponentNumber, & & elementUserNumbers,err) !DLLEXPORT(cmfe_MeshElements_UserNumbersAllSetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Checks if the given node exists on the given mesh component. - SUBROUTINE cmfe_Mesh_NodeExistsNumber( regionUserNumber, meshUserNumber, meshComponentNumber, nodeUserNumber, nodeExists, err ) + SUBROUTINE cmfe_Mesh_NodeExistsNumber(contextUserNumber,regionUserNumber,meshUserNumber,meshComponentNumber,nodeUserNumber, & + & nodeExists,err) !DLLEXPORT(cmfe_Mesh_NodeExistsNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Checks if the given element exists on the given mesh component. - SUBROUTINE cmfe_Mesh_ElementExistsNumber( regionUserNumber, meshUserNumber, meshComponentNumber, & - & elementUserNumber, elementExists, err ) + SUBROUTINE cmfe_Mesh_ElementExistsNumber(contextUserNumber,regionUserNumber,meshUserNumber,meshComponentNumber, & + & elementUserNumber,elementExists,err) !DLLEXPORT(cmfe_Mesh_ElementExistsNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the mesh nodes for a mesh component on a mesh identified by an user number. - SUBROUTINE cmfe_Mesh_NodesGetNumber(regionUserNumber,meshUserNumber,meshComponentNumber,meshNodes,err) + SUBROUTINE cmfe_Mesh_NodesGetNumber(contextUserNumber,regionUserNumber,meshUserNumber,meshComponentNumber,meshNodes,err) !DLLEXPORT(cmfe_Mesh_NodesGetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Gets the boundary type for an user node of a mesh identified by a user number - SUBROUTINE cmfe_MeshNodes_NodeOnBoundaryGetNumber(regionUserNumber,meshUserNumber,meshComponentNumber,userNodeNumber, & - & onBoundary,err) + SUBROUTINE cmfe_MeshNodes_NodeOnBoundaryGetNumber(contextUserNumber,regionUserNumber,meshUserNumber,meshComponentNumber, & + & userNodeNumber,onBoundary,err) !DLLEXPORT(cmfe_MeshNodes_NodeOnBoundaryGetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the number of nodes at a node in a mesh identified by an user number. - SUBROUTINE cmfe_MeshNodes_NumberOfNodesGetNumber(regionUserNumber,meshUserNumber,meshComponentNumber,numberOfNodes,err) + SUBROUTINE cmfe_MeshNodes_NumberOfNodesGetNumber(contextUserNumber,regionUserNumber,meshUserNumber,meshComponentNumber, & + & numberOfNodes,err) !DLLEXPORT(cmfe_MeshNodes_NumberOfNodesGetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the number of derivatives at a node in a mesh identified by an user number. - SUBROUTINE cmfe_MeshNodes_NumberOfDerivativesGetNumber(regionUserNumber,meshUserNumber,meshComponentNumber,userNodeNumber, & - & numberOfDerivatives,err) + SUBROUTINE cmfe_MeshNodes_NumberOfDerivativesGetNumber(contextUserNumber,regionUserNumber,meshUserNumber,meshComponentNumber, & + & userNodeNumber,numberOfDerivatives,err) !DLLEXPORT(cmfe_MeshNodes_NumberOfDerivativesGetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the derivatives at a node in a mesh identified by an user number. - SUBROUTINE cmfe_MeshNodes_DerivativesGetNumber(regionUserNumber,meshUserNumber,meshComponentNumber,userNodeNumber, & - & derivatives,err) + SUBROUTINE cmfe_MeshNodes_DerivativesGetNumber(contextUserNumber,regionUserNumber,meshUserNumber,meshComponentNumber, & + & userNodeNumber,derivatives,err) !DLLEXPORT(cmfe_MeshNodes_DerivativesGetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the number of version at a derivative for a node in a mesh identified by an user number. - SUBROUTINE cmfe_MeshNodes_NumberOfVersionsGetNumber(regionUserNumber,meshUserNumber,meshComponentNumber,derivativeNumber, & - & userNodeNumber,numberOfVersions,err) + SUBROUTINE cmfe_MeshNodes_NumberOfVersionsGetNumber(contextUserNumber,regionUserNumber,meshUserNumber,meshComponentNumber, & + & derivativeNumber,userNodeNumber,numberOfVersions,err) !DLLEXPORT(cmfe_MeshNodes_NumberOfVersionsGetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Finishes the process of creating nodes in a region for nodes identified by user number. - SUBROUTINE cmfe_Nodes_CreateFinishNumber(regionUserNumber,err) + SUBROUTINE cmfe_Nodes_CreateFinishNumber(contextUserNumber,regionUserNumber,err) !DLLEXPORT(cmfe_Nodes_CreateFinishNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Starts the process of creating nodes in a region for nodes identified by user number. - SUBROUTINE cmfe_Nodes_CreateStartNumber(regionUserNumber,numberOfNodes,err) + SUBROUTINE cmfe_Nodes_CreateStartNumber(contextUserNumber,regionUserNumber,numberOfNodes,err) !DLLEXPORT(cmfe_Nodes_CreateStartNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Destroys the nodes in a region for nodes identified by user number. - SUBROUTINE cmfe_Nodes_DestroyNumber(regionUserNumber,err) + SUBROUTINE cmfe_Nodes_DestroyNumber(contextUserNumber,regionUserNumber,err) !DLLEXPORT(cmfe_Nodes_DestroyNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the number of nodes - SUBROUTINE cmfe_Nodes_NumberOfNodesGetNumber(regionUserNumber,numberOfNodes,err) + SUBROUTINE cmfe_Nodes_NumberOfNodesGetNumber(contextUserNumber,regionUserNumber,numberOfNodes,err) !DLLEXPORT(cmfe_Nodes_NumberOfNodesGetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the character label for a node in a set of nodes identified by user number. \todo should this be user number?? - SUBROUTINE cmfe_Nodes_LabelGetCNumber(regionUserNumber,nodeGlobalNumber,label,err) + SUBROUTINE cmfe_Nodes_LabelGetCNumber(contextUserNumber,regionUserNumber,nodeGlobalNumber,label,err) !DLLEXPORT(cmfe_Nodes_LabelGetCNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the varying string label for a node in a set of nodes identified by user number. \todo should this be user number?? - SUBROUTINE cmfe_Nodes_LabelGetVSNumber(regionUserNumber,nodeGlobalNumber,label,err) + SUBROUTINE cmfe_Nodes_LabelGetVSNumber(contextUserNumber,regionUserNumber,nodeGlobalNumber,label,err) !DLLEXPORT(cmfe_Nodes_LabelGetVSNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the character label for a node in a set of nodes identified by user number. \todo should this be user number?? - SUBROUTINE cmfe_Nodes_LabelSetCNumber(regionUserNumber,nodeGlobalNumber,label,err) + SUBROUTINE cmfe_Nodes_LabelSetCNumber(contextUserNumber,regionUserNumber,nodeGlobalNumber,label,err) !DLLEXPORT(cmfe_Nodes_LabelSetCNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the varying string label for a node in a set of nodes identified by user number. \todo should this be user number?? - SUBROUTINE cmfe_Nodes_LabelSetVSNumber(regionUserNumber,nodeGlobalNumber,label,err) + SUBROUTINE cmfe_Nodes_LabelSetVSNumber(contextUserNumber,regionUserNumber,nodeGlobalNumber,label,err) !DLLEXPORT(cmfe_Nodes_LabelSetVSNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the user number for a node in a set of nodes identified by user number. - SUBROUTINE cmfe_Nodes_UserNumberGetNumber(regionUserNumber,nodeGlobalNumber,nodeUserNumber,err) + SUBROUTINE cmfe_Nodes_UserNumberGetNumber(contextUserNumber,regionUserNumber,nodeGlobalNumber,nodeUserNumber,err) !DLLEXPORT(cmfe_Nodes_UserNumberGetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the user number for a node in a set of nodes identified by user number. - SUBROUTINE cmfe_Nodes_UserNumberSetNumber(regionUserNumber,nodeGlobalNumber,nodeUserNumber,err) + SUBROUTINE cmfe_Nodes_UserNumberSetNumber(contextUserNumber,regionUserNumber,nodeGlobalNumber,nodeUserNumber,err) !DLLEXPORT(cmfe_Nodes_UserNumberSetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the user numbers for a set of nodes identified by user number. - SUBROUTINE cmfe_Nodes_UserNumbersAllSetNumber(regionUserNumber,nodeUserNumbers,err) + SUBROUTINE cmfe_Nodes_UserNumbersAllSetNumber(contextUserNumber,regionUserNumber,nodeUserNumbers,err) !DLLEXPORT(cmfe_Nodes_UserNumbersAllSetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Finishes the process of creating CellML equations for a problem identified by user number. - SUBROUTINE cmfe_Problem_CellMLEquationsCreateFinishNumber(problemUserNumber,err) + SUBROUTINE cmfe_Problem_CellMLEquationsCreateFinishNumber(contextUserNumber,problemUserNumber,err) !DLLEXPORT(cmfe_Problem_CellMLEquationsCreateFinishNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Starts the process of creating CellML equations for a problem identified by user number. - SUBROUTINE cmfe_Problem_CellMLEquationsCreateStartNumber(problemUserNumber,err) + SUBROUTINE cmfe_Problem_CellMLEquationsCreateStartNumber(contextUserNumber,problemUserNumber,err) !DLLEXPORT(cmfe_Problem_CellMLEquationsCreateStartNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the CellML equations from a problem identified by an user number. - SUBROUTINE cmfe_Problem_CellMLEquationsGetNumber0(problemUserNumber,controlLoopIdentifier,solverIndex,cellMLEquations,err) + SUBROUTINE cmfe_Problem_CellMLEquationsGetNumber0(contextUserNumber,problemUserNumber,controlLoopIdentifier,solverIndex, & + & cellMLEquations,err) !DLLEXPORT(cmfe_Problem_CellMLEquationsGetNumber0) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the CellML equations from a problem identified by an user number. - SUBROUTINE cmfe_Problem_CellMLEquationsGetNumber1(problemUserNumber,controlLoopIdentifiers,solverIndex,cellMLEquations,err) + SUBROUTINE cmfe_Problem_CellMLEquationsGetNumber1(contextUserNumber,problemUserNumber,controlLoopIdentifiers,solverIndex, & + & cellMLEquations,err) !DLLEXPORT(cmfe_Problem_CellMLEquationsGetNumber1) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Finishes the process of a problem identified by user number. - SUBROUTINE cmfe_Problem_CreateFinishNumber(problemUserNumber,err) + SUBROUTINE cmfe_Problem_CreateFinishNumber(contextUserNumber,problemUserNumber,err) !DLLEXPORT(cmfe_Problem_CreateFinishNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Starts the process of a problem identified by user number. - SUBROUTINE cmfe_Problem_CreateStartNumber(problemUserNumber,problemSpecification,err) + SUBROUTINE cmfe_Problem_CreateStartNumber(problemUserNumber,contextUserNumber,problemSpecification,err) !DLLEXPORT(cmfe_Problem_CreateStartNumber) !Argument variables INTEGER(INTG), INTENT(IN) :: problemUserNumber !Starts the creation of a problem identified by an object. - SUBROUTINE cmfe_Problem_CreateStartObj(problemUserNumber,problemSpecification,problem,err) + SUBROUTINE cmfe_Problem_CreateStartObj(problemUserNumber,context,problemSpecification,problem,err) !DLLEXPORT(cmfe_Problem_CreateStartObj) !Argument variables + TYPE(cmfe_ContextType), INTENT(IN) :: context !Finishes the process of creating a control loop for a problem identified by user number. - SUBROUTINE cmfe_Problem_ControlLoopCreateFinishNumber(problemUserNumber,err) + SUBROUTINE cmfe_Problem_ControlLoopCreateFinishNumber(contextUserNumber,problemUserNumber,err) !DLLEXPORT(cmfe_Problem_ControlLoopCreateFinishNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Starts the process of creating a control loop for a problem identified by user number. - SUBROUTINE cmfe_Problem_ControlLoopCreateStartNumber(problemUserNumber,err) + SUBROUTINE cmfe_Problem_ControlLoopCreateStartNumber(contextUserNumber,problemUserNumber,err) !DLLEXPORT(cmfe_Problem_ControlLoopCreateStartNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Destroys the control loops for a problem identified by user number. - SUBROUTINE cmfe_Problem_ControlLoopDestroyNumber(problemUserNumber,err) + SUBROUTINE cmfe_Problem_ControlLoopDestroyNumber(contextUserNumber,problemUserNumber,err) !DLLEXPORT(cmfe_Problem_ControlLoopDestroyNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns a control loop from a problem identified by an user number. - SUBROUTINE cmfe_Problem_ControlLoopGetNumber0(problemUserNumber,controlLoopIdentifier,controlLoop,err) + SUBROUTINE cmfe_Problem_ControlLoopGetNumber0(contextUserNumber,problemUserNumber,controlLoopIdentifier,controlLoop,err) !DLLEXPORT(cmfe_Problem_ControlLoopGetNumber0) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns a control loop from a problem identified by an user number. - SUBROUTINE cmfe_Problem_ControlLoopGetNumber1(problemUserNumber,controlLoopIdentifiers,controlLoop,err) + SUBROUTINE cmfe_Problem_ControlLoopGetNumber1(contextUserNumber,problemUserNumber,controlLoopIdentifiers,controlLoop,err) !DLLEXPORT(cmfe_Problem_ControlLoopGetNumber1) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Destroys a problem identified by an user number. - SUBROUTINE cmfe_Problem_DestroyNumber(problemUserNumber,err) + SUBROUTINE cmfe_Problem_DestroyNumber(contextUserNumber,problemUserNumber,err) !DLLEXPORT(cmfe_Problem_DestroyNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Solves a problem identified by an user number. - SUBROUTINE cmfe_Problem_SolveNumber(problemUserNumber,err) + SUBROUTINE cmfe_Problem_SolveNumber(contextUserNumber,problemUserNumber,err) !DLLEXPORT(cmfe_Problem_SolveNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns a solver from a problem identified by an user number. - SUBROUTINE cmfe_Problem_SolverGetNumber0(problemUserNumber,controlLoopIdentifier,solverIndex,solver,err) + SUBROUTINE cmfe_Problem_SolverGetNumber0(contextUserNumber,problemUserNumber,controlLoopIdentifier,solverIndex,solver,err) !DLLEXPORT(cmfe_Problem_SolverGetNumber0) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns a solver from a problem identified by an user number. - SUBROUTINE cmfe_Problem_SolverGetNumber1(problemUserNumber,controlLoopIdentifiers,solverIndex,solver,err) + SUBROUTINE cmfe_Problem_SolverGetNumber1(contextUserNumber,problemUserNumber,controlLoopIdentifiers,solverIndex,solver,err) !DLLEXPORT(cmfe_Problem_SolverGetNumber1) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Set boundary conditions for solver equations according to the analytic equations for solver equations identified by user numbers. - SUBROUTINE cmfe_SolverEquations_BoundaryConditionsAnalyticNumber0(problemUserNumber,controlLoopIdentifier,solverIndex,err) + SUBROUTINE cmfe_SolverEquations_BoundaryConditionsAnalyticNumber0(contextUserNumber,problemUserNumber,controlLoopIdentifier, & + & solverIndex,err) !DLLEXPORT(cmfe_SolverEquations_BoundaryConditionsAnalyticNumber0) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Set boundary conditions for solver equations according to the analytic equations for solver equations identified by user numbers. - SUBROUTINE cmfe_SolverEquations_BoundaryConditionsAnalyticNumber1(problemUserNumber,controlLoopIdentifiers,solverIndex,err) + SUBROUTINE cmfe_SolverEquations_BoundaryConditionsAnalyticNumber1(contextUserNumber,problemUserNumber,controlLoopIdentifiers, & + & solverIndex,err) !DLLEXPORT(cmfe_SolverEquations_BoundaryConditionsAnalyticNumber1) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Finishes the process of creating solver equations for a problem identified by user number. - SUBROUTINE cmfe_Problem_SolverEquationsCreateFinishNumber(problemUserNumber,err) + SUBROUTINE cmfe_Problem_SolverEquationsCreateFinishNumber(contextUserNumber,problemUserNumber,err) !DLLEXPORT(cmfe_Problem_SolverEquationsCreateFinishNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Starts the process of creating solver equations for a problem identified by user number. - SUBROUTINE cmfe_Problem_SolverEquationsCreateStartNumber(problemUserNumber,err) + SUBROUTINE cmfe_Problem_SolverEquationsCreateStartNumber(contextUserNumber,problemUserNumber,err) !DLLEXPORT(cmfe_Problem_SolverEquationsCreateStartNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Destroys the solver equations for a problem identified by an user number. - SUBROUTINE cmfe_Problem_SolverEquationsDestroyNumber(problemUserNumber,err) + SUBROUTINE cmfe_Problem_SolverEquationsDestroyNumber(contextUserNumber,problemUserNumber,err) !DLLEXPORT(cmfe_Problem_SolverEquationsDestroyNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the solver equations from a problem identified by an user number. - SUBROUTINE cmfe_Problem_SolverEquationsGetNumber0(problemUserNumber,controlLoopIdentifier,solverIndex,solverEquations,err) + SUBROUTINE cmfe_Problem_SolverEquationsGetNumber0(contextUserNumber,problemUserNumber,controlLoopIdentifier,solverIndex, & + & solverEquations,err) !DLLEXPORT(cmfe_Problem_SolverEquationsGetNumber0) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the solver equations from a problem identified by an user number. - SUBROUTINE cmfe_Problem_SolverEquationsGetNumber1(problemUserNumber,controlLoopIdentifiers,solverIndex,solverEquations,err) + SUBROUTINE cmfe_Problem_SolverEquationsGetNumber1(contextUserNumber,problemUserNumber,controlLoopIdentifiers,solverIndex, & + & solverEquations,err) !DLLEXPORT(cmfe_Problem_SolverEquationsGetNumber1) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Finishes the process of creating solvers for a problem identified by user number. - SUBROUTINE cmfe_Problem_SolversCreateFinishNumber(problemUserNumber,err) + SUBROUTINE cmfe_Problem_SolversCreateFinishNumber(contextUserNumber,problemUserNumber,err) !DLLEXPORT(cmfe_Problem_SolversCreateFinishNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Starts the process of creating solvers for a problem identified by user number. - SUBROUTINE cmfe_Problem_SolversCreateStartNumber(problemUserNumber,err) + SUBROUTINE cmfe_Problem_SolversCreateStartNumber(contextUserNumber,problemUserNumber,err) !DLLEXPORT(cmfe_Problem_SolversCreateStartNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Destroys the solvers for a problem identified by an user number. - SUBROUTINE cmfe_Problem_SolversDestroyNumber(problemUserNumber,err) + SUBROUTINE cmfe_Problem_SolversDestroyNumber(contextUserNumber,problemUserNumber,err) !DLLEXPORT(cmfe_Problem_SolversDestroyNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the specification array for a problem identified by a user number. - SUBROUTINE cmfe_Problem_SpecificationGetNumber(problemUserNumber,problemSpecification,err) + SUBROUTINE cmfe_Problem_SpecificationGetNumber(contextUserNumber,problemUserNumber,problemSpecification,err) !DLLEXPORT(cmfe_Problem_SpecificationGetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the size of the specification array for a problem identified by a user number. - SUBROUTINE cmfe_Problem_SpecificationSizeGetNumber(problemUserNumber,specificationSize,err) + SUBROUTINE cmfe_Problem_SpecificationSizeGetNumber(contextUserNumber,problemUserNumber,specificationSize,err) !DLLEXPORT(cmfe_Problem_SpecificationSizeGetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the work group of a problem identified by a user number. - SUBROUTINE cmfe_Problem_WorkGroupSetNumber(problemUserNumber,workGroupUserNumber,err) + SUBROUTINE cmfe_Problem_WorkGroupSetNumber(contextUserNumber,problemUserNumber,workGroupUserNumber,err) !DLLEXPORT(cmfe_Problem_WorkGroupSetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the coordinate system for a region identified by an user number. - SUBROUTINE cmfe_Region_CoordinateSystemGetNumber(regionUserNumber,coordinateSystemUserNumber,err) + SUBROUTINE cmfe_Region_CoordinateSystemGetNumber(contextUserNumber,regionUserNumber,coordinateSystemUserNumber,err) !DLLEXPORT(cmfe_Region_CoordinateSystemGetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Finishes the process of creating a region identified by user number. - SUBROUTINE cmfe_Region_CreateFinishNumber(regionUserNumber,err) + SUBROUTINE cmfe_Region_CreateFinishNumber(contextUserNumber,regionUserNumber,err) !DLLEXPORT(cmfe_Region_CreateFinishNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Starts the process creating a region identified by user number. - SUBROUTINE cmfe_Region_CreateStartNumber(regionUserNumber,parentRegionUserNumber,err) + SUBROUTINE cmfe_Region_CreateStartNumber(regionUserNumber,contextUserNumber,parentRegionUserNumber,err) !DLLEXPORT(cmfe_Region_CreateStartNumber) !Argument variables INTEGER(INTG), INTENT(IN) :: regionUserNumber !Destroys a region identified by an user number. - SUBROUTINE cmfe_Region_DestroyNumber(regionUserNumber,err) - !DLLEXPORT(cmfe_Region_DestroyNumber) + !>Returns the data points for a region identified by an object. + SUBROUTINE cmfe_Region_DataPointsGetObj(region,dataPointsUserNumber,dataPoints,err) + !DLLEXPORT(cmfe_Region_DataPointsGetObj) !Argument variables - INTEGER(INTG), INTENT(IN) :: regionUserNumber !Returns the data points for a region identified by an object. - SUBROUTINE cmfe_Region_DataPointsGetObj(region,dataPointsUserNumber,dataPoints,err) - !DLLEXPORT(cmfe_Region_DataPointsGetObj) + !>Destroys a region identified by an user number. + SUBROUTINE cmfe_Region_DestroyNumber(contextUserNumber,regionUserNumber,err) + !DLLEXPORT(cmfe_Region_DestroyNumber) !Argument variables - TYPE(cmfe_RegionType), INTENT(IN) :: region !Returns the character string label for a region identified by an user number. - SUBROUTINE cmfe_Region_LabelGetCNumber(regionUserNumber,label,err) + SUBROUTINE cmfe_Region_LabelGetCNumber(contextUserNumber,regionUserNumber,label,err) !DLLEXPORT(cmfe_Region_LabelGetCNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the varying string label for a region identified by an user number. - SUBROUTINE cmfe_Region_LabelGetVSNumber(regionUserNumber,label,err) + SUBROUTINE cmfe_Region_LabelGetVSNumber(contextUserNumber,regionUserNumber,label,err) !DLLEXPORT(cmfe_Region_LabelGetVSNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the character string label for a region identified by an user number. - SUBROUTINE cmfe_Region_LabelSetCNumber(regionUserNumber,label,err) + SUBROUTINE cmfe_Region_LabelSetCNumber(contextUserNumber,regionUserNumber,label,err) !DLLEXPORT(cmfe_Region_LabelSetCNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the varying string label for a region identified by an user number. - SUBROUTINE cmfe_Region_LabelSetVSNumber(regionUserNumber,label,err) + SUBROUTINE cmfe_Region_LabelSetVSNumber(contextUserNumber,regionUserNumber,label,err) !DLLEXPORT(cmfe_Region_LabelSetVSNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Adds a CellML environment to CellML equations identified by an user number. - SUBROUTINE cmfe_CellMLEquations_CellMLAddNumber0(problemUserNumber,controlLoopIdentifier,solverIndex, & + SUBROUTINE cmfe_CellMLEquations_CellMLAddNumber0(contextUserNumber,problemUserNumber,controlLoopIdentifier,solverIndex, & & regionUserNumber,cellMLUserNumber,cellMLIndex,err) !DLLEXPORT(cmfe_CellMLEquations_CellMLAddNumber0) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Adds a CellML environment to CellML equations identified by an user number. - SUBROUTINE cmfe_CellMLEquations_CellMLAddNumber1(problemUserNumber,controlLoopIdentifiers,solverIndex, & + SUBROUTINE cmfe_CellMLEquations_CellMLAddNumber1(contextUserNumber,problemUserNumber,controlLoopIdentifiers,solverIndex, & & regionUserNumber,cellMLUserNumber,cellMLIndex,err) !DLLEXPORT(cmfe_CellMLEquations_CellMLAddNumber1) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the linearity type for CellML equations identified by an user number. - SUBROUTINE cmfe_CellMLEquations_LinearityTypeGetNumber(problemUserNumber,controlLoopIdentifier,solverIndex,linearityType,err) + SUBROUTINE cmfe_CellMLEquations_LinearityTypeGetNumber(contextUserNumber,problemUserNumber,controlLoopIdentifier,solverIndex, & + & linearityType,err) !DLLEXPORT(cmfe_CellMLEquations_LinearityTypeGetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the linearity type for CellML equations identified by an user number. - SUBROUTINE cmfe_CellMLEquations_LinearityTypeSetNumber(problemUserNumber,controlLoopIdentifier,solverIndex,linearityType,err) + SUBROUTINE cmfe_CellMLEquations_LinearityTypeSetNumber(contextUserNumber,problemUserNumber,controlLoopIdentifier,solverIndex, & + & linearityType,err) !DLLEXPORT(cmfe_CellMLEquations_LinearityTypeSetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the time dependence type for CellML equations identified by an user number. - SUBROUTINE cmfe_CellMLEquations_TimeDependenceTypeGetNumber(problemUserNumber,controlLoopIdentifier,solverIndex, & - & timeDependenceType,err) + SUBROUTINE cmfe_CellMLEquations_TimeDependenceTypeGetNumber(contextUserNumber,problemUserNumber,controlLoopIdentifier, & + & solverIndex,timeDependenceType,err) !DLLEXPORT(cmfe_CellMLEquations_TimeDependenceTypeGetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the time dependence type for CellML equations identified by an user number. - SUBROUTINE cmfe_CellMLEquations_TimeDependenceTypeSetNumber(problemUserNumber,controlLoopIdentifier,solverIndex, & - & timeDependenceType,err) + SUBROUTINE cmfe_CellMLEquations_TimeDependenceTypeSetNumber(contextUserNumber,problemUserNumber,controlLoopIdentifier, & + & solverIndex,timeDependenceType,err) !DLLEXPORT(cmfe_CellMLEquations_TimeDependenceTypeSetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the CellML equations for a solver identified by an user number. - SUBROUTINE cmfe_Solver_CellMLEquationsGetNumber0(problemUserNumber,controlLoopIdentifier,solverIndex,cellMLEquations,err) + SUBROUTINE cmfe_Solver_CellMLEquationsGetNumber0(contextUserNumber,problemUserNumber,controlLoopIdentifier,solverIndex, & + & cellMLEquations,err) !DLLEXPORT(cmfe_Solver_CellMLEquationsGetNumber0) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the CellML equations for a solver identified by an user number. - SUBROUTINE cmfe_Solver_CellMLEquationsGetNumber1(problemUserNumber,controlLoopIdentifiers,solverIndex,cellMLEquations,err) + SUBROUTINE cmfe_Solver_CellMLEquationsGetNumber1(contextUserNumber,problemUserNumber,controlLoopIdentifiers,solverIndex, & + & cellMLEquations,err) !DLLEXPORT(cmfe_Solver_CellMLEquationsGetNumber1) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the solve type for an Euler differential-algebraic equation solver identified by an user number. - SUBROUTINE cmfe_Solver_DAEEulerSolverTypeGetNumber0(problemUserNumber,controlLoopIdentifier,solverIndex,DAEEulerSolverType,err) + SUBROUTINE cmfe_Solver_DAEEulerSolverTypeGetNumber0(contextUserNumber,problemUserNumber,controlLoopIdentifier,solverIndex, & + & DAEEulerSolverType,err) !DLLEXPORT(cmfe_Solver_DAEEulerSolverTypeGetNumber0) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the solve type for an Euler differential-algebraic equation solver identified by an user number. - SUBROUTINE cmfe_Solver_DAEEulerSolverTypeGetNumber1(problemUserNumber,controlLoopIdentifiers,solverIndex,DAEEulerSolverType,err) + SUBROUTINE cmfe_Solver_DAEEulerSolverTypeGetNumber1(contextUserNumber,problemUserNumber,controlLoopIdentifiers,solverIndex, & + & DAEEulerSolverType,err) !DLLEXPORT(cmfe_Solver_DAEEulerSolverTypeGetNumber1) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the solve type for an Euler differential-algebraic equation solver identified by an user number. - SUBROUTINE cmfe_Solver_DAEEulerSolverTypeSetNumber0(problemUserNumber,controlLoopIdentifier,solverIndex,DAEEulerSolverType,err) + SUBROUTINE cmfe_Solver_DAEEulerSolverTypeSetNumber0(contextUserNumber,problemUserNumber,controlLoopIdentifier,solverIndex, & + & DAEEulerSolverType,err) !DLLEXPORT(cmfe_Solver_DAEEulerSolverTypeSetNumber0) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the solve type for an Euler differential-algebraic equation solver identified by an user number. - SUBROUTINE cmfe_Solver_DAEEulerSolverTypeSetNumber1(problemUserNumber,controlLoopIdentifiers,solverIndex,DAEEulerSolverType,err) + SUBROUTINE cmfe_Solver_DAEEulerSolverTypeSetNumber1(contextUserNumber,problemUserNumber,controlLoopIdentifiers,solverIndex, & + & DAEEulerSolverType,err) !DLLEXPORT(cmfe_Solver_DAEEulerSolverTypeSetNumber1) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the solve type for an differential-algebraic equation solver identified by an user number. - SUBROUTINE cmfe_Solver_DAESolverTypeGetNumber0(problemUserNumber,controlLoopIdentifier,solverIndex,DAESolverType,err) + SUBROUTINE cmfe_Solver_DAESolverTypeGetNumber0(contextUserNumber,problemUserNumber,controlLoopIdentifier,solverIndex, & + & DAESolverType,err) !DLLEXPORT(cmfe_Solver_DAESolverTypeGetNumber0) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the solve type for an differential-algebraic equation solver identified by an user number. - SUBROUTINE cmfe_Solver_DAESolverTypeGetNumber1(problemUserNumber,controlLoopIdentifiers,solverIndex,DAESolverType,err) + SUBROUTINE cmfe_Solver_DAESolverTypeGetNumber1(contextUserNumber,problemUserNumber,controlLoopIdentifiers,solverIndex, & + & DAESolverType,err) !DLLEXPORT(cmfe_Solver_DAESolverTypeGetNumber1) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the solve type for an differential-algebraic equation solver identified by an user number. - SUBROUTINE cmfe_Solver_DAESolverTypeSetNumber0(problemUserNumber,controlLoopIdentifier,solverIndex,DAESolverType,err) + SUBROUTINE cmfe_Solver_DAESolverTypeSetNumber0(contextUserNumber,problemUserNumber,controlLoopIdentifier,solverIndex, & + & DAESolverType,err) !DLLEXPORT(cmfe_Solver_DAESolverTypeSetNumber0) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the solve type for an differential-algebraic equation solver identified by an user number. - SUBROUTINE cmfe_Solver_DAESolverTypeSetNumber1(problemUserNumber,controlLoopIdentifiers,solverIndex,DAESolverType,err) + SUBROUTINE cmfe_Solver_DAESolverTypeSetNumber1(contextUserNumber,problemUserNumber,controlLoopIdentifiers,solverIndex, & + & DAESolverType,err) !DLLEXPORT(cmfe_Solver_DAESolverTypeSetNumber1) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the times for an differential-algebraic equation solver identified by an user number. - SUBROUTINE cmfe_Solver_DAETimesSetNumber0(problemUserNumber,controlLoopIdentifier,solverIndex,startTime,endTime,err) + SUBROUTINE cmfe_Solver_DAETimesSetNumber0(contextUserNumber,problemUserNumber,controlLoopIdentifier,solverIndex, & + & startTime,endTime,err) !DLLEXPORT(cmfe_Solver_DAETimesSetNumber0) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the times for an differential-algebraic equation solver identified by an user number. - SUBROUTINE cmfe_Solver_DAETimesSetNumber1(problemUserNumber,controlLoopIdentifiers,solverIndex,startTime,endTime,err) + SUBROUTINE cmfe_Solver_DAETimesSetNumber1(contextUserNumber,problemUserNumber,controlLoopIdentifiers,solverIndex, & + & startTime,endTime,err) !DLLEXPORT(cmfe_Solver_DAETimesSetNumber1) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the (initial) time step for an differential-algebraic equation solver identified by an user number. - SUBROUTINE cmfe_Solver_DAETimeStepSetNumber0(problemUserNumber,controlLoopIdentifier,solverIndex,timeStep,err) + SUBROUTINE cmfe_Solver_DAETimeStepSetNumber0(contextUserNumber,problemUserNumber,controlLoopIdentifier,solverIndex, & + & timeStep,err) !DLLEXPORT(cmfe_Solver_DAETimeStepSetNumber0) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the (initial) time step for an differential-algebraic equation solver identified by an user number. - SUBROUTINE cmfe_Solver_DAETimeStepSetNumber1(problemUserNumber,controlLoopIdentifiers,solverIndex,timeStep,err) + SUBROUTINE cmfe_Solver_DAETimeStepSetNumber1(contextUserNumber,problemUserNumber,controlLoopIdentifiers,solverIndex, & + & timeStep,err) !DLLEXPORT(cmfe_Solver_DAETimeStepSetNumber1) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the degree of the polynomial used to interpolate time for a dynamic solver identified by an user number. - SUBROUTINE cmfe_Solver_DynamicDegreeGetNumber0(problemUserNumber,controlLoopIdentifier,solverIndex,degree,err) + SUBROUTINE cmfe_Solver_DynamicDegreeGetNumber0(contextUserNumber,problemUserNumber,controlLoopIdentifier,solverIndex,degree,err) !DLLEXPORT(cmfe_Solver_DynamicDegreeGetNumber0) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the degree of the polynomial used to interpolate time for a dynamic solver identified by an user number. - SUBROUTINE cmfe_Solver_DynamicDegreeGetNumber1(problemUserNumber,controlLoopIdentifiers,solverIndex,degree,err) + SUBROUTINE cmfe_Solver_DynamicDegreeGetNumber1(contextUserNumber,problemUserNumber,controlLoopIdentifiers,solverIndex,degree,err) !DLLEXPORT(cmfe_Solver_DynamicDegreeGetNumber1) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the degree of the polynomial used to interpolate time for a dynamic solver identified by an user number. - SUBROUTINE cmfe_Solver_DynamicDegreeSetNumber0(problemUserNumber,controlLoopIdentifier,solverIndex,degree,err) + SUBROUTINE cmfe_Solver_DynamicDegreeSetNumber0(contextUserNumber,problemUserNumber,controlLoopIdentifier,solverIndex,degree,err) !DLLEXPORT(cmfe_Solver_DynamicDegreeSetNumber0) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the degree of the polynomial used to interpolate time for a dynamic solver identified by an user number. - SUBROUTINE cmfe_Solver_DynamicDegreeSetNumber1(problemUserNumber,controlLoopIdentifiers,solverIndex,degree,err) + SUBROUTINE cmfe_Solver_DynamicDegreeSetNumber1(contextUserNumber,problemUserNumber,controlLoopIdentifiers,solverIndex,degree,err) !DLLEXPORT(cmfe_Solver_DynamicDegreeSetNumber1) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the linearity type for a dynamic solver identified by an user number. - SUBROUTINE cmfe_Solver_DynamicLinearityTypeGetNumber0(problemUserNumber,controlLoopIdentifier,solverIndex,linearityType,err) + SUBROUTINE cmfe_Solver_DynamicLinearityTypeGetNumber0(contextUserNumber,problemUserNumber,controlLoopIdentifier,solverIndex, & + & linearityType,err) !DLLEXPORT(cmfe_Solver_DynamicLinearityTypeGetNumber0) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the linearity type for a dynamic solver identified by an user number. - SUBROUTINE cmfe_Solver_DynamicLinearityTypeGetNumber1(problemUserNumber,controlLoopIdentifiers,solverIndex,linearityType,err) + SUBROUTINE cmfe_Solver_DynamicLinearityTypeGetNumber1(contextUserNumber,problemUserNumber,controlLoopIdentifiers,solverIndex, & + & linearityType,err) !DLLEXPORT(cmfe_Solver_DynamicLinearityTypeGetNumber1) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the nonlinear solver associated with a nonlinear dynamic solver identified by an user number. - SUBROUTINE cmfe_Solver_DynamicNonlinearSolverGetNumber0(problemUserNumber,controlLoopIdentifier,solverIndex, & + SUBROUTINE cmfe_Solver_DynamicNonlinearSolverGetNumber0(contextUserNumber,problemUserNumber,controlLoopIdentifier,solverIndex, & & nonlinearSolverIndex,err) !DLLEXPORT(cmfe_Solver_DynamicNonlinearSolverGetNumber0) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the nonlinear solver associated with a nonlinear dynamic solver identified by an user number. - SUBROUTINE cmfe_Solver_DynamicNonlinearSolverGetNumber1(problemUserNumber,controlLoopIdentifiers,solverIndex, & + SUBROUTINE cmfe_Solver_DynamicNonlinearSolverGetNumber1(contextUserNumber,problemUserNumber,controlLoopIdentifiers,solverIndex, & & nonlinearSolverIndex,err) !DLLEXPORT(cmfe_Solver_DynamicNonlinearSolverGetNumber1) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the linear solver associated with a linear dynamic solver identified by an user number. - SUBROUTINE cmfe_Solver_DynamicLinearSolverGetNumber0(problemUserNumber,controlLoopIdentifier,solverIndex,linearSolverIndex,err) + SUBROUTINE cmfe_Solver_DynamicLinearSolverGetNumber0(contextUserNumber,problemUserNumber,controlLoopIdentifier,solverIndex, & + & linearSolverIndex,err) !DLLEXPORT(cmfe_Solver_DynamicLinearSolverGetNumber0) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the linear solver associated with a linear dynamic solver identified by an user number. - SUBROUTINE cmfe_Solver_DynamicLinearSolverGetNumber1(problemUserNumber,controlLoopIdentifiers,solverIndex,linearSolverIndex,err) + SUBROUTINE cmfe_Solver_DynamicLinearSolverGetNumber1(contextUserNumber,problemUserNumber,controlLoopIdentifiers,solverIndex, & + & linearSolverIndex,err) !DLLEXPORT(cmfe_Solver_DynamicLinearSolverGetNumber1) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the scheme for a dynamic solver identified by an user number. - SUBROUTINE cmfe_Solver_DynamicSchemeSetNumber0(problemUserNumber,controlLoopIdentifier,solverIndex,scheme,err) + SUBROUTINE cmfe_Solver_DynamicSchemeSetNumber0(contextUserNumber,problemUserNumber,controlLoopIdentifier,solverIndex,scheme,err) !DLLEXPORT(cmfe_Solver_DynamicSchemeSetNumber0) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the scheme for a dynamic solver identified by an user number. - SUBROUTINE cmfe_Solver_DynamicSchemeSetNumber1(problemUserNumber,controlLoopIdentifiers,solverIndex,scheme,err) + SUBROUTINE cmfe_Solver_DynamicSchemeSetNumber1(contextUserNumber,problemUserNumber,controlLoopIdentifiers,solverIndex,scheme,err) !DLLEXPORT(cmfe_Solver_DynamicSchemeSetNumber1) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the theta value for a dynamic solver identified by an user number. - SUBROUTINE cmfe_Solver_DynamicThetaSetNumber00(problemUserNumber,controlLoopIdentifier,solverIndex,theta,err) + SUBROUTINE cmfe_Solver_DynamicThetaSetNumber00(contextUserNumber,problemUserNumber,controlLoopIdentifier,solverIndex,theta,err) !DLLEXPORT(cmfe_Solver_DynamicThetaSetNumber00) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the theta value for a dynamic solver identified by an user number. - SUBROUTINE cmfe_Solver_DynamicThetaSetNumber01(problemUserNumber,controlLoopIdentifier,solverIndex,thetas,err) + SUBROUTINE cmfe_Solver_DynamicThetaSetNumber01(contextUserNumber,problemUserNumber,controlLoopIdentifier,solverIndex,thetas,err) !DLLEXPORT(cmfe_Solver_DynamicThetaSetNumber01) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the theta for a dynamic solver identified by an user number. - SUBROUTINE cmfe_Solver_DynamicThetaSetNumber10(problemUserNumber,controlLoopIdentifiers,solverIndex,theta,err) + SUBROUTINE cmfe_Solver_DynamicThetaSetNumber10(contextUserNumber,problemUserNumber,controlLoopIdentifiers,solverIndex,theta,err) !DLLEXPORT(cmfe_Solver_DynamicThetaSetNumber10) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the theta for a dynamic solver identified by an user number. - SUBROUTINE cmfe_Solver_DynamicThetaSetNumber11(problemUserNumber,controlLoopIdentifiers,solverIndex,thetas,err) + SUBROUTINE cmfe_Solver_DynamicThetaSetNumber11(contextUserNumber,problemUserNumber,controlLoopIdentifiers,solverIndex,thetas,err) !DLLEXPORT(cmfe_Solver_DynamicThetaSetNumber11) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the times for a dynamic solver identified by an user number. - SUBROUTINE cmfe_Solver_DynamicTimesSetNumber0(problemUserNumber,controlLoopIdentifier,solverIndex,currentTime,timeIncrement,err) + SUBROUTINE cmfe_Solver_DynamicTimesSetNumber0(contextUserNumber,problemUserNumber,controlLoopIdentifier,solverIndex, & + & currentTime,timeIncrement,err) !DLLEXPORT(cmfe_Solver_DynamicTimesSetNumber0) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the times for a dynamic solver identified by an user number. - SUBROUTINE cmfe_Solver_DynamicTimesSetNumber1(problemUserNumber,controlLoopIdentifiers,solverIndex,currentTime,timeIncrement,err) + SUBROUTINE cmfe_Solver_DynamicTimesSetNumber1(contextUserNumber,problemUserNumber,controlLoopIdentifiers,solverIndex, & + & currentTime,timeIncrement,err) !DLLEXPORT(cmfe_Solver_DynamicTimesSetNumber1) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets the arbitrary path logical for a geometric transformation identified by an user number. - SUBROUTINE cmfe_Solver_GeometricTransformationArbitraryPathSetNumber(problemUserNumber,controlLoopIdentifier,solverIndex, & - & arbitraryPath,err) + SUBROUTINE cmfe_Solver_GeometricTransformationArbitraryPathSetNumber(contextUserNumber,problemUserNumber,controlLoopIdentifier, & + & solverIndex,arbitraryPath,err) !DLLEXPORT(cmfe_Solver_GeometricTransformationArbitraryPathSetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Clear transformation a geometric transformation identified by an user number. - SUBROUTINE cmfe_Solver_GeometricTransformationClearNumber(problemUserNumber,controlLoopIdentifier,solverIndex,err) + SUBROUTINE cmfe_Solver_GeometricTransformationClearNumber(contextUserNumber,problemUserNumber,controlLoopIdentifier, & + & solverIndex,err) !DLLEXPORT(cmfe_Solver_GeometricTransformationClearNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets the field for a geometric transformation identified by an user number. - SUBROUTINE cmfe_Solver_GeometricTransformationFieldSetNumber(problemUserNumber,controlLoopIdentifier,solverIndex, & - & regionUserNumber,fieldUserNumber,variableType,err) + SUBROUTINE cmfe_Solver_GeometricTransformationFieldSetNumber(contextUserNumber,problemUserNumber,controlLoopIdentifier, & + & solverIndex,regionUserNumber,fieldUserNumber,variableType,err) !DLLEXPORT(cmfe_Solver_GeometricTransformationFieldSetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets the full transformation matrix for a geometric transformation identified by an user number, default to be the 1st load increment - SUBROUTINE cmfe_Solver_GeometricTransformationMatrixSetNumber0(problemUserNumber,controlLoopIdentifier,solverIndex, & - & matrix,err) + SUBROUTINE cmfe_Solver_GeometricTransformationMatrixSetNumber0(contextUserNumber,problemUserNumber,controlLoopIdentifier, & + & solverIndex,matrix,err) !DLLEXPORT(cmfe_Solver_GeometricTransformationMatrixSetNumber0) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets the full transformation matrix at a specific increment for a geometric transformation identified by an user number. - SUBROUTINE cmfe_Solver_GeometricTransformationMatrixSetNumber1(problemUserNumber,controlLoopIdentifier,solverIndex, & - & matrix,loadIncrementIdx,err) + SUBROUTINE cmfe_Solver_GeometricTransformationMatrixSetNumber1(contextUserNumber,problemUserNumber,controlLoopIdentifier, & + & solverIndex,matrix,loadIncrementIdx,err) !DLLEXPORT(cmfe_Solver_GeometricTransformationMatrixSetNumber1) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets the arbitrary path logical for a geometric transformation identified by an user number. - SUBROUTINE cmfe_Solver_GeometricTransformationNoLoadIncrementsSetNumber(problemUserNumber,controlLoopIdentifier, & - & solverIndex,numberOfIncrements,err) + SUBROUTINE cmfe_Solver_GeometricTransformationNoLoadIncrementsSetNumber(contextUserNumber,problemUserNumber, & + & controlLoopIdentifier,solverIndex,numberOfIncrements,err) !DLLEXPORT(cmfe_Solver_GeometricTransformationNoLoadIncrementsSetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets the rotation for a geometric transformation identified by an user number, default to be the 1st load increment - SUBROUTINE cmfe_Solver_GeometricTransformationRotationSetNumber0(problemUserNumber,controlLoopIdentifier,solverIndex, & - & pivotPoint,axis,angle,err) + SUBROUTINE cmfe_Solver_GeometricTransformationRotationSetNumber0(contextUserNumber,problemUserNumber,controlLoopIdentifier, & + & solverIndex,pivotPoint,axis,angle,err) !DLLEXPORT(cmfe_Solver_GeometricTransformationRotationSetNumber0) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets the rotation at a specific increment for a geometric transformation identified by an user number. - SUBROUTINE cmfe_Solver_GeometricTransformationRotationSetNumber1(problemUserNumber,controlLoopIdentifier,solverIndex, & - & pivotPoint,axis,angle,loadIncrementIdx,err) + SUBROUTINE cmfe_Solver_GeometricTransformationRotationSetNumber1(contextUserNumber,problemUserNumber,controlLoopIdentifier, & + & solverIndex,pivotPoint,axis,angle,loadIncrementIdx,err) !DLLEXPORT(cmfe_Solver_GeometricTransformationRotationSetNumber1) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets the scalings for a geometric transformation identified by an user number. - SUBROUTINE cmfe_Solver_GeometricTransformationScalingsSetNumber(problemUserNumber,controlLoopIdentifier,solverIndex, & - & scalings,err) + SUBROUTINE cmfe_Solver_GeometricTransformationScalingsSetNumber(contextUserNumber,problemUserNumber,controlLoopIdentifier, & + & solverIndex,scalings,err) !DLLEXPORT(cmfe_Solver_GeometricTransformationScalingsSetNumber) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets the translation for a geometric transformation identified by an user number, default to be the 1st load increment - SUBROUTINE cmfe_Solver_GeometricTransformationTranslationSetNumber0(problemUserNumber,controlLoopIdentifier,solverIndex, & - & translation,err) + SUBROUTINE cmfe_Solver_GeometricTransformationTranslationSetNumber0(contextUserNumber,problemUserNumber,controlLoopIdentifier, & + & solverIndex,translation,err) !DLLEXPORT(cmfe_Solver_GeometricTransformationTranslationSetNumber0) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets the translation at a specific increment for a geometric transformation identified by an user number. - SUBROUTINE cmfe_Solver_GeometricTransformationTranslationSetNumber1(problemUserNumber,controlLoopIdentifier,solverIndex, & - & translation,loadIncrementIdx,err) + SUBROUTINE cmfe_Solver_GeometricTransformationTranslationSetNumber1(contextUserNumber,problemUserNumber,controlLoopIdentifier, & + & solverIndex,translation,loadIncrementIdx,err) !DLLEXPORT(cmfe_Solver_GeometricTransformationTranslationSetNumber1) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the character string label for a solver identified by an user number. - SUBROUTINE cmfe_Solver_LabelGetCNumber0(problemUserNumber,controlLoopIdentifier,solverIndex,label,err) + SUBROUTINE cmfe_Solver_LabelGetCNumber0(contextUserNumber,problemUserNumber,controlLoopIdentifier,solverIndex,label,err) !DLLEXPORT(cmfe_Solver_LabelGetCNumber0) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the character string label for a solver identified by an user number. - SUBROUTINE cmfe_Solver_LabelGetCNumber1(problemUserNumber,controlLoopIdentifiers,solverIndex,label,err) + SUBROUTINE cmfe_Solver_LabelGetCNumber1(contextUserNUmber,problemUserNumber,controlLoopIdentifiers,solverIndex,label,err) !DLLEXPORT(cmfe_Solver_LabelGetCNumber1) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the varying string label for a solver identified by an user number. - SUBROUTINE cmfe_Solver_LabelGetVSNumber0(problemUserNumber,controlLoopIdentifier,solverIndex,label,err) + SUBROUTINE cmfe_Solver_LabelGetVSNumber0(contextUserNumber,problemUserNumber,controlLoopIdentifier,solverIndex,label,err) !DLLEXPORT(cmfe_Solver_LabelGetVSNumber0) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the varying string label for a solver identified by an user number. - SUBROUTINE cmfe_Solver_LabelGetVSNumber1(problemUserNumber,controlLoopIdentifiers,solverIndex,label,err) + SUBROUTINE cmfe_Solver_LabelGetVSNumber1(contextUserNumber,problemUserNumber,controlLoopIdentifiers,solverIndex,label,err) !DLLEXPORT(cmfe_Solver_LabelGetVSNumber1) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the character string label for a solver identified by an user number. - SUBROUTINE cmfe_Solver_LabelSetCNumber0(problemUserNumber,controlLoopIdentifier,solverIndex,label,err) + SUBROUTINE cmfe_Solver_LabelSetCNumber0(contextUserNumber,problemUserNumber,controlLoopIdentifier,solverIndex,label,err) !DLLEXPORT(cmfe_Solver_LabelSetCNumber0) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the character string label for a solver identified by an user number. - SUBROUTINE cmfe_Solver_LabelSetCNumber1(problemUserNumber,controlLoopIdentifiers,solverIndex,label,err) + SUBROUTINE cmfe_Solver_LabelSetCNumber1(contextUserNumber,problemUserNumber,controlLoopIdentifiers,solverIndex,label,err) !DLLEXPORT(cmfe_Solver_LabelSetCNumber1) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the varying string label for a solver identified by an user number. - SUBROUTINE cmfe_Solver_LabelSetVSNumber0(problemUserNumber,controlLoopIdentifier,solverIndex,label,err) + SUBROUTINE cmfe_Solver_LabelSetVSNumber0(contextUserNumber,problemUserNumber,controlLoopIdentifier,solverIndex,label,err) !DLLEXPORT(cmfe_Solver_LabelSetVSNumber0) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the varying string label for a solver identified by an user number. - SUBROUTINE cmfe_Solver_LabelSetVSNumber1(problemUserNumber,controlLoopIdentifiers,solverIndex,label,err) + SUBROUTINE cmfe_Solver_LabelSetVSNumber1(contextUserNumber,problemUserNumber,controlLoopIdentifiers,solverIndex,label,err) !DLLEXPORT(cmfe_Solver_LabelSetVSNumber1) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the type of library for a solver identified by an user number. - SUBROUTINE cmfe_Solver_LibraryTypeGetNumber0(problemUserNumber,controlLoopIdentifier,solverIndex,libraryType,err) + SUBROUTINE cmfe_Solver_LibraryTypeGetNumber0(contextUserNumber,problemUserNumber,controlLoopIdentifier,solverIndex, & + & libraryType,err) !DLLEXPORT(cmfe_Solver_LibraryTypeGetNumber0) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the library type for a solver identified by an user number. - SUBROUTINE cmfe_Solver_LibraryTypeGetNumber1(problemUserNumber,controlLoopIdentifiers,solverIndex,libraryType,err) + SUBROUTINE cmfe_Solver_LibraryTypeGetNumber1(contextUserNumber,problemUserNumber,controlLoopIdentifiers,solverIndex, & + & libraryType,err) !DLLEXPORT(cmfe_Solver_LibraryTypeGetNumber1) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the type of library for a solver identified by an user number. - SUBROUTINE cmfe_Solver_LibraryTypeSetNumber0(problemUserNumber,controlLoopIdentifier,solverIndex,libraryType,err) + SUBROUTINE cmfe_Solver_LibraryTypeSetNumber0(contextUserNumber,problemUserNumber,controlLoopIdentifier,solverIndex, & + & libraryType,err) !DLLEXPORT(cmfe_Solver_LibraryTypeSetNumber0) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the library type for a solver identified by an user number. - SUBROUTINE cmfe_Solver_LibraryTypeSetNumber1(problemUserNumber,controlLoopIdentifiers,solverIndex,libraryType,err) + SUBROUTINE cmfe_Solver_LibraryTypeSetNumber1(contextUserNumber,problemUserNumber,controlLoopIdentifiers,solverIndex, & + & libraryType,err) !DLLEXPORT(cmfe_Solver_LibraryTypeSetNumber1) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the type of direct linear solver for a solver identified by an user number. - SUBROUTINE cmfe_Solver_LinearDirectTypeSetNumber0(problemUserNumber,controlLoopIdentifier,solverIndex,directSolverType,err) + SUBROUTINE cmfe_Solver_LinearDirectTypeSetNumber0(contextUserNumber,problemUserNumber,controlLoopIdentifier,solverIndex, & + & directSolverType,err) !DLLEXPORT(cmfe_Solver_LinearDirectTypeSetNumber0) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the type of direct linear solver for a solver identified by an user number. - SUBROUTINE cmfe_Solver_LinearDirectTypeSetNumber1(problemUserNumber,controlLoopIdentifiers,solverIndex,directSolverType,err) + SUBROUTINE cmfe_Solver_LinearDirectTypeSetNumber1(contextUserNumber,problemUserNumber,controlLoopIdentifiers,solverIndex, & + & directSolverType,err) !DLLEXPORT(cmfe_Solver_LinearDirectTypeSetNumber1) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the maximum absolute tolerance for an iterative linear solver identified by an user number. - SUBROUTINE cmfe_Solver_LinearIterativeAbsoluteToleranceSetNumber0(problemUserNumber,controlLoopIdentifier,solverIndex, & - & absoluteTolerance,err) + SUBROUTINE cmfe_Solver_LinearIterativeAbsoluteToleranceSetNumber0(contextUserNumber,problemUserNumber,controlLoopIdentifier, & + & solverIndex,absoluteTolerance,err) !DLLEXPORT(cmfe_Solver_LinearIterativeAbsoluteToleranceSetNumber0) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the maximum absolute tolerance for an iterative linear solver identified by an user number. - SUBROUTINE cmfe_Solver_LinearIterativeAbsoluteToleranceSetNumber1(problemUserNumber,controlLoopIdentifiers,solverIndex, & - & absoluteTolerance,err) + SUBROUTINE cmfe_Solver_LinearIterativeAbsoluteToleranceSetNumber1(contextUserNumber,problemUserNumber,controlLoopIdentifiers, & + & solverIndex,absoluteTolerance,err) !DLLEXPORT(cmfe_Solver_LinearIterativeAbsoluteToleranceSetNumber1) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the maximum divergence tolerance for an iterative linear solver identified by an user number. - SUBROUTINE cmfe_Solver_LinearIterativeDivergenceToleranceSetNumber0(problemUserNumber,controlLoopIdentifier,solverIndex, & - & divergenceTolerance,err) + SUBROUTINE cmfe_Solver_LinearIterativeDivergenceToleranceSetNumber0(contextUserNumber,problemUserNumber,controlLoopIdentifier, & + & solverIndex,divergenceTolerance,err) !DLLEXPORT(cmfe_Solver_LinearIterativeDivergenceToleranceSetNumber0) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the maximum divergence tolerance for an iterative linear solver identified by an user number. - SUBROUTINE cmfe_Solver_LinearIterativeDivergenceToleranceSetNumber1(problemUserNumber,controlLoopIdentifiers,solverIndex, & - & divergenceTolerance,err) + SUBROUTINE cmfe_Solver_LinearIterativeDivergenceToleranceSetNumber1(contextUserNumber,problemUserNumber,controlLoopIdentifiers, & + & solverIndex,divergenceTolerance,err) !DLLEXPORT(cmfe_Solver_LinearIterativeDivergenceToleranceSetNumber1) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the GMRES restart value for a GMRES iterative linear solver identified by an user number. - SUBROUTINE cmfe_Solver_LinearIterativeGMRESRestartSetNumber0(problemUserNumber,controlLoopIdentifier,solverIndex, & - & GMRESRestart,err) + SUBROUTINE cmfe_Solver_LinearIterativeGMRESRestartSetNumber0(contextUserNumber,problemUserNumber,controlLoopIdentifier, & + & solverIndex,GMRESRestart,err) !DLLEXPORT(cmfe_Solver_LinearIterativeGMRESRestartSetNumber0) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the GMRES restart value for a GMRES iterative linear solver identified by an user number. - SUBROUTINE cmfe_Solver_LinearIterativeGMRESRestartSetNumber1(problemUserNumber,controlLoopIdentifiers,solverIndex, & - & GMRESRestart,err) + SUBROUTINE cmfe_Solver_LinearIterativeGMRESRestartSetNumber1(contextUserNumber,problemUserNumber,controlLoopIdentifiers, & + & solverIndex,GMRESRestart,err) !DLLEXPORT(cmfe_Solver_LinearIterativeGMRESRestartSetNumber1) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the maximum number of iterations for an iterative linear solver identified by an user number. - SUBROUTINE cmfe_Solver_LinearIterativeMaximumIterationsSetNumber0(problemUserNumber,controlLoopIdentifier,solverIndex, & - & maximumIterations,err) + SUBROUTINE cmfe_Solver_LinearIterativeMaximumIterationsSetNumber0(contextUserNumber,problemUserNumber,controlLoopIdentifier, & + & solverIndex,maximumIterations,err) !DLLEXPORT(cmfe_Solver_LinearIterativeMaximumIterationsSetNumber0) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the maximum number of iterations for an iterative linear solver identified by an user number. - SUBROUTINE cmfe_Solver_LinearIterativeMaximumIterationsSetNumber1(problemUserNumber,controlLoopIdentifiers,solverIndex, & - & maximumIterations,err) + SUBROUTINE cmfe_Solver_LinearIterativeMaximumIterationsSetNumber1(contextUserNumber,problemUserNumber,controlLoopIdentifiers, & + & solverIndex,maximumIterations,err) !DLLEXPORT(cmfe_Solver_LinearIterativeMaximumIterationsSetNumber1) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the preconditioner type for an iterative linear solver identified by an user number. - SUBROUTINE cmfe_Solver_LinearIterativePreconditionerTypeSetNumber0(problemUserNumber,controlLoopIdentifier,solverIndex, & - & preconditionerType,err) + SUBROUTINE cmfe_Solver_LinearIterativePreconditionerTypeSetNumber0(contextUserNumber,problemUserNumber,controlLoopIdentifier, & + & solverIndex,preconditionerType,err) !DLLEXPORT(cmfe_Solver_LinearIterativePreconditionerTypeSetNumber0) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the preconditioner type for an iterative linear solver identified by an user number. - SUBROUTINE cmfe_Solver_LinearIterativePreconditionerTypeSetNumber1(problemUserNumber,controlLoopIdentifiers,solverIndex, & - & preconditionerType,err) + SUBROUTINE cmfe_Solver_LinearIterativePreconditionerTypeSetNumber1(contextUserNumber,problemUserNumber,controlLoopIdentifiers, & + & solverIndex,preconditionerType,err) !DLLEXPORT(cmfe_Solver_LinearIterativePreconditionerTypeSetNumber1) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the maximum relative tolerance for an iterative linear solver identified by an user number. - SUBROUTINE cmfe_Solver_LinearIterativeRelativeToleranceSetNumber0(problemUserNumber,controlLoopIdentifier,solverIndex, & - & relativeTolerance,err) + SUBROUTINE cmfe_Solver_LinearIterativeRelativeToleranceSetNumber0(contextUserNumber,problemUserNumber,controlLoopIdentifier, & + & solverIndex,relativeTolerance,err) !DLLEXPORT(cmfe_Solver_LinearIterativeRelativeToleranceSetNumber0) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the maximum relative tolerance for an iterative linear solver identified by an user number. - SUBROUTINE cmfe_Solver_LinearIterativeRelativeToleranceSetNumber1(problemUserNumber,controlLoopIdentifiers,solverIndex, & - & relativeTolerance,err) + SUBROUTINE cmfe_Solver_LinearIterativeRelativeToleranceSetNumber1(contextUserNumber,problemUserNumber,controlLoopIdentifiers, & + & solverIndex,relativeTolerance,err) !DLLEXPORT(cmfe_Solver_LinearIterativeRelativeToleranceSetNumber1) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the type for an iterative linear solver identified by an user number. - SUBROUTINE cmfe_Solver_LinearIterativeTypeSetNumber0(problemUserNumber,controlLoopIdentifier,solverIndex,iterativeSolverType,err) + SUBROUTINE cmfe_Solver_LinearIterativeTypeSetNumber0(contextUserNumber,problemUserNumber,controlLoopIdentifier,solverIndex, & + & iterativeSolverType,err) !DLLEXPORT(cmfe_Solver_LinearIterativeTypeSetNumber0) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the type for an iterative linear solver identified by an user number. - SUBROUTINE cmfe_Solver_LinearIterativeTypeSetNumber1(problemUserNumber,controlLoopIdentifiers,solverIndex,iterativeSolverType,err) + SUBROUTINE cmfe_Solver_LinearIterativeTypeSetNumber1(contextUserNumber,problemUserNumber,controlLoopIdentifiers,solverIndex, & + & iterativeSolverType,err) !DLLEXPORT(cmfe_Solver_LinearIterativeTypeSetNumber1) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the type for a linear solver identified by an user number. - SUBROUTINE cmfe_Solver_LinearTypeSetNumber0(problemUserNumber,controlLoopIdentifier,solverIndex,linearSolverType,err) + SUBROUTINE cmfe_Solver_LinearTypeSetNumber0(contextUserNumber,problemUserNumber,controlLoopIdentifier,solverIndex, & + & linearSolverType,err) !DLLEXPORT(cmfe_Solver_LinearTypeSetNumber0) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the type for a linear solver identified by an user number. - SUBROUTINE cmfe_Solver_LinearTypeSetNumber1(problemUserNumber,controlLoopIdentifiers,solverIndex,linearSolverType,err) + SUBROUTINE cmfe_Solver_LinearTypeSetNumber1(contextUserNumber,problemUserNumber,controlLoopIdentifiers,solverIndex, & + & linearSolverType,err) !DLLEXPORT(cmfe_Solver_LinearTypeSetNumber1) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the absolute tolerance for an Newton solver identified by an user number. - SUBROUTINE cmfe_Solver_NewtonAbsoluteToleranceSetNumber0(problemUserNumber,controlLoopIdentifier,solverIndex, & + SUBROUTINE cmfe_Solver_NewtonAbsoluteToleranceSetNumber0(contextUserNumber,problemUserNumber,controlLoopIdentifier,solverIndex, & & absoluteTolerance,err) !DLLEXPORT(cmfe_Solver_NewtonAbsoluteToleranceSetNumber0) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the absolute tolerance for a Newton solver identified by an user number. - SUBROUTINE cmfe_Solver_NewtonAbsoluteToleranceSetNumber1(problemUserNumber,controlLoopIdentifiers,solverIndex,absoluteTolerance, & - & err) + SUBROUTINE cmfe_Solver_NewtonAbsoluteToleranceSetNumber1(contextUserNumber,problemUserNumber,controlLoopIdentifiers,solverIndex, & + & absoluteTolerance,err) !DLLEXPORT(cmfe_Solver_NewtonAbsoluteToleranceSetNumber1) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Enables/disables output monitoring for a nonlinear Newton line search solver identified by an user number. - SUBROUTINE cmfe_Solver_NewtonLineSearchMonitorOutputSetNumber0(problemUserNumber,controlLoopIdentifier,solverIndex, & - & monitorLinesearchFlag,err) + SUBROUTINE cmfe_Solver_NewtonLineSearchMonitorOutputSetNumber0(contextUserNumber,problemUserNumber,controlLoopIdentifier, & + & solverIndex,monitorLinesearchFlag,err) !DLLEXPORT(cmfe_Solver_NewtonLineSearchMonitorOutputSetNumber0) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Enables/disables output monitoring for a nonlinear Newton line search solver identified by an user number. - SUBROUTINE cmfe_Solver_NewtonLineSearchMonitorOutputSetNumber1(problemUserNumber,controlLoopIdentifiers,solverIndex, & - & monitorLinesearchFlag,err) + SUBROUTINE cmfe_Solver_NewtonLineSearchMonitorOutputSetNumber1(contextUserNumber,problemUserNumber,controlLoopIdentifiers, & + & solverIndex,monitorLinesearchFlag,err) !DLLEXPORT(cmfe_Solver_NewtonLineSearchMonitorOutputSetNumber1) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the Jacobian calculation type for an Newton solver identified by an user number. - SUBROUTINE cmfe_Solver_NewtonJacobianCalculationTypeSetNumber0(problemUserNumber,controlLoopIdentifier,solverIndex, & - & jacobianCalculationType,err) + SUBROUTINE cmfe_Solver_NewtonJacobianCalculationTypeSetNumber0(contextUserNumber,problemUserNumber,controlLoopIdentifier, & + & solverIndex,jacobianCalculationType,err) !DLLEXPORT(cmfe_Solver_NewtonJacobianCalculationTypeSetNumber0) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the Jacobian calculation type for a Newton solver identified by an user number. - SUBROUTINE cmfe_Solver_NewtonJacobianCalculationTypeSetNumber1(problemUserNumber,controlLoopIdentifiers,solverIndex, & - & jacobianCalculationType,err) + SUBROUTINE cmfe_Solver_NewtonJacobianCalculationTypeSetNumber1(contextUserNumber,problemUserNumber,controlLoopIdentifiers, & + & solverIndex,jacobianCalculationType,err) !DLLEXPORT(cmfe_Solver_NewtonJacobianCalculationTypeSetNumber1) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the linear solver associated with a Newton solver identified by an user number. - SUBROUTINE cmfe_Solver_NewtonLinearSolverGetNumber0(problemUserNumber,controlLoopIdentifier,solverIndex,linearSolverIndex,err) + SUBROUTINE cmfe_Solver_NewtonLinearSolverGetNumber0(contextUserNumber,problemUserNumber,controlLoopIdentifier,solverIndex, & + & linearSolverIndex,err) !DLLEXPORT(cmfe_Solver_NewtonLinearSolverGetNumber0) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the linear solver associated with a Newton solver identified by an user number. - SUBROUTINE cmfe_Solver_NewtonLinearSolverGetNumber1(problemUserNumber,controlLoopIdentifiers,solverIndex,linearSolverIndex,err) + SUBROUTINE cmfe_Solver_NewtonLinearSolverGetNumber1(contextUserNumber,problemUserNumber,controlLoopIdentifiers,solverIndex, & + & linearSolverIndex,err) !DLLEXPORT(cmfe_Solver_NewtonLinearSolverGetNumber1) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the CellML solver associated with a Newton solver identified by an user number. - SUBROUTINE cmfe_Solver_NewtonCellMLSolverGetNumber0(problemUserNumber,controlLoopIdentifier,solverIndex,cellMLSolverIndex,err) + SUBROUTINE cmfe_Solver_NewtonCellMLSolverGetNumber0(contextUserNumber,problemUserNumber,controlLoopIdentifier,solverIndex, & + & cellMLSolverIndex,err) !DLLEXPORT(cmfe_Solver_NewtonCellMLSolverGetNumber0) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the CellML solver associated with a Newton solver identified by an user number. - SUBROUTINE cmfe_Solver_NewtonCellMLSolverGetNumber1(problemUserNumber,controlLoopIdentifiers,solverIndex,cellMLSolverIndex,err) + SUBROUTINE cmfe_Solver_NewtonCellMLSolverGetNumber1(contextUserNumber,problemUserNumber,controlLoopIdentifiers,solverIndex, & + & cellMLSolverIndex,err) !DLLEXPORT(cmfe_Solver_NewtonCellMLSolverGetNumber1) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the convergence test type for an Newton linesearch solver identified by an user number. - SUBROUTINE cmfe_Solver_NewtonConvergenceTestTypeSetNumber0(problemUserNumber,controlLoopIdentifier,solverIndex, & - & convergenceTestType,err) + SUBROUTINE cmfe_Solver_NewtonConvergenceTestTypeSetNumber0(contextUserNumber,problemUserNumber,controlLoopIdentifier, & + & solverIndex,convergenceTestType,err) !DLLEXPORT(cmfe_Solver_NewtonConvergenceTestTypeSetNumber0) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the convergence test type for a Newton solver identified by an user number. - SUBROUTINE cmfe_Solver_NewtonConvergenceTestTypeSetNumber1(problemUserNumber,controlLoopIdentifiers,solverIndex, & - & convergenceTestType,err) + SUBROUTINE cmfe_Solver_NewtonConvergenceTestTypeSetNumber1(contextUserNumber,problemUserNumber,controlLoopIdentifiers, & + & solverIndex,convergenceTestType,err) !DLLEXPORT(cmfe_Solver_NewtonConvergenceTestTypeSetNumber1) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the line search alpha for an Newton linesearch solver identified by an user number. - SUBROUTINE cmfe_Solver_NewtonLineSearchAlphaSetNumber0(problemUserNumber,controlLoopIdentifier,solverIndex,alpha,err) + SUBROUTINE cmfe_Solver_NewtonLineSearchAlphaSetNumber0(contextUserNumber,problemUserNumber,controlLoopIdentifier, & + & solverIndex,alpha,err) !DLLEXPORT(cmfe_Solver_NewtonLineSearchAlphaSetNumber0) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the line search alpha for a Newton line search solver identified by an user number. - SUBROUTINE cmfe_Solver_NewtonLineSearchAlphaSetNumber1(problemUserNumber,controlLoopIdentifiers,solverIndex,alpha,err) + SUBROUTINE cmfe_Solver_NewtonLineSearchAlphaSetNumber1(contextUserNumber,problemUserNumber,controlLoopIdentifiers,solverIndex, & + & alpha,err) !DLLEXPORT(cmfe_Solver_NewtonLineSearchAlphaSetNumber1) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the line search maximum step for an Newton linesearch solver identified by an user number. - SUBROUTINE cmfe_Solver_NewtonLineSearchMaxStepSetNumber0(problemUserNumber,controlLoopIdentifier,solverIndex,maxStep,err) + SUBROUTINE cmfe_Solver_NewtonLineSearchMaxStepSetNumber0(contextUserNumber,problemUserNumber,controlLoopIdentifier, & + & solverIndex,maxStep,err) !DLLEXPORT(cmfe_Solver_NewtonLineSearchMaxStepSetNumber0) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the line search maximum step for a Newton line search solver identified by an user number. - SUBROUTINE cmfe_Solver_NewtonLineSearchMaxStepSetNumber1(problemUserNumber,controlLoopIdentifiers,solverIndex,maxStep,err) + SUBROUTINE cmfe_Solver_NewtonLineSearchMaxStepSetNumber1(contextUserNumber,problemUserNumber,controlLoopIdentifiers, & + & solverIndex,maxStep,err) !DLLEXPORT(cmfe_Solver_NewtonLineSearchMaxStepSetNumber1) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the line search step tolerance for an Newton linesearch solver identified by an user number. - SUBROUTINE cmfe_Solver_NewtonLineSearchStepTolSetNumber0(problemUserNumber,controlLoopIdentifier,solverIndex,stepTol,err) + SUBROUTINE cmfe_Solver_NewtonLineSearchStepTolSetNumber0(contextUserNumber,problemUserNumber,controlLoopIdentifier, & + & solverIndex,stepTol,err) !DLLEXPORT(cmfe_Solver_NewtonLineSearchStepTolSetNumber0) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the line search step tolerance for a Newton line search solver identified by an user number. - SUBROUTINE cmfe_Solver_NewtonLineSearchStepTolSetNumber1(problemUserNumber,controlLoopIdentifiers,solverIndex,stepTol,err) + SUBROUTINE cmfe_Solver_NewtonLineSearchStepTolSetNumber1(contextUserNumber,problemUserNumber,controlLoopIdentifiers, & + & solverIndex,stepTol,err) !DLLEXPORT(cmfe_Solver_NewtonLineSearchStepTolSetNumber1) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the line search type for an Newton linesearch solver identified by an user number. - SUBROUTINE cmfe_Solver_NewtonLineSearchTypeSetNumber0(problemUserNumber,controlLoopIdentifier,solverIndex,lineSearchType,err) + SUBROUTINE cmfe_Solver_NewtonLineSearchTypeSetNumber0(contextUserNUmber,problemUserNumber,controlLoopIdentifier,solverIndex, & + & lineSearchType,err) !DLLEXPORT(cmfe_Solver_NewtonLineSearchTypeSetNumber0) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the type of line search for a Newton line search solver identified by an user number. - SUBROUTINE cmfe_Solver_NewtonLineSearchTypeSetNumber1(problemUserNumber,controlLoopIdentifiers,solverIndex,lineSearchType,err) + SUBROUTINE cmfe_Solver_NewtonLineSearchTypeSetNumber1(contextUserNumber,problemUserNumber,controlLoopIdentifiers,solverIndex, & + & lineSearchType,err) !DLLEXPORT(cmfe_Solver_NewtonLineSearchTypeSetNumber1) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the maximum number of function evaluations for an Newton solver identified by an user number. - SUBROUTINE cmfe_Solver_NewtonMaximumFunctionEvaluationsSetNumber0(problemUserNumber,controlLoopIdentifier,solverIndex, & - & maximumFunctionEvaluations,err) + SUBROUTINE cmfe_Solver_NewtonMaximumFunctionEvaluationsSetNumber0(contextUserNumber,problemUserNumber,controlLoopIdentifier, & + & solverIndex,maximumFunctionEvaluations,err) !DLLEXPORT(cmfe_Solver_NewtonMaximumFunctionEvaluationsSetNumber0) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the maximum number of function evaluations for a Newton solver identified by an user number. - SUBROUTINE cmfe_Solver_NewtonMaximumFunctionEvaluationsSetNumber1(problemUserNumber,controlLoopIdentifiers,solverIndex, & - & maximumFunctionEvaluations,err) + SUBROUTINE cmfe_Solver_NewtonMaximumFunctionEvaluationsSetNumber1(contextUserNumber,problemUserNumber,controlLoopIdentifiers, & + & solverIndex,maximumFunctionEvaluations,err) !DLLEXPORT(cmfe_Solver_NewtonMaximumFunctionEvaluationsSetNumber1) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the maximum number of iterations for an Newton solver identified by an user number. - SUBROUTINE cmfe_Solver_NewtonMaximumIterationsSetNumber0(problemUserNumber,controlLoopIdentifier,solverIndex, & - & maximumIterations,err) + SUBROUTINE cmfe_Solver_NewtonMaximumIterationsSetNumber0(contextUserNumber,problemUserNumber,controlLoopIdentifier, & + & solverIndex,maximumIterations,err) !DLLEXPORT(cmfe_Solver_NewtonMaximumIterationsSetNumber0) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the maximum number of iterations for a Newton solver identified by an user number. - SUBROUTINE cmfe_Solver_NewtonMaximumIterationsSetNumber1(problemUserNumber,controlLoopIdentifiers,solverIndex,maximumIterations, & - & err) + SUBROUTINE cmfe_Solver_NewtonMaximumIterationsSetNumber1(contextUserNumber,problemUserNumber,controlLoopIdentifiers, & + & solverIndex,maximumIterations,err) !DLLEXPORT(cmfe_Solver_NewtonMaximumIterationsSetNumber1) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the relative tolerance for an Newton solver identified by an user number. - SUBROUTINE cmfe_Solver_NewtonRelativeToleranceSetNumber0(problemUserNumber,controlLoopIdentifier,solverIndex, & - & relativeTolerance,err) + SUBROUTINE cmfe_Solver_NewtonRelativeToleranceSetNumber0(contextUserNumber,problemUserNumber,controlLoopIdentifier, & + & solverIndex,relativeTolerance,err) !DLLEXPORT(cmfe_Solver_NewtonRelativeToleranceSetNumber0) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the relative tolerance for a Newton solver identified by an user number. - SUBROUTINE cmfe_Solver_NewtonRelativeToleranceSetNumber1(problemUserNumber,controlLoopIdentifiers,solverIndex,relativeTolerance, & - & err) + SUBROUTINE cmfe_Solver_NewtonRelativeToleranceSetNumber1(contextUserNumber,problemUserNumber,controlLoopIdentifiers, & + & solverIndex,relativeTolerance,err) !DLLEXPORT(cmfe_Solver_NewtonRelativeToleranceSetNumber1) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the solution tolerance for an Newton solver identified by an user number. - SUBROUTINE cmfe_Solver_NewtonSolutionToleranceSetNumber0(problemUserNumber,controlLoopIdentifier,solverIndex, & + SUBROUTINE cmfe_Solver_NewtonSolutionToleranceSetNumber0(contextUserNumber,problemUserNumber,controlLoopIdentifier,solverIndex, & & solutionTolerance,err) !DLLEXPORT(cmfe_Solver_NewtonSolutionToleranceSetNumber0) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the solution tolerance for a Newton solver identified by an user number. - SUBROUTINE cmfe_Solver_NewtonSolutionToleranceSetNumber1(problemUserNumber,controlLoopIdentifiers,solverIndex,solutionTolerance, & - & err) + SUBROUTINE cmfe_Solver_NewtonSolutionToleranceSetNumber1(contextUserNUmber,problemUserNumber,controlLoopIdentifiers, & + & solverIndex,solutionTolerance,err) !DLLEXPORT(cmfe_Solver_NewtonSolutionToleranceSetNumber1) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the delta0 for a Newton trust region solver identified by an user number. - SUBROUTINE cmfe_Solver_NewtonTrustRegionDelta0SetNumber0(problemUserNumber,controlLoopIdentifier,solverIndex,delta0,err) + SUBROUTINE cmfe_Solver_NewtonTrustRegionDelta0SetNumber0(contextUserNumber,problemUserNumber,controlLoopIdentifier, & + & solverIndex,delta0,err) !DLLEXPORT(cmfe_Solver_NewtonTrustRegionDelta0SetNumber0) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the delta0 for a Newton trust region solver identified by an user number. - SUBROUTINE cmfe_Solver_NewtonTrustRegionDelta0SetNumber1(problemUserNumber,controlLoopIdentifiers,solverIndex,delta0,err) + SUBROUTINE cmfe_Solver_NewtonTrustRegionDelta0SetNumber1(contextUserNumber,problemUserNumber,controlLoopIdentifiers, & + & solverIndex,delta0,err) !DLLEXPORT(cmfe_Solver_NewtonTrustRegionDelta0SetNumber1) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the tolerance for a Newton trust region solver identified by an user number. - SUBROUTINE cmfe_Solver_NewtonTrustRegionToleranceSetNumber0(problemUserNumber,controlLoopIdentifier,solverIndex,tolerance,err) + SUBROUTINE cmfe_Solver_NewtonTrustRegionToleranceSetNumber0(contextUserNumber,problemUserNumber,controlLoopIdentifier, & + & solverIndex,tolerance,err) !DLLEXPORT(cmfe_Solver_NewtonTrustRegionToleranceSetNumber0) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the tolerance for a Newton trust region solver identified by an user number. - SUBROUTINE cmfe_Solver_NewtonTrustRegionToleranceSetNumber1(problemUserNumber,controlLoopIdentifiers,solverIndex,tolerance,err) + SUBROUTINE cmfe_Solver_NewtonTrustRegionToleranceSetNumber1(contextUserNumber,problemUserNumber,controlLoopIdentifiers, & + & solverIndex,tolerance,err) !DLLEXPORT(cmfe_Solver_NewtonTrustRegionToleranceSetNumber1) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the type of a Newton solver identified by an user number. - SUBROUTINE cmfe_Solver_NewtonTypeSetNumber0(problemUserNumber,controlLoopIdentifier,solverIndex,newtonSolveType,err) + SUBROUTINE cmfe_Solver_NewtonTypeSetNumber0(contextUserNumber,problemUserNumber,controlLoopIdentifier,solverIndex, & + & newtonSolveType,err) !DLLEXPORT(cmfe_Solver_NewtonTypeSetNumber0) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the type of a Newton solver identified by an user number. - SUBROUTINE cmfe_Solver_NewtonTypeSetNumber1(problemUserNumber,controlLoopIdentifiers,solverIndex,newtonSolveType,err) + SUBROUTINE cmfe_Solver_NewtonTypeSetNumber1(contextUserNumber,problemUserNumber,controlLoopIdentifiers,solverIndex, & + & newtonSolveType,err) !DLLEXPORT(cmfe_Solver_NewtonTypeSetNumber1) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the absolute tolerance for an Quasi-Newton solver identified by an user number. - SUBROUTINE cmfe_Solver_QuasiNewtonAbsoluteToleranceSetNumber0(problemUserNumber,controlLoopIdentifier,solverIndex, & - & absoluteTolerance,err) + SUBROUTINE cmfe_Solver_QuasiNewtonAbsoluteToleranceSetNumber0(contextUserNumber,problemUserNumber,controlLoopIdentifier, & + & solverIndex,absoluteTolerance,err) !DLLEXPORT(cmfe_Solver_QuasiNewtonAbsoluteToleranceSetNumber0) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the absolute tolerance for a Quasi-Newton solver identified by an user number. - SUBROUTINE cmfe_Solver_QuasiNewtonAbsoluteToleranceSetNumber1(problemUserNumber, & - & controlLoopIdentifiers,solverIndex,absoluteTolerance,err) + SUBROUTINE cmfe_Solver_QuasiNewtonAbsoluteToleranceSetNumber1(contextUserNumber,problemUserNumber,controlLoopIdentifiers, & + & solverIndex,absoluteTolerance,err) !DLLEXPORT(cmfe_Solver_QuasiNewtonAbsoluteToleranceSetNumber1) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Enables/disables output monitoring for a nonlinear Quasi-Newton line search solver identified by an user number. - SUBROUTINE cmfe_Solver_QuasiNewtonLineSearchMonitorOutputSetNumber0(problemUserNumber, & + SUBROUTINE cmfe_Solver_QuasiNewtonLineSearchMonitorOutputSetNumber0(contextUserNumber,problemUserNumber, & & controlLoopIdentifier,solverIndex,monitorLinesearchFlag,err) !DLLEXPORT(cmfe_Solver_QuasiNewtonLineSearchMonitorOutputSetNumber0) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Enables/disables output monitoring for a nonlinear Quasi-Newton line search solver identified by an user number. - SUBROUTINE cmfe_Solver_QuasiNewtonLineSearchMonitorOutputSetNumber1(problemUserNumber,controlLoopIdentifiers,solverIndex, & - & monitorLinesearchFlag,err) + SUBROUTINE cmfe_Solver_QuasiNewtonLineSearchMonitorOutputSetNumber1(contextUserNumber,problemUserNumber,controlLoopIdentifiers, & + & solverIndex,monitorLinesearchFlag,err) !DLLEXPORT(cmfe_Solver_QuasiNewtonLineSearchMonitorOutputSetNumber1) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the Jacobian calculation type for an Quasi-Newton solver identified by an user number. - SUBROUTINE cmfe_Solver_QuasiNewtonJacobianCalculationTypeSetNumber0(problemUserNumber,controlLoopIdentifier,solverIndex, & - & jacobianCalculationType,err) + SUBROUTINE cmfe_Solver_QuasiNewtonJacobianCalculationTypeSetNumber0(contextUserNumber,problemUserNumber,controlLoopIdentifier, & + & solverIndex,jacobianCalculationType,err) !DLLEXPORT(cmfe_Solver_QuasiNewtonJacobianCalculationTypeSetNumber0) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the Jacobian calculation type for a Quasi-Newton solver identified by an user number. - SUBROUTINE cmfe_Solver_QuasiNewtonJacobianCalculationTypeSetNumber1(problemUserNumber,controlLoopIdentifiers,solverIndex, & - & jacobianCalculationType,err) + SUBROUTINE cmfe_Solver_QuasiNewtonJacobianCalculationTypeSetNumber1(contextUserNumber,problemUserNumber, & + & controlLoopIdentifiers,solverIndex,jacobianCalculationType,err) !DLLEXPORT(cmfe_Solver_QuasiNewtonJacobianCalculationTypeSetNumber1) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the linear solver associated with a Quasi-Newton solver identified by an user number. - SUBROUTINE cmfe_Solver_QuasiNewtonLinearSolverGetNumber0(problemUserNumber,controlLoopIdentifier, & + SUBROUTINE cmfe_Solver_QuasiNewtonLinearSolverGetNumber0(contextUserNumber,problemUserNumber,controlLoopIdentifier, & & solverIndex,linearSolverIndex,err) !DLLEXPORT(cmfe_Solver_QuasiNewtonLinearSolverGetNumber0) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the linear solver associated with a Quasi-Newton solver identified by an user number. - SUBROUTINE cmfe_Solver_QuasiNewtonLinearSolverGetNumber1(problemUserNumber,controlLoopIdentifiers, & + SUBROUTINE cmfe_Solver_QuasiNewtonLinearSolverGetNumber1(contextUserNumber,problemUserNumber,controlLoopIdentifiers, & & solverIndex,linearSolverIndex,err) !DLLEXPORT(cmfe_Solver_QuasiNewtonLinearSolverGetNumber1) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the CellML solver associated with a Quasi-Newton solver identified by an user number. - SUBROUTINE cmfe_Solver_QuasiNewtonCellMLSolverGetNumber0(problemUserNumber,controlLoopIdentifier, & + SUBROUTINE cmfe_Solver_QuasiNewtonCellMLSolverGetNumber0(contextUserNumber,problemUserNumber,controlLoopIdentifier, & & solverIndex,cellMLSolverIndex,err) !DLLEXPORT(cmfe_Solver_QuasiNewtonCellMLSolverGetNumber0) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the CellML solver associated with a Quasi-Newton solver identified by an user number. - SUBROUTINE cmfe_Solver_QuasiNewtonCellMLSolverGetNumber1(problemUserNumber,controlLoopIdentifiers, & + SUBROUTINE cmfe_Solver_QuasiNewtonCellMLSolverGetNumber1(contextUserNumber,problemUserNumber,controlLoopIdentifiers, & & solverIndex,cellMLSolverIndex,err) !DLLEXPORT(cmfe_Solver_QuasiNewtonCellMLSolverGetNumber1) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the convergence test type for an Quasi-Newton linesearch solver identified by an user number. - SUBROUTINE cmfe_Solver_QuasiNewtonConvergenceTestTypeSetNumber0(problemUserNumber,controlLoopIdentifier,solverIndex, & - & convergenceTestType,err) + SUBROUTINE cmfe_Solver_QuasiNewtonConvergenceTestTypeSetNumber0(contextUserNumber,problemUserNumber,controlLoopIdentifier, & + & solverIndex,convergenceTestType,err) !DLLEXPORT(cmfe_Solver_QuasiNewtonConvergenceTestTypeSetNumber0) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the convergence test type for a Quasi-Newton solver identified by an user number. - SUBROUTINE cmfe_Solver_QuasiNewtonConvergenceTestTypeSetNumber1(problemUserNumber,controlLoopIdentifiers,solverIndex, & - & convergenceTestType,err) + SUBROUTINE cmfe_Solver_QuasiNewtonConvergenceTestTypeSetNumber1(contextUserNumber,problemUserNumber,controlLoopIdentifiers, & + & solverIndex,convergenceTestType,err) !DLLEXPORT(cmfe_Solver_QuasiNewtonConvergenceTestTypeSetNumber1) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the line search maximum step for an Quasi-Newton linesearch solver identified by an user number. - SUBROUTINE cmfe_Solver_QuasiNewtonLineSearchMaxStepSetNumber0(problemUserNumber,controlLoopIdentifier,solverIndex,maxStep,err) + SUBROUTINE cmfe_Solver_QuasiNewtonLineSearchMaxStepSetNumber0(contextUserNumber,problemUserNumber,controlLoopIdentifier, & + & solverIndex,maxStep,err) !DLLEXPORT(cmfe_Solver_QuasiNewtonLineSearchMaxStepSetNumber0) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the line search maximum step for a Quasi-Newton line search solver identified by an user number. - SUBROUTINE cmfe_Solver_QuasiNewtonLineSearchMaxStepSetNumber1(problemUserNumber,controlLoopIdentifiers,solverIndex,maxStep,err) + SUBROUTINE cmfe_Solver_QuasiNewtonLineSearchMaxStepSetNumber1(contextUserNumber,problemUserNumber,controlLoopIdentifiers, & + & solverIndex,maxStep,err) !DLLEXPORT(cmfe_Solver_QuasiNewtonLineSearchMaxStepSetNumber1) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the line search step tolerance for an Quasi-Newton linesearch solver identified by an user number. - SUBROUTINE cmfe_Solver_QuasiNewtonLineSearchStepTolSetNumber0(problemUserNumber,controlLoopIdentifier,solverIndex,stepTol,err) + SUBROUTINE cmfe_Solver_QuasiNewtonLineSearchStepTolSetNumber0(contextUserNumber,problemUserNumber,controlLoopIdentifier, & + & solverIndex,stepTol,err) !DLLEXPORT(cmfe_Solver_QuasiNewtonLineSearchStepTolSetNumber0) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the line search step tolerance for a Quasi-Newton line search solver identified by an user number. - SUBROUTINE cmfe_Solver_QuasiNewtonLineSearchStepTolSetNumber1(problemUserNumber,controlLoopIdentifiers,solverIndex,stepTol,err) + SUBROUTINE cmfe_Solver_QuasiNewtonLineSearchStepTolSetNumber1(contextUserNumber,problemUserNumber,controlLoopIdentifiers, & + & solverIndex,stepTol,err) !DLLEXPORT(cmfe_Solver_QuasiNewtonLineSearchStepTolSetNumber1) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the line search type for an Quasi-Newton linesearch solver identified by an user number. - SUBROUTINE cmfe_Solver_QuasiNewtonLineSearchTypeSetNumber0(problemUserNumber,controlLoopIdentifier, & + SUBROUTINE cmfe_Solver_QuasiNewtonLineSearchTypeSetNumber0(contextUserNumber,problemUserNumber,controlLoopIdentifier, & & solverIndex,lineSearchType,err) !DLLEXPORT(cmfe_Solver_QuasiNewtonLineSearchTypeSetNumber0) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the type of line search for a Quasi-Newton line search solver identified by an user number. - SUBROUTINE cmfe_Solver_QuasiNewtonLineSearchTypeSetNumber1(problemUserNumber,controlLoopIdentifiers, & + SUBROUTINE cmfe_Solver_QuasiNewtonLineSearchTypeSetNumber1(contextUserNumber,problemUserNumber,controlLoopIdentifiers, & & solverIndex,lineSearchType,err) !DLLEXPORT(cmfe_Solver_QuasiNewtonLineSearchTypeSetNumber1) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the maximum number of function evaluations for an Quasi-Newton solver identified by an user number. - SUBROUTINE cmfe_Solver_QuasiNewtonMaximumFunctionEvaluationsSetNumber0(problemUserNumber,controlLoopIdentifier,solverIndex, & - & maximumFunctionEvaluations,err) + SUBROUTINE cmfe_Solver_QuasiNewtonMaximumFunctionEvaluationsSetNumber0(contextUserNumber,problemUserNumber, & + & controlLoopIdentifier,solverIndex,maximumFunctionEvaluations,err) !DLLEXPORT(cmfe_Solver_QuasiNewtonMaximumFunctionEvaluationsSetNumber0) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the maximum number of function evaluations for a Quasi-Newton solver identified by an user number. - SUBROUTINE cmfe_Solver_QuasiNewtonMaximumFunctionEvaluationsSetNumber1(problemUserNumber,controlLoopIdentifiers,solverIndex, & - & maximumFunctionEvaluations,err) + SUBROUTINE cmfe_Solver_QuasiNewtonMaximumFunctionEvaluationsSetNumber1(contextUserNumber,problemUserNumber, & + & controlLoopIdentifiers,solverIndex,maximumFunctionEvaluations,err) !DLLEXPORT(cmfe_Solver_QuasiNewtonMaximumFunctionEvaluationsSetNumber1) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the maximum number of iterations for an Quasi-Newton solver identified by an user number. - SUBROUTINE cmfe_Solver_QuasiNewtonMaximumIterationsSetNumber0(problemUserNumber,controlLoopIdentifier, & + SUBROUTINE cmfe_Solver_QuasiNewtonMaximumIterationsSetNumber0(contextUserNumber,problemUserNumber,controlLoopIdentifier, & & solverIndex,maximumIterations,err) !DLLEXPORT(cmfe_Solver_QuasiNewtonMaximumIterationsSetNumber0) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the maximum number of iterations for a Quasi-Newton solver identified by an user number. - SUBROUTINE cmfe_Solver_QuasiNewtonMaximumIterationsSetNumber1(problemUserNumber,controlLoopIdentifiers, & + SUBROUTINE cmfe_Solver_QuasiNewtonMaximumIterationsSetNumber1(contextUserNumber,problemUserNumber,controlLoopIdentifiers, & & solverIndex,maximumIterations,err) !DLLEXPORT(cmfe_Solver_QuasiNewtonMaximumIterationsSetNumber1) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the relative tolerance for an Quasi-Newton solver identified by an user number. - SUBROUTINE cmfe_Solver_QuasiNewtonRelativeToleranceSetNumber0(problemUserNumber,controlLoopIdentifier, & + SUBROUTINE cmfe_Solver_QuasiNewtonRelativeToleranceSetNumber0(contextUserNumber,problemUserNumber,controlLoopIdentifier, & & solverIndex,relativeTolerance,err) !DLLEXPORT(cmfe_Solver_QuasiNewtonRelativeToleranceSetNumber0) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the relative tolerance for a Quasi-Newton solver identified by an user number. - SUBROUTINE cmfe_Solver_QuasiNewtonRelativeToleranceSetNumber1(problemUserNumber,controlLoopIdentifiers, & + SUBROUTINE cmfe_Solver_QuasiNewtonRelativeToleranceSetNumber1(contextUserNumber,problemUserNumber,controlLoopIdentifiers, & & solverIndex,relativeTolerance,err) !DLLEXPORT(cmfe_Solver_QuasiNewtonRelativeToleranceSetNumber1) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the solution tolerance for an Quasi-Newton solver identified by an user number. - SUBROUTINE cmfe_Solver_QuasiNewtonSolutionToleranceSetNumber0(problemUserNumber,controlLoopIdentifier, & + SUBROUTINE cmfe_Solver_QuasiNewtonSolutionToleranceSetNumber0(contextUserNumber,problemUserNumber,controlLoopIdentifier, & & solverIndex,solutionTolerance,err) !DLLEXPORT(cmfe_Solver_QuasiNewtonSolutionToleranceSetNumber0) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the solution tolerance for a Quasi-Newton solver identified by an user number. - SUBROUTINE cmfe_Solver_QuasiNewtonSolutionToleranceSetNumber1(problemUserNumber,controlLoopIdentifiers, & + SUBROUTINE cmfe_Solver_QuasiNewtonSolutionToleranceSetNumber1(contextUserNumber,problemUserNumber,controlLoopIdentifiers, & & solverIndex,solutionTolerance,err) !DLLEXPORT(cmfe_Solver_QuasiNewtonSolutionToleranceSetNumber1) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the delta0 for a Quasi-Newton trust region solver identified by an user number. - SUBROUTINE cmfe_Solver_QuasiNewtonTrustRegionDelta0SetNumber0(problemUserNumber,controlLoopIdentifier,solverIndex,delta0,err) + SUBROUTINE cmfe_Solver_QuasiNewtonTrustRegionDelta0SetNumber0(contextUserNumber,problemUserNumber,controlLoopIdentifier, & + & solverIndex,delta0,err) !DLLEXPORT(cmfe_Solver_QuasiNewtonTrustRegionDelta0SetNumber0) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the delta0 for a Quasi-Newton trust region solver identified by an user number. - SUBROUTINE cmfe_Solver_QuasiNewtonTrustRegionDelta0SetNumber1(problemUserNumber,controlLoopIdentifiers,solverIndex,delta0,err) + SUBROUTINE cmfe_Solver_QuasiNewtonTrustRegionDelta0SetNumber1(contextUserNumber,problemUserNumber,controlLoopIdentifiers, & + & solverIndex,delta0,err) !DLLEXPORT(cmfe_Solver_QuasiNewtonTrustRegionDelta0SetNumber1) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the tolerance for a Quasi-Newton trust region solver identified by an user number. - SUBROUTINE cmfe_Solver_QuasiNewtonTrustRegionToleranceSetNumber0(problemUserNumber,controlLoopIdentifier, & + SUBROUTINE cmfe_Solver_QuasiNewtonTrustRegionToleranceSetNumber0(contextUserNumber,problemUserNumber,controlLoopIdentifier, & & solverIndex,tolerance,err) !DLLEXPORT(cmfe_Solver_QuasiNewtonTrustRegionToleranceSetNumber0) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the tolerance for a Quasi-Newton trust region solver identified by an user number. - SUBROUTINE cmfe_Solver_QuasiNewtonTrustRegionToleranceSetNumber1(problemUserNumber,controlLoopIdentifiers, & + SUBROUTINE cmfe_Solver_QuasiNewtonTrustRegionToleranceSetNumber1(contextUserNumber,problemUserNumber,controlLoopIdentifiers, & & solverIndex,tolerance,err) !DLLEXPORT(cmfe_Solver_QuasiNewtonTrustRegionToleranceSetNumber1) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the restart of a Quasi-Newton solver identified by an user number. - SUBROUTINE cmfe_Solver_QuasiNewtonRestartSetNumber0(problemUserNumber,controlLoopIdentifier, & + SUBROUTINE cmfe_Solver_QuasiNewtonRestartSetNumber0(contextUserNumber,problemUserNumber,controlLoopIdentifier, & & solverIndex,quasiNewtonRestart,err) !DLLEXPORT(cmfe_Solver_QuasiNewtonRestartSetNumber0) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the restart of a Quasi-Newton solver identified by an user number. - SUBROUTINE cmfe_Solver_QuasiNewtonRestartSetNumber1(problemUserNumber,controlLoopIdentifiers, & + SUBROUTINE cmfe_Solver_QuasiNewtonRestartSetNumber1(contextUserNumber,problemUserNumber,controlLoopIdentifiers, & & solverIndex,quasiNewtonRestart,err) !DLLEXPORT(cmfe_Solver_QuasiNewtonRestartSetNumber1) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the restart type of a Quasi-Newton solver identified by an user number. - SUBROUTINE cmfe_Solver_QuasiNewtonRestartTypeSetNumber0(problemUserNumber,controlLoopIdentifier, & + SUBROUTINE cmfe_Solver_QuasiNewtonRestartTypeSetNumber0(contextUserNumber,problemUserNumber,controlLoopIdentifier, & & solverIndex,quasiNewtonRestartType,err) !DLLEXPORT(cmfe_Solver_QuasiNewtonRestartTypeSetNumber0) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the restart type of a Quasi-Newton solver identified by an user number. - SUBROUTINE cmfe_Solver_QuasiNewtonRestartTypeSetNumber1(problemUserNumber,controlLoopIdentifiers, & + SUBROUTINE cmfe_Solver_QuasiNewtonRestartTypeSetNumber1(contextUserNumber,problemUserNumber,controlLoopIdentifiers, & & solverIndex,quasiNewtonRestartType,err) !DLLEXPORT(cmfe_Solver_QuasiNewtonRestartTypeSetNumber1) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the scale type of a Quasi-Newton solver identified by an user number. - SUBROUTINE cmfe_Solver_QuasiNewtonScaleTypeSetNumber0(problemUserNumber,controlLoopIdentifier, & + SUBROUTINE cmfe_Solver_QuasiNewtonScaleTypeSetNumber0(contextUserNumber,problemUserNumber,controlLoopIdentifier, & & solverIndex,quasiNewtonScaleType,err) !DLLEXPORT(cmfe_Solver_QuasiNewtonScaleTypeSetNumber0) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the scale type of a Quasi-Newton solver identified by an user number. - SUBROUTINE cmfe_Solver_QuasiNewtonScaleTypeSetNumber1(problemUserNumber,controlLoopIdentifiers, & + SUBROUTINE cmfe_Solver_QuasiNewtonScaleTypeSetNumber1(contextUserNumber,problemUserNumber,controlLoopIdentifiers, & & solverIndex,quasiNewtonScaleType,err) !DLLEXPORT(cmfe_Solver_QuasiNewtonScaleTypeSetNumber1) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the type of a Quasi-Newton solver identified by an user number. - SUBROUTINE cmfe_Solver_QuasiNewtonSolveTypeSetNumber0(problemUserNumber,controlLoopIdentifier, & + SUBROUTINE cmfe_Solver_QuasiNewtonSolveTypeSetNumber0(contextUserNumber,problemUserNumber,controlLoopIdentifier, & & solverIndex,quasiNewtonSolveType,err) !DLLEXPORT(cmfe_Solver_QuasiNewtonSolveTypeSetNumber0) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the type of a Quasi-Newton solver identified by an user number. - SUBROUTINE cmfe_Solver_QuasiNewtonSolveTypeSetNumber1(problemUserNumber,controlLoopIdentifiers, & + SUBROUTINE cmfe_Solver_QuasiNewtonSolveTypeSetNumber1(contextUserNumber,problemUserNumber,controlLoopIdentifiers, & & solverIndex,quasiNewtonSolveType,err) !DLLEXPORT(cmfe_Solver_QuasiNewtonSolveTypeSetNumber1) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the type of a Quasi-Newton solver identified by an user number. - SUBROUTINE cmfe_Solver_QuasiNewtonTypeSetNumber0(problemUserNumber,controlLoopIdentifier, & + SUBROUTINE cmfe_Solver_QuasiNewtonTypeSetNumber0(contextUserNumber,problemUserNumber,controlLoopIdentifier, & & solverIndex,quasiNewtonType,err) !DLLEXPORT(cmfe_Solver_QuasiNewtonTypeSetNumber0) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the type of a Quasi-Newton solver identified by an user number. - SUBROUTINE cmfe_Solver_QuasiNewtonTypeSetNumber1(problemUserNumber,controlLoopIdentifiers, & + SUBROUTINE cmfe_Solver_QuasiNewtonTypeSetNumber1(contextUserNumber,problemUserNumber,controlLoopIdentifiers, & & solverIndex,quasiNewtonType,err) !DLLEXPORT(cmfe_Solver_QuasiNewtonTypeSetNumber1) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the type of a nonlinear solver identified by an user number. - SUBROUTINE cmfe_Solver_NonlinearTypeSetNumber0(problemUserNumber,controlLoopIdentifier,solverIndex,nonlinearSolveType,err) + SUBROUTINE cmfe_Solver_NonlinearTypeSetNumber0(contextUserNumber,problemUserNumber,controlLoopIdentifier,solverIndex, & + & nonlinearSolveType,err) !DLLEXPORT(cmfe_Solver_NonlinearTypeSetNumber0) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the type of a nonlinear solver identified by an user number. - SUBROUTINE cmfe_Solver_NonlinearTypeSetNumber1(problemUserNumber,controlLoopIdentifiers,solverIndex,nonlinearSolveType,err) + SUBROUTINE cmfe_Solver_NonlinearTypeSetNumber1(contextUserNumber,problemUserNumber,controlLoopIdentifiers,solverIndex, & + & nonlinearSolveType,err) !DLLEXPORT(cmfe_Solver_NonlinearTypeSetNumber1) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the output type for a solver identified by an user number. - SUBROUTINE cmfe_Solver_OutputTypeSetNumber0(problemUserNumber,controlLoopIdentifier,solverIndex,outputType,err) + SUBROUTINE cmfe_Solver_OutputTypeSetNumber0(contextUserNumber,problemUserNumber,controlLoopIdentifier,solverIndex, & + & outputType,err) !DLLEXPORT(cmfe_Solver_OutputTypeSetNumber0) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the type of output for a solver identified by an user number. - SUBROUTINE cmfe_Solver_OutputTypeSetNumber1(problemUserNumber,controlLoopIdentifiers,solverIndex,outputType,err) + SUBROUTINE cmfe_Solver_OutputTypeSetNumber1(contextUserNumber,problemUserNumber,controlLoopIdentifiers,solverIndex, & + & outputType,err) !DLLEXPORT(cmfe_Solver_OutputTypeSetNumber1) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the solver equations for a solver identified by an user number. - SUBROUTINE cmfe_Solver_SolverEquationsGetNumber0(problemUserNumber,controlLoopIdentifier,solverIndex,solverEquations,err) + SUBROUTINE cmfe_Solver_SolverEquationsGetNumber0(contextUserNumber,problemUserNumber,controlLoopIdentifier,solverIndex, & + & solverEquations,err) !DLLEXPORT(cmfe_Solver_SolverEquationsGetNumber0) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Returns the solver equations for a solver identified by an user number. - SUBROUTINE cmfe_Solver_SolverEquationsGetNumber1(problemUserNumber,controlLoopIdentifiers,solverIndex,solverEquations,err) + SUBROUTINE cmfe_Solver_SolverEquationsGetNumber1(contextUserNumber,problemUserNumber,controlLoopIdentifiers,solverIndex, & + & solverEquations,err) !DLLEXPORT(cmfe_Solver_SolverEquationsGetNumber1) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Adds equations sets to solver equations identified by an user number. - SUBROUTINE cmfe_SolverEquations_EquationsSetAddNumber0(problemUserNumber,controlLoopIdentifier,solverIndex, & + SUBROUTINE cmfe_SolverEquations_EquationsSetAddNumber0(contextUserNumber,problemUserNumber,controlLoopIdentifier,solverIndex, & & regionUserNumber,equationsSetUserNumber,equationsSetIndex,err) !DLLEXPORT(cmfe_SolverEquations_EquationsSetAddNumber0) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Adds equations sets to solver equations identified by an user number. - SUBROUTINE cmfe_SolverEquations_EquationsSetAddNumber1(problemUserNumber,controlLoopIdentifiers,solverIndex, & + SUBROUTINE cmfe_SolverEquations_EquationsSetAddNumber1(contextUserNumber,problemUserNumber,controlLoopIdentifiers,solverIndex, & & regionUserNumber,equationsSetUserNumber,equationsSetIndex,err) !DLLEXPORT(cmfe_SolverEquations_EquationsSetAddNumber1) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Adds an interface condition to solver equations identified by an user number. - SUBROUTINE cmfe_SolverEquations_InterfaceConditionAddNumber0(problemUserNumber,controlLoopIdentifier,solverIndex, & - & interfaceRegionUserNumber,interfaceUserNumber,interfaceConditionUserNumber,interfaceConditionIndex,err) + SUBROUTINE cmfe_SolverEquations_InterfaceConditionAddNumber0(contextUserNumber,problemUserNumber,controlLoopIdentifier, & + & solverIndex,interfaceRegionUserNumber,interfaceUserNumber,interfaceConditionUserNumber,interfaceConditionIndex,err) !DLLEXPORT(cmfe_SolverEquations_InterfaceConditionAddNumber0) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Adds an interface condition to solver equations identified by an user number. - SUBROUTINE cmfe_SolverEquations_InterfaceConditionAddNumber1(problemUserNumber,controlLoopIdentifiers,solverIndex, & - & interfaceRegionUserNumber,interfaceUserNumber,interfaceConditionUserNumber,interfaceConditionIndex,err) + SUBROUTINE cmfe_SolverEquations_InterfaceConditionAddNumber1(contextUserNumber,problemUserNumber,controlLoopIdentifiers, & + & solverIndex,interfaceRegionUserNumber,interfaceUserNumber,interfaceConditionUserNumber,interfaceConditionIndex,err) !DLLEXPORT(cmfe_SolverEquations_InterfaceConditionAddNumber1) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the sparsity type for solver equations identified by an user number. - SUBROUTINE cmfe_SolverEquations_SparsityTypeSetNumber0(problemUserNumber,controlLoopIdentifier,solverIndex,sparsityType,err) + SUBROUTINE cmfe_SolverEquations_SparsityTypeSetNumber0(contextUserNumber,problemUserNumber,controlLoopIdentifier,solverIndex, & + & sparsityType,err) !DLLEXPORT(cmfe_SolverEquations_SparsityTypeSetNumber0) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the sparsity type for solver equations identified by an user number. - SUBROUTINE cmfe_SolverEquations_SparsityTypeSetNumber1(problemUserNumber,controlLoopIdentifiers,solverIndex,sparsityType,err) + SUBROUTINE cmfe_SolverEquations_SparsityTypeSetNumber1(contextUserNumber,problemUserNumber,controlLoopIdentifiers,solverIndex, & + & sparsityType,err) !DLLEXPORT(cmfe_SolverEquations_SparsityTypeSetNumber1) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Gets the symmetry type for solver equations identified by an user number. - SUBROUTINE cmfe_SolverEquations_SymmetryTypeGetNumber0(problemUserNumber,controlLoopIdentifier,solverIndex,symmetryType,err) + SUBROUTINE cmfe_SolverEquations_SymmetryTypeGetNumber0(contextUserNumber,problemUserNumber,controlLoopIdentifier,solverIndex, & + & symmetryType,err) !DLLEXPORT(cmfe_SolverEquations_SymmetryTypeGetNumber0) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Gets the symmetry type for solver equations identified by an user number. - SUBROUTINE cmfe_SolverEquations_SymmetryTypeGetNumber1(problemUserNumber,controlLoopIdentifiers,solverIndex,symmetryType,err) + SUBROUTINE cmfe_SolverEquations_SymmetryTypeGetNumber1(contextUserNumber,problemUserNumber,controlLoopIdentifiers,solverIndex, & + & symmetryType,err) !DLLEXPORT(cmfe_SolverEquations_SymmetryTypeGetNumber1) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the symmetry type for solver equations identified by an user number. - SUBROUTINE cmfe_SolverEquations_SymmetryTypeSetNumber0(problemUserNumber,controlLoopIdentifier,solverIndex,symmetryType,err) + SUBROUTINE cmfe_SolverEquations_SymmetryTypeSetNumber0(contextUserNumber,problemUserNumber,controlLoopIdentifier,solverIndex, & + & symmetryType,err) !DLLEXPORT(cmfe_SolverEquations_SymmetryTypeSetNumber0) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets/changes the symmetry type for solver equations identified by an user number. - SUBROUTINE cmfe_SolverEquations_SymmetryTypeSetNumber1(problemUserNumber,controlLoopIdentifiers,solverIndex,symmetryType,err) + SUBROUTINE cmfe_SolverEquations_SymmetryTypeSetNumber1(contextUserNumber,problemUserNumber,controlLoopIdentifiers,solverIndex, & + & symmetryType,err) !DLLEXPORT(cmfe_SolverEquations_SymmetryTypeSetNumber1) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Finish the creation of the boundary conditions for the solver equations identified by the user numbers - SUBROUTINE cmfe_SolverEquations_BoundaryConditionsCreateFinishNumber0(problemUserNumber,controlLoopIdentifier,solverIndex,err) + SUBROUTINE cmfe_SolverEquations_BoundaryConditionsCreateFinishNumber0(contextUserNumber,problemUserNumber, & + & controlLoopIdentifier,solverIndex,err) !DLLEXPORT(cmfe_SolverEquations_BoundaryConditionsCreateFinishNumber0) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Finish the creation of the boundary conditions for the solver equations identified by the user numbers - SUBROUTINE cmfe_SolverEquations_BoundaryConditionsCreateFinishNumber1(problemUserNumber,controlLoopIdentifiers,solverIndex,err) + SUBROUTINE cmfe_SolverEquations_BoundaryConditionsCreateFinishNumber1(contextUserNumber,problemUserNumber, & + & controlLoopIdentifiers,solverIndex,err) !DLLEXPORT(cmfe_SolverEquations_BoundaryConditionsCreateFinishNumber1) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Start the creation of boundary conditions for solver equations identified by user numbers - SUBROUTINE cmfe_SolverEquations_BoundaryConditionsCreateStartNumber0(problemUserNumber,controlLoopIdentifier,solverIndex,err) + SUBROUTINE cmfe_SolverEquations_BoundaryConditionsCreateStartNumber0(contextUserNumber,problemUserNumber,controlLoopIdentifier, & + & solverIndex,err) !DLLEXPORT(cmfe_SolverEquations_BoundaryConditionsCreateStartNumber0) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Start the creation of boundary conditions for solver equations identified by user numbers - SUBROUTINE cmfe_SolverEquations_BoundaryConditionsCreateStartNumber1(problemUserNumber,controlLoopIdentifiers,solverIndex,err) + SUBROUTINE cmfe_SolverEquations_BoundaryConditionsCreateStartNumber1(contextUserNumber,problemUserNumber, & + & controlLoopIdentifiers,solverIndex,err) !DLLEXPORT(cmfe_SolverEquations_BoundaryConditionsCreateStartNumber1) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Get the boundary conditions for solver equations identified by user numbers - SUBROUTINE cmfe_SolverEquations_BoundaryConditionsGetNumber0(problemUserNumber,controlLoopIdentifier,solverIndex, & - & boundaryConditions,err) + SUBROUTINE cmfe_SolverEquations_BoundaryConditionsGetNumber0(contextUserNumber,problemUserNumber,controlLoopIdentifier, & + & solverIndex,boundaryConditions,err) !DLLEXPORT(cmfe_SolverEquations_BoundaryConditionsGetNumber0) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Get the boundary conditions for solver equations identified by user numbers - SUBROUTINE cmfe_SolverEquations_BoundaryConditionsGetNumber1(problemUserNumber,controlLoopIdentifiers,solverIndex, & - & boundaryConditions,err) + SUBROUTINE cmfe_SolverEquations_BoundaryConditionsGetNumber1(contextUserNumber,problemUserNumber,controlLoopIdentifiers, & + & solverIndex,boundaryConditions,err) !DLLEXPORT(cmfe_SolverEquations_BoundaryConditionsGetNumber1) !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber ! Creates a mesh with the given user number using the given FieldML evaluator. - SUBROUTINE cmfe_FieldML_InputMeshCreateStartNumberVS( fieldml, meshArgumentName, meshNumber, regionNumber, err ) + SUBROUTINE cmfe_FieldML_InputMeshCreateStartNumberVS( fieldml, meshArgumentName, meshNumber, contextUserNumber, & + & regionNumber, err ) !DLLEXPORT(cmfe_FieldML_InputMeshCreateStartNumberVS) + !Arguments TYPE(cmfe_FieldMLIOType), INTENT(INOUT) :: fieldml !< The FieldML context containing the evaluator to use. TYPE(VARYING_STRING), INTENT(IN) :: meshArgumentName !< The name of the mesh argument evaluator to create a mesh from. INTEGER(INTG), INTENT(IN) :: meshNumber !< The user number to assign to the new mesh. + INTEGER(INTG), INTENT(IN) :: contextUserNumber ! Creates a mesh with the given user number using the given FieldML evaluator. - SUBROUTINE cmfe_FieldML_InputMeshCreateStartNumberC( fieldml, meshArgumentName, meshNumber, regionNumber, err ) + SUBROUTINE cmfe_FieldML_InputMeshCreateStartNumberC( fieldml, meshArgumentName, meshNumber, contextUserNumber, & + & regionNumber, err ) !DLLEXPORT(cmfe_FieldML_InputMeshCreateStartNumberC) !Arguments TYPE(cmfe_FieldMLIOType), INTENT(INOUT) :: fieldml !< The FieldML context containing the evaluator to use. CHARACTER(LEN=*), INTENT(IN) :: meshArgumentName !< The name of the mesh argument evaluator to create a mesh from. INTEGER(INTG), INTENT(IN) :: meshNumber !< The user number to assign to the new mesh. + INTEGER(INTG), INTENT(IN) :: contextUserNumber ! Create a coordinate system using the given FieldML evaluator. - SUBROUTINE cmfe_FieldML_InputCoordinateSystemCreateStartObjVS( fieldml, evaluatorName, coordinateSystem, userNumber, err ) + SUBROUTINE cmfe_FieldML_InputCoordinateSystemCreateStartObjVS( fieldml, evaluatorName, userNumber, context, coordinateSystem, & + & err ) !DLLEXPORT(cmfe_FieldML_InputCoordinateSystemCreateStartObjVS) !Arguments TYPE(cmfe_FieldMLIOType), INTENT(INOUT) :: fieldml !< The FieldML context containing the evaluator to use. TYPE(VARYING_STRING), INTENT(IN) :: evaluatorName !< The name of the argument evaluator to create the coordinate system from. INTEGER(INTG), INTENT(IN) :: userNumber !< The user number to assign to the new coordinate system. + TYPE(cmfe_ContextType), INTENT(IN) :: context ! Create a coordinate system using the given FieldML evaluator. - SUBROUTINE cmfe_FieldML_InputCoordinateSystemCreateStartNumberVS( fieldml, evaluatorName, userNumber, err ) + SUBROUTINE cmfe_FieldML_InputCoordinateSystemCreateStartNumberVS( fieldml, evaluatorName, userNumber, contextUserNumber, err ) !DLLEXPORT(cmfe_FieldML_InputCoordinateSystemCreateStartNumberVS) !Arguments TYPE(cmfe_FieldMLIOType), INTENT(INOUT) :: fieldml !< The FieldML context containing the evaluator to use. TYPE(VARYING_STRING), INTENT(IN) :: evaluatorName !< The name of the argument evaluator to create the coordinate system from. INTEGER(INTG), INTENT(IN) :: userNumber !< The user number to assign to the new coordinate system. + INTEGER(INTG), INTENT(IN) :: contextUserNumber ! Create a coordinate system using the given FieldML evaluator. - SUBROUTINE cmfe_FieldML_InputCoordinateSystemCreateStartObjC( fieldml, evaluatorName, coordinateSystem, userNumber, err ) + SUBROUTINE cmfe_FieldML_InputCoordinateSystemCreateStartObjC( fieldml, evaluatorName, userNumber, context, & + & coordinateSystem, err ) !DLLEXPORT(cmfe_FieldML_InputCoordinateSystemCreateStartObjC) !Arguments TYPE(cmfe_FieldMLIOType), INTENT(INOUT) :: fieldml !< The FieldML context containing the evaluator to use. CHARACTER(LEN=*), INTENT(IN) :: evaluatorName !< The name of the argument evaluator to create the coordinate system from. INTEGER(INTG), INTENT(IN) :: userNumber !< The user number to assign to the new coordinate system. + TYPE(cmfe_ContextType), INTENT(IN) :: context ! Create a coordinate system using the given FieldML evaluator. - SUBROUTINE cmfe_FieldML_InputCoordinateSystemCreateStartNumberC( fieldml, evaluatorName, userNumber, err ) + SUBROUTINE cmfe_FieldML_InputCoordinateSystemCreateStartNumberC( fieldml, evaluatorName, userNumber, contextUserNumber, err ) !DLLEXPORT(cmfe_FieldML_InputCoordinateSystemCreateStartNumberC) !Arguments TYPE(cmfe_FieldMLIOType), INTENT(INOUT) :: fieldml !< The FieldML context containing the evaluator to use. CHARACTER(LEN=*), INTENT(IN) :: evaluatorName !< The name of the argument evaluator to create the coordinate system from. INTEGER(INTG), INTENT(IN) :: userNumber !< The user number to assign to the new coordinate system. + INTEGER(INTG), INTENT(IN) :: contextUserNumber !< The user number of the context for the cordinate systems INTEGER(INTG), INTENT(OUT) :: err !< The error code. !Locals + TYPE(ContextType), POINTER :: context TYPE(COORDINATE_SYSTEM_TYPE), POINTER :: coordinateSystem + TYPE(CoordinateSystemsType), POINTER :: coordinateSystems ENTERS("cmfe_FieldML_InputCoordinateSystemCreateStartNumberC",err,error,*999) #ifdef WITH_FIELDML + NULLIFY(context) + NULLIFY(coordinateSystems) NULLIFY(coordinateSystem) - CALL FieldmlInput_CoordinateSystemCreateStart( fieldml%fieldmlInfo, var_str(evaluatorName), coordinateSystem, & - & userNumber, err, error, *999 ) + CALL Context_Get(contexts,contextUserNumber,context,err,error,*999) + CALL Context_CoordinateSystemsGet(context,coordinateSystems,err,error,*999) + CALL FieldmlInput_CoordinateSystemCreateStart( fieldml%fieldmlInfo, var_str(evaluatorName), coordinateSystems, & + & coordinateSystem, userNumber, err, error, *999 ) #else CALL FlagError("Must compile with WITH_FIELDML ON to use FieldML functionality.",err,error,*999) @@ -59350,23 +65280,30 @@ END SUBROUTINE cmfe_FieldML_InputCoordinateSystemCreateStartNumberC ! !> Create a basis using the given FieldML evaluator. - SUBROUTINE cmfe_FieldML_InputBasisCreateStartNumberVS( fieldml, evaluatorName, userNumber, err ) + SUBROUTINE cmfe_FieldML_InputBasisCreateStartNumberVS( fieldml, evaluatorName, userNumber, contextUserNumber, err ) !DLLEXPORT(cmfe_FieldML_InputBasisCreateStartNumberVS) !Arguments TYPE(cmfe_FieldMLIOType), INTENT(INOUT) :: fieldml !< The FieldML context containing the evaluator to use. TYPE(VARYING_STRING), INTENT(IN) :: evaluatorName !< The name of the argument evaluator to create the basis from. INTEGER(INTG), INTENT(IN) :: userNumber !< The user number to assign to the new basis. + INTEGER(INTG), INTENT(IN) :: contextUserNumber !< The user number of the context to create the basis in. INTEGER(INTG), INTENT(OUT) :: err !< The error code. - !Locals TYPE(BASIS_TYPE), POINTER :: basis + TYPE(BasisFunctionsType), POINTER :: basisFunctions + TYPE(ContextType), POINTER :: context ENTERS("cmfe_FieldML_InputBasisCreateStartNumberVS",err,error,*999) #ifdef WITH_FIELDML + NULLIFY(context) + NULLIFY(basisFunctions) NULLIFY( basis ) - CALL FIELDML_INPUT_BASIS_CREATE_START( fieldml%fieldmlInfo, evaluatorName, userNumber, basis, err, error, *999 ) + CALL Context_Get(contexts,contextUserNumber,context,err,error,*999) + CALL Context_BasisFunctionsGet(context,basisFunctions,err,error,*999) + CALL FIELDML_INPUT_BASIS_CREATE_START( fieldml%fieldmlInfo, evaluatorName, userNumber, basisFunctions, & + & basis, err, error, *999 ) #else CALL FlagError("Must compile with WITH_FIELDML ON to use FieldML functionality.",err,error,*999) @@ -59385,20 +65322,26 @@ END SUBROUTINE cmfe_FieldML_InputBasisCreateStartNumberVS ! !> Create a basis using the given FieldML evaluator. - SUBROUTINE cmfe_FieldML_InputBasisCreateStartObjVS( fieldml, evaluatorName, userNumber, basis, err ) + SUBROUTINE cmfe_FieldML_InputBasisCreateStartObjVS( fieldml, evaluatorName, userNumber, context, basis, err ) !DLLEXPORT(cmfe_FieldML_InputBasisCreateStartObjVS) !Arguments TYPE(cmfe_FieldMLIOType), INTENT(INOUT) :: fieldml !< The FieldML context containing the evaluator to use. TYPE(VARYING_STRING), INTENT(IN) :: evaluatorName !< The name of the argument evaluator to create the basis from. INTEGER(INTG), INTENT(IN) :: userNumber !< The user number to assign to the new basis. + TYPE(cmfe_ContextType), INTENT(IN) :: context !< The context to create the basis function on. TYPE(cmfe_BasisType), INTENT(INOUT) :: basis ! Create a basis using the given FieldML evaluator. - SUBROUTINE cmfe_FieldML_InputBasisCreateStartNumberC( fieldml, evaluatorName, userNumber, err ) + SUBROUTINE cmfe_FieldML_InputBasisCreateStartNumberC( fieldml, evaluatorName, userNumber, contextUserNumber,err ) !DLLEXPORT(cmfe_FieldML_InputBasisCreateStartNumberC) !Arguments TYPE(cmfe_FieldMLIOType), INTENT(INOUT) :: fieldml !< The FieldML context containing the evaluator to use. CHARACTER(LEN=*), INTENT(IN) :: evaluatorName !< The name of the argument evaluator to create the basis from. INTEGER(INTG), INTENT(IN) :: userNumber !< The user number to assign to the new basis. + INTEGER(INTG), INTENT(IN) :: contextUserNumber ! Create a basis using the given FieldML evaluator. - SUBROUTINE cmfe_FieldML_InputBasisCreateStartObjC( fieldml, evaluatorName, userNumber, basis, err ) + SUBROUTINE cmfe_FieldML_InputBasisCreateStartObjC( fieldml, evaluatorName, userNumber, context, basis, err ) !DLLEXPORT(cmfe_FieldML_InputBasisCreateStartObjC) !Arguments TYPE(cmfe_FieldMLIOType), INTENT(INOUT) :: fieldml !< The FieldML context containing the evaluator to use. CHARACTER(LEN=*), INTENT(IN) :: evaluatorName !< The name of the argument evaluator to create the basis from. INTEGER(INTG), INTENT(IN) :: userNumber !< The user number to assign to the new basis. + TYPE(cmfe_ContextType), INTENT(IN) :: context !< The context to create the basis for. TYPE(cmfe_BasisType), INTENT(INOUT) :: basis ! Creates a region's nodes using the given FieldML evaluator. - SUBROUTINE cmfe_FieldML_InputNodesCreateStartNumberVS( fieldml, nodesArgumentName, regionNumber, nodes, err ) + SUBROUTINE cmfe_FieldML_InputNodesCreateStartNumberVS( fieldml, nodesArgumentName, contextUserNumber, regionNumber, nodes, err ) !DLLEXPORT(cmfe_FieldML_InputNodesCreateStartNumberVS) + !Arguments TYPE(cmfe_FieldMLIOType), INTENT(INOUT) :: fieldml !< The FieldML context containing the evaluator to use. TYPE(VARYING_STRING), INTENT(IN) :: nodesArgumentName !< The name of the argument evaluator to create the nodes from. + INTEGER(INTG), INTENT(IN) :: contextUserNumber ! Creates a region's nodes using the given FieldML evaluator. - SUBROUTINE cmfe_FieldML_InputNodesCreateStartNumberC( fieldml, nodesArgumentName, regionNumber, nodes, err ) + SUBROUTINE cmfe_FieldML_InputNodesCreateStartNumberC( fieldml, nodesArgumentName, contextUserNumber, regionNumber, nodes, err ) !DLLEXPORT(cmfe_FieldML_InputNodesCreateStartNumberC) + !Arguments TYPE(cmfe_FieldMLIOType), INTENT(INOUT) :: fieldml !< The FieldML context containing the evaluator to use. CHARACTER(LEN=*), INTENT(IN) :: nodesArgumentName !< The name of the argument evaluator to create the nodes from. + INTEGER(INTG), INTENT(IN) :: contextUserNumber ! Use the given FieldML evaluator as a template to create a component on the mesh identified by the given user number. - SUBROUTINE cmfe_FieldML_InputCreateMeshComponentNumberVS( fieldml, regionNumber, meshNumber, componentNumber, evaluatorName, & - & err ) + SUBROUTINE cmfe_FieldML_InputCreateMeshComponentNumberVS( fieldml, contextUserNumber, regionNumber, meshNumber, & + & componentNumber, evaluatorName, err ) !DLLEXPORT(cmfe_FieldML_InputCreateMeshComponentNumberVS) !Arguments TYPE(cmfe_FieldMLIOType), INTENT(INOUT) :: fieldml !< The FieldML context containing the evaluator to use. + INTEGER(INTG), INTENT(IN) :: contextUserNumber ! Use the given FieldML evaluator as a template to create a component on the mesh identified by the given user number. - SUBROUTINE cmfe_FieldML_InputCreateMeshComponentNumberC( fieldml, regionNumber, meshNumber, componentNumber, evaluatorName, & - & err ) + SUBROUTINE cmfe_FieldML_InputCreateMeshComponentNumberC( fieldml, contextUserNumber, regionNumber, meshNumber, & + & componentNumber, evaluatorName, err ) !DLLEXPORT(cmfe_FieldML_InputCreateMeshComponentNumberC) !Arguments TYPE(cmfe_FieldMLIOType), INTENT(INOUT) :: fieldml !< The FieldML context containing the evaluator to use. + INTEGER(INTG), INTENT(IN) :: contextUserNumber ! Create a field with the given user number using the given FieldML evaluator. - SUBROUTINE cmfe_FieldML_InputFieldCreateStartNumberVS( fieldml, regionNumber, meshNumber, decompositionNumber, fieldNumber, & - & variableType, evaluatorName, err ) + SUBROUTINE cmfe_FieldML_InputFieldCreateStartNumberVS( fieldml, contextUserNumber, regionNumber, meshNumber, & + & decompositionNumber, fieldNumber,variableType, evaluatorName, err ) !DLLEXPORT(cmfe_FieldML_InputFieldCreateStartNumberVS) !Arguments TYPE(cmfe_FieldMLIOType), INTENT(INOUT) :: fieldml !< The FieldML context containing the evaluator to use. + INTEGER(INTG), INTENT(IN) :: contextUserNumber ! Create a field with the given user number using the given FieldML evaluator. - SUBROUTINE cmfe_FieldML_InputFieldCreateStartNumberC( fieldml, regionNumber, meshNumber, decompositionNumber, fieldNumber, & - & variableType, evaluatorName, err ) + SUBROUTINE cmfe_FieldML_InputFieldCreateStartNumberC( fieldml, contextUserNumber, regionNumber, meshNumber, decompositionNumber, & + & fieldNumber,variableType, evaluatorName, err ) !DLLEXPORT(cmfe_FieldML_InputFieldCreateStartNumberC) !Arguments TYPE(cmfe_FieldMLIOType), INTENT(INOUT) :: fieldml !< The FieldML context containing the evaluator to use. + INTEGER(INTG), INTENT(IN) :: contextUserNumber ! Update the DOF parameters of field with the given user number, using the given FieldML evaluator. - SUBROUTINE cmfe_FieldML_InputFieldParametersUpdateNumberVS( fieldml, regionNumber, fieldNumber, & + SUBROUTINE cmfe_FieldML_InputFieldParametersUpdateNumberVS( fieldml, contextUserNumber, regionNumber, fieldNumber, & & evaluatorName, variableType, setType, err ) !DLLEXPORT(cmfe_FieldML_InputFieldParametersUpdateNumberVS) + !Arguments TYPE(cmfe_FieldMLIOType), INTENT(INOUT) :: fieldml !< The FieldML context containing the evaluator to use. + INTEGER(INTG), INTENT(IN) :: contextUserNumber ! Update the DOF parameters of field with the given user number, using the given FieldML evaluator. - SUBROUTINE cmfe_FieldML_InputFieldParametersUpdateNumberC( fieldml, regionNumber, fieldNumber, & + SUBROUTINE cmfe_FieldML_InputFieldParametersUpdateNumberC( fieldml, contextUserNumber, regionNumber, fieldNumber, & & evaluatorName, variableType, setType, err ) !DLLEXPORT(cmfe_FieldML_InputFieldParametersUpdateNumberC) !Arguments TYPE(cmfe_FieldMLIOType), INTENT(INOUT) :: fieldml !< The FieldML context containing the evaluator to use. + INTEGER(INTG), INTENT(IN) :: contextUserNumber ! Add the field with the given user number to the given FieldML context. The FieldML type will be inferred. - SUBROUTINE cmfe_FieldML_OutputAddFieldNoTypeNumberVS( fieldml, baseName, dofFormat, regionNumber, fieldNumber, & - & variableType, setType, err ) + SUBROUTINE cmfe_FieldML_OutputAddFieldNoTypeNumberVS( fieldml, baseName, dofFormat, contextUserNumber, regionNumber, & + & fieldNumber,variableType, setType, err ) !DLLEXPORT(cmfe_FieldML_OutputAddFieldNoTypeNumberVS) !Argument variables TYPE(cmfe_FieldMLIOType), INTENT(IN) :: fieldml !< The FieldML context containing the evaluator to use. TYPE(VARYING_STRING), INTENT(IN) :: baseName !< The prefix to use when naming automatically created FieldML objects in the context. TYPE(VARYING_STRING), INTENT(IN) :: dofFormat ! Add the given field to the given FieldML context, using the given FieldML type. - SUBROUTINE cmfe_FieldML_OutputAddFieldWithTypeNumberVS( fieldml, baseName, dofFormat, regionNumber, fieldNumber, & - & variableType, setType, typeHandle, err ) + SUBROUTINE cmfe_FieldML_OutputAddFieldWithTypeNumberVS( fieldml, baseName, dofFormat, contextUserNumber, regionNumber, & + & fieldNumber,variableType, setType, typeHandle, err ) !DLLEXPORT(cmfe_FieldML_OutputAddFieldWithTypeNumberVS) !Argument variables TYPE(cmfe_FieldMLIOType), INTENT(IN) :: fieldml !< The FieldML context containing the evaluator to use. TYPE(VARYING_STRING), INTENT(IN) :: baseName !< The prefix to use when naming automatically created FieldML objects in the context. TYPE(VARYING_STRING), INTENT(IN) :: dofFormat ! Add the field with the given user number to the given FieldML context. The FieldML type will be inferred. - SUBROUTINE cmfe_FieldML_OutputAddFieldNoTypeNumberC( fieldml, baseName, dofFormat, regionNumber, fieldNumber, & - & variableType, setType, err ) + SUBROUTINE cmfe_FieldML_OutputAddFieldNoTypeNumberC( fieldml, baseName, dofFormat, contextUserNumber, regionNumber, & + & fieldNumber,variableType, setType, err ) !DLLEXPORT(cmfe_FieldML_OutputAddFieldNoTypeNumberC) !Argument variables TYPE(cmfe_FieldMLIOType), INTENT(IN) :: fieldml !< The FieldML context containing the evaluator to use. CHARACTER(KIND=C_CHAR,LEN=*), INTENT(IN) :: baseName !< The prefix to use when naming automatically created FieldML objects in the context. CHARACTER(KIND=C_CHAR,LEN=*), INTENT(IN) :: dofFormat ! Add the given field to the given FieldML context, using the given FieldML type. - SUBROUTINE cmfe_FieldML_OutputAddFieldWithTypeNumberC( fieldml, baseName, dofFormat, regionNumber, fieldNumber, & - & variableType, setType, typeHandle, err ) + SUBROUTINE cmfe_FieldML_OutputAddFieldWithTypeNumberC( fieldml, baseName, dofFormat, contextUserNumber, regionNumber, & + & fieldNumber, variableType, setType, typeHandle, err ) !DLLEXPORT(cmfe_FieldML_OutputAddFieldWithTypeNumberC) !Argument variables TYPE(cmfe_FieldMLIOType), INTENT(IN) :: fieldml !< The FieldML context containing the evaluator to use. CHARACTER(KIND=C_CHAR,LEN=*), INTENT(IN) :: baseName !< The prefix to use when naming automatically created FieldML objects in the context. CHARACTER(KIND=C_CHAR,LEN=*), INTENT(IN) :: dofFormat ! Initialise the given FieldML context using the mesh with the given user number. - SUBROUTINE cmfe_FieldML_OutputCreateNumberVS( regionNumber, meshNumber, location, baseName, connectivityFormat, fieldml, err ) + SUBROUTINE cmfe_FieldML_OutputCreateNumberVS( contextUserNumber, regionNumber, meshNumber, location, baseName, & + & connectivityFormat, fieldml, err ) !DLLEXPORT(cmfe_FieldML_OutputCreateNumberVS) + !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber ! Initialise the given FieldML context using the mesh with the given user number. - SUBROUTINE cmfe_FieldML_OutputCreateNumberC( regionNumber, meshNumber, location, baseName, connectivityFormat, fieldml, err ) + SUBROUTINE cmfe_FieldML_OutputCreateNumberC( contextUserNumber, regionNumber, meshNumber, location, baseName, & + & connectivityFormat, fieldml, err ) !DLLEXPORT(cmfe_FieldML_OutputCreateNumberC) + !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber ! Add the field with the given user number to the current FieldML context, only including the given components. - SUBROUTINE cmfe_FieldML_OutputAddFieldComponentsNumberVS( fieldml, typeHandle, baseName, dofFormat, regionNumber, & - & fieldNumber, fieldComponentNumbers, variableType, setType, err ) + SUBROUTINE cmfe_FieldML_OutputAddFieldComponentsNumberVS( fieldml, typeHandle, baseName, dofFormat, contextUserNumber, & + & regionNumber, fieldNumber, fieldComponentNumbers, variableType, setType, err ) !DLLEXPORT(cmfe_FieldML_OutputAddFieldComponentsNumberVS) !Argument variables TYPE(cmfe_FieldMLIOType), INTENT(IN) :: fieldml !< The FieldML context containing the evaluator to use. INTEGER(INTG), INTENT(IN) :: typeHandle !< The FieldML type to assign to the new FieldML field. TYPE(VARYING_STRING), INTENT(IN) :: baseName !< The prefix to use when naming automatically created FieldML objects in the context. TYPE(VARYING_STRING), INTENT(IN) :: dofFormat ! Add the field with the given user number to the current FieldML context, only including the given components. - SUBROUTINE cmfe_FieldML_OutputAddFieldComponentsNumberC( fieldml, typeHandle, baseName, dofFormat, regionNumber, & - & fieldNumber, fieldComponentNumbers, variableType, setType, err ) + SUBROUTINE cmfe_FieldML_OutputAddFieldComponentsNumberC( fieldml, typeHandle, baseName, dofFormat, contextUserNumber, & + & regionNumber,fieldNumber, fieldComponentNumbers, variableType, setType, err ) !DLLEXPORT(cmfe_FieldML_OutputAddFieldComponentsNumberC) !Argument variables TYPE(cmfe_FieldMLIOType), INTENT(IN) :: fieldml !< The FieldML context containing the evaluator to use. INTEGER(INTG), INTENT(IN) :: typeHandle !< The FieldML type to assign to the new FieldML field. CHARACTER(KIND=C_CHAR,LEN=*), INTENT(IN) :: baseName !< The prefix to use when naming automatically created FieldML objects in the context. CHARACTER(KIND=C_CHAR,LEN=*), INTENT(IN) :: dofFormat !problem%CONTROL_LOOP IF(.NOT.ASSOCIATED(controlLoopRoot)) THEN @@ -333,7 +339,8 @@ SUBROUTINE Problem_ControlLoopRootGet(problem,controlLoopRoot,err,error,*) EXITS("Problem_ControlLoopRootGet") RETURN -999 ERRORSEXITS("Problem_ControlLoopRootGet",err,error) +999 NULLIFY(controlLoopRoot) +998 ERRORSEXITS("Problem_ControlLoopRootGet",err,error) RETURN 1 END SUBROUTINE Problem_ControlLoopRootGet @@ -373,6 +380,41 @@ END SUBROUTINE Problem_Get !================================================================================================================================ ! + !>Returns a pointer to the problems for a problem. + SUBROUTINE Problem_ProblemsGet(problem,problems,err,error,*) + + !Argument variables + TYPE(PROBLEM_TYPE), POINTER :: problem !problem%problems + IF(.NOT.ASSOCIATED(problems)) THEN + localError="The problem problems is not associated for problem number "// & + & TRIM(NumberToVString(problem%USER_NUMBER,"*",err,error))//"." + CALL FlagError(localError,err,error,*999) + ENDIF + + EXITS("Problem_ProblemsGet") + RETURN +999 NULLIFY(problems) +998 ERRORSEXITS("Problem_ProblemsGet",err,error) + RETURN 1 + + END SUBROUTINE Problem_ProblemsGet + + ! + !================================================================================================================================ + ! + !>Returns a pointer to the solver for a problem control loop. \see OpenCMISS::Iron::cmfe_Problem_SolverGet SUBROUTINE Problem_SolverGet0(problem,controlLoopIdentifier,solverIndex,solver,err,error,*) @@ -416,8 +458,8 @@ SUBROUTINE Problem_SolverGet1(problem,controlLoopIdentifiers,solverIndex,solver, ENTERS("Problem_SolverGet1",err,error,*998) + IF(ASSOCIATED(solver)) CALL FlagError("Solver is already associated.",err,error,*998) IF(.NOT.ASSOCIATED(problem)) CALL FlagError("Problem is not associated.",err,error,*999) - IF(ASSOCIATED(solver)) CALL FlagError("Solver is already associated.",err,error,*999) NULLIFY(controlLoopRoot) NULLIFY(controlLoop) @@ -431,7 +473,7 @@ SUBROUTINE Problem_SolverGet1(problem,controlLoopIdentifiers,solverIndex,solver, EXITS("Problem_SolverGet1") RETURN -999 NULLIFY(SOLVER) +999 NULLIFY(solver) 998 ERRORSEXITS("Problem_SolverGet1",err,error) RETURN 1 @@ -484,10 +526,10 @@ SUBROUTINE Problem_SolverEquationsGet1(problem,controlLoopIdentifiers,solverInde TYPE(SOLVERS_TYPE), POINTER :: solvers TYPE(VARYING_STRING) :: localError - ENTERS("Problem_SolverEquationsGet1",err,error,*999) + ENTERS("Problem_SolverEquationsGet1",err,error,*998) + IF(ASSOCIATED(solverEquations)) CALL FlagError("Solver equations is already associated.",err,error,*998) IF(.NOT.ASSOCIATED(problem)) CALL FlagError("Problem is not associated.",err,error,*999) - IF(ASSOCIATED(solverEquations)) CALL FlagError("Solver equations is already associated.",err,error,*999) NULLIFY(controlLoopRoot) NULLIFY(controlLoop) @@ -502,7 +544,8 @@ SUBROUTINE Problem_SolverEquationsGet1(problem,controlLoopIdentifiers,solverInde EXITS("Problem_SolverEquationsGet1") RETURN -999 ERRORSEXITS("Problem_SolverEquationsGet1",err,error) +999 NULLIFY(solverEquations) +998 ERRORSEXITS("Problem_SolverEquationsGet1",err,error) RETURN 1 END SUBROUTINE Problem_SolverEquationsGet1 @@ -524,12 +567,11 @@ SUBROUTINE Problem_UserNumberFind(problems,userNumber,problem,err,error,*) INTEGER(INTG) :: problemIdx TYPE(VARYING_STRING) :: localError - ENTERS("Problem_UserNumberFind",err,error,*999) + ENTERS("Problem_UserNumberFind",err,error,*998) - IF(ASSOCIATED(problem)) CALL FlagError("Problem is already associated.",err,error,*999) + IF(ASSOCIATED(problem)) CALL FlagError("Problem is already associated.",err,error,*998) IF(.NOT.ASSOCIATED(problems)) CALL FlagError("Problems is not associated.",err,error,*999) - NULLIFY(problem) IF(ASSOCIATED(problems%problems)) THEN DO problemIdx=1,problems%numberOfProblems IF(ASSOCIATED(problems%problems(problemIdx)%ptr)) THEN @@ -547,7 +589,8 @@ SUBROUTINE Problem_UserNumberFind(problems,userNumber,problem,err,error,*) EXITS("Problem_UserNumberFind") RETURN -999 ERRORSEXITS("Problem_UserNumberFind",err,error) +999 NULLIFY(problem) +998 ERRORSEXITS("Problem_UserNumberFind",err,error) RETURN 1 END SUBROUTINE Problem_UserNumberFind @@ -555,5 +598,35 @@ END SUBROUTINE Problem_UserNumberFind ! !================================================================================================================================ ! + + !>Returns a pointer to the context for a problems. + SUBROUTINE Problems_ContextGet(problems,context,err,error,*) + + !Argument variables + TYPE(ProblemsType), POINTER :: problems !problems%context + IF(.NOT.ASSOCIATED(context)) CALL FlagError("The context is not associated for the problems.",err,error,*999) + + EXITS("Problems_ContextGet") + RETURN +999 NULLIFY(context) +998 ERRORSEXITS("Problems_ContextGet",err,error) + RETURN 1 + + END SUBROUTINE Problems_ContextGet + + ! + !================================================================================================================================ + ! END MODULE ProblemAccessRoutines diff --git a/src/problem_routines.f90 b/src/problem_routines.f90 index 679ca9f3..c3c95e78 100644 --- a/src/problem_routines.f90 +++ b/src/problem_routines.f90 @@ -47,6 +47,8 @@ MODULE PROBLEM_ROUTINES USE BaseRoutines USE BIOELECTRIC_ROUTINES USE CLASSICAL_FIELD_ROUTINES + USE ComputationAccessRoutines + USE ContextAccessRoutines USE CONTROL_LOOP_ROUTINES USE ControlLoopAccessRoutines USE DistributedMatrixVector @@ -717,11 +719,11 @@ END SUBROUTINE PROBLEM_CREATE_FINISH ! !>Starts the process of creating a problem defined by USER_NUMBER. \see OpenCMISS::cmfe_Problem_CreateStart - SUBROUTINE PROBLEM_CREATE_START(problems,USER_NUMBER,PROBLEM_SPECIFICATION,PROBLEM,err,error,*) + SUBROUTINE PROBLEM_CREATE_START(USER_NUMBER,problems,PROBLEM_SPECIFICATION,PROBLEM,err,error,*) !Argument variables - TYPE(ProblemsType), POINTER :: problems !worldWorkGroup diff --git a/src/reaction_diffusion_IO_routines.f90 b/src/reaction_diffusion_IO_routines.f90 index 40c3fc43..8f6e5174 100755 --- a/src/reaction_diffusion_IO_routines.f90 +++ b/src/reaction_diffusion_IO_routines.f90 @@ -49,14 +49,16 @@ MODULE REACTION_DIFFUSION_IO_ROUTINES USE BaseRoutines USE ComputationRoutines USE ComputationAccessRoutines + USE ContextAccessRoutines USE EquationsSetConstants USE FIELD_ROUTINES USE FieldAccessRoutines USE INPUT_OUTPUT USE ISO_VARYING_STRING - USE KINDS + USE Kinds USE MESH_ROUTINES - USE TYPES + USE RegionAccessRoutines + USE Types #ifndef NOMPIMOD USE MPI diff --git a/src/reaction_diffusion_equation_routines.f90 b/src/reaction_diffusion_equation_routines.f90 index 2c165f1a..21bbfa0f 100755 --- a/src/reaction_diffusion_equation_routines.f90 +++ b/src/reaction_diffusion_equation_routines.f90 @@ -1546,7 +1546,7 @@ SUBROUTINE REACTION_DIFFUSION_POST_SOLVE_OUTPUT_DATA(CONTROL_LOOP,SOLVER,err,err CURRENT_LOOP_ITERATION=CONTROL_LOOP%TIME_LOOP%ITERATION_NUMBER OUTPUT_FREQUENCY=CONTROL_LOOP%TIME_LOOP%OUTPUT_NUMBER NULLIFY(workGroup) - CALL Solver_WorkGroup(solver,workGroup,err,error,*999) + CALL Solver_WorkGroupGet(solver,workGroup,err,error,*999) CALL WorkGroup_GroupNodeNumberGet(workGroup,myGroupComputationNodeNumber,err,error,*999) MAX_DIGITS=FLOOR(LOG10((CONTROL_LOOP%TIME_LOOP%STOP_TIME-CONTROL_LOOP%TIME_LOOP%START_TIME)/ & & CONTROL_LOOP%TIME_LOOP%TIME_INCREMENT))+1 diff --git a/src/region_access_routines.f90 b/src/region_access_routines.f90 index 46e46ee3..b9c6d42d 100644 --- a/src/region_access_routines.f90 +++ b/src/region_access_routines.f90 @@ -109,12 +109,16 @@ MODULE RegionAccessRoutines PUBLIC REGION_NODES_GET + PUBLIC Region_RegionsGet + PUBLIC Region_UserNumberFind PUBLIC REGION_USER_NUMBER_FIND PUBLIC Region_UserNumberGet + PUBLIC Regions_WorldRegionGet + CONTAINS ! @@ -135,9 +139,13 @@ SUBROUTINE Region_CellMLGet(region,userNumber,cellml,err,error,*) ENTERS("Region_CellMLGet",err,error,*998) - IF(.NOT.ASSOCIATED(region)) CALL FlagError("Region is not associated.",err,error,*998) - IF(.NOT.region%REGION_FINISHED) CALL FlagError("Region has not been finished.",err,error,*998) IF(ASSOCIATED(cellml)) CALL FlagError("CellML is already associated.",err,error,*998) + IF(.NOT.ASSOCIATED(region)) CALL FlagError("Region is not associated.",err,error,*999) + IF(.NOT.region%REGION_FINISHED) THEN + localError="Region number "//TRIM(NumberToVString(region%USER_NUMBER,"*",err,error))// & + & " has not been finished." + CALL FlagError(localError,err,error,*999) + ENDIF NULLIFY(cellml) CALL CellML_UserNumberFind(userNumber,region,cellml,err,error,*999) @@ -210,12 +218,16 @@ SUBROUTINE Region_CoordinateSystemGet(region,coordinateSystem,err,error,*) !Local Variables TYPE(VARYING_STRING) :: localError - ENTERS("Region_CoordinateSystemGet",ERR,ERROR,*999) + ENTERS("Region_CoordinateSystemGet",ERR,ERROR,*998) !Check input arguments + IF(ASSOCIATED(coordinateSystem)) CALL FlagError("Coordinate system is already associated.",ERR,ERROR,*998) IF(.NOT.ASSOCIATED(region)) CALL FlagError("Region is not associated.",err,error,*999) - IF(.NOT.region%REGION_FINISHED) CALL FlagError("Region has not been finished.",err,error,*999) - IF(ASSOCIATED(coordinateSystem)) CALL FlagError("Coordinate system is already associated.",ERR,ERROR,*999) + IF(.NOT.region%REGION_FINISHED) THEN + localError="Region number "//TRIM(NumberToVString(region%USER_NUMBER,"*",err,error))// & + & " has not been finished." + CALL FlagError(localError,err,error,*999) + ENDIF coordinateSystem=>region%COORDINATE_SYSTEM IF(.NOT.ASSOCIATED(coordinateSystem)) THEN @@ -226,7 +238,8 @@ SUBROUTINE Region_CoordinateSystemGet(region,coordinateSystem,err,error,*) EXITS("Region_CoordinateSystemGet") RETURN -999 ERRORSEXITS("Region_CoordinateSystemGet",err,error) +999 NULLIFY(coordinateSystem) +998 ERRORSEXITS("Region_CoordinateSystemGet",err,error) RETURN 1 END SUBROUTINE Region_CoordinateSystemGet @@ -249,10 +262,18 @@ SUBROUTINE Region_DataPointsGet(region,userNumber,dataPoints,err,error,*) ENTERS("Region_DataPointsGet",err,error,*998) - IF(.NOT.ASSOCIATED(region)) CALL FlagError("Region is not associated.",err,error,*998) - IF(.NOT.region%REGION_FINISHED) CALL FlagError("Region data point sets is not associated.",err,error,*998) IF(ASSOCIATED(dataPoints)) CALL FlagError("Data points is already associated.",err,error,*998) - IF(.NOT.ASSOCIATED(region%dataPointSets)) CALL FlagError("Region data point sets is not associated.",err,error,*998) + IF(.NOT.ASSOCIATED(region)) CALL FlagError("Region is not associated.",err,error,*999) + IF(.NOT.region%REGION_FINISHED) THEN + localError="Region number "//TRIM(NumberToVString(region%USER_NUMBER,"*",err,error))// & + & " has not been finished." + CALL FlagError(localError,err,error,*999) + ENDIF + IF(.NOT.ASSOCIATED(region%dataPointSets)) THEN + localError="Region data point sets is not associated for region number "// & + & TRIM(NumberToVString(region%USER_NUMBER,"*",err,error))//"." + CALL FlagError(localError,err,error,*999) + ENDIF NULLIFY(dataPoints) CALL DataPointSets_UserNumberFind(region%dataPointSets,userNumber,dataPoints,err,error,*999) @@ -288,9 +309,13 @@ SUBROUTINE Region_EquationsSetGet(region,userNumber,equationsSet,err,error,*) ENTERS("Region_EquationsSetGet",err,error,*998) - IF(.NOT.ASSOCIATED(region)) CALL FlagError("Region is not associated.",err,error,*998) - IF(.NOT.region%REGION_FINISHED) CALL FlagError("Region has not been finished.",err,error,*998) IF(ASSOCIATED(equationsSet)) CALL FlagError("Equations set is already associated.",err,error,*998) + IF(.NOT.ASSOCIATED(region)) CALL FlagError("Region is not associated.",err,error,*999) + IF(.NOT.region%REGION_FINISHED) THEN + localError="Region number "//TRIM(NumberToVString(region%USER_NUMBER,"*",err,error))// & + & " has not been finished." + CALL FlagError(localError,err,error,*999) + ENDIF NULLIFY(equationsSet) CALL EquationsSet_UserNumberFind(userNumber,region,equationsSet,err,error,*999) @@ -326,9 +351,13 @@ SUBROUTINE Region_FieldGet(region,userNumber,field,err,error,*) ENTERS("Region_FieldGet",err,error,*998) - IF(.NOT.ASSOCIATED(region)) CALL FlagError("Region is not associated.",err,error,*998) - IF(.NOT.region%REGION_FINISHED) CALL FlagError("Region has not been finished.",err,error,*998) IF(ASSOCIATED(field)) CALL FlagError("Field is already associated.",err,error,*998) + IF(.NOT.ASSOCIATED(region)) CALL FlagError("Region is not associated.",err,error,*999) + IF(.NOT.region%REGION_FINISHED) THEN + localError="Region number "//TRIM(NumberToVString(region%USER_NUMBER,"*",err,error))// & + & " has not been finished." + CALL FlagError(localError,err,error,*999) + ENDIF NULLIFY(field) CALL Field_UserNumberFind(userNumber,region,field,err,error,*999) @@ -364,9 +393,13 @@ SUBROUTINE Region_GeneratedMeshGet(region,userNumber,generatedMesh,err,error,*) ENTERS("Region_GeneratedMeshGet",err,error,*998) - IF(.NOT.ASSOCIATED(region)) CALL FlagError("Region is not associated.",err,error,*998) - IF(.NOT.region%REGION_FINISHED) CALL FlagError("Region has not been finished.",err,error,*998) IF(ASSOCIATED(generatedMesh)) CALL FlagError("Generated mesh is already associated.",err,error,*998) + IF(.NOT.ASSOCIATED(region)) CALL FlagError("Region is not associated.",err,error,*999) + IF(.NOT.region%REGION_FINISHED) THEN + localError="Region number "//TRIM(NumberToVString(region%USER_NUMBER,"*",err,error))// & + & " has not been finished." + CALL FlagError(localError,err,error,*999) + ENDIF NULLIFY(generatedMesh) CALL GeneratedMesh_UserNumberFind(userNumber,region,generatedMesh,err,error,*999) @@ -433,9 +466,13 @@ SUBROUTINE Region_InterfaceGet(region,userNumber,interface,err,error,*) ENTERS("Region_InterfaceGet",err,error,*998) - IF(.NOT.ASSOCIATED(region)) CALL FlagError("Region is not associated.",err,error,*998) - IF(.NOT.region%REGION_FINISHED) CALL FlagError("Region has not been finished.",err,error,*998) IF(ASSOCIATED(interface)) CALL FlagError("Interface is already associated.",err,error,*998) + IF(.NOT.ASSOCIATED(region)) CALL FlagError("Region is not associated.",err,error,*999) + IF(.NOT.region%REGION_FINISHED) THEN + localError="Region number "//TRIM(NumberToVString(region%USER_NUMBER,"*",err,error))// & + & " has not been finished." + CALL FlagError(localError,err,error,*999) + ENDIF NULLIFY(interface) CALL Interface_UserNumberFind(userNumber,region,interface,err,error,*999) @@ -471,9 +508,13 @@ SUBROUTINE Region_MeshGet(region,userNumber,mesh,err,error,*) ENTERS("Region_MeshGet",err,error,*998) - IF(.NOT.ASSOCIATED(region)) CALL FlagError("Region is not associated.",err,error,*998) - IF(.NOT.region%REGION_FINISHED) CALL FlagError("Region has not been finished.",err,error,*998) IF(ASSOCIATED(mesh)) CALL FlagError("Mesh is already associated.",err,error,*998) + IF(.NOT.ASSOCIATED(region)) CALL FlagError("Region is not associated.",err,error,*999) + IF(.NOT.region%REGION_FINISHED) THEN + localError="Region number "//TRIM(NumberToVString(region%USER_NUMBER,"*",err,error))// & + & " has not been finished." + CALL FlagError(localError,err,error,*999) + ENDIF NULLIFY(mesh) CALL Mesh_UserNumberFind(userNumber,region,mesh,err,error,*999) @@ -504,15 +545,24 @@ SUBROUTINE Region_NodesGet(region,nodes,err,error,*) INTEGER(INTG), INTENT(OUT) :: err !region%nodes - IF(.NOT.ASSOCIATED(nodes)) CALL FlagError("Region nodes is not associated.",err,error,*999) + IF(.NOT.ASSOCIATED(nodes)) THEN + localError="The nodes for region number "//TRIM(NumberToVString(region%USER_NUMBER,"*",err,error))// & + & " is not associated." + CALL FlagError(localError,err,error,*999) + ENDIF EXITS("Region_NodesGet") RETURN @@ -526,6 +576,41 @@ END SUBROUTINE Region_NodesGet !================================================================================================================================ ! + !>Returns a pointer to the regions for a region. + SUBROUTINE Region_RegionsGet(region,regions,err,error,*) + + !Argument variables + TYPE(REGION_TYPE), POINTER :: region !region%regions + IF(.NOT.ASSOCIATED(regions)) THEN + localError="Regions is not associated for region number "// & + & TRIM(NumberToVString(region%USER_NUMBER,"*",err,error))//"." + CALL FlagError(localError,err,error,*999) + ENDIF + + EXITS("Region_RegionsGet") + RETURN +999 NULLIFY(regions) +998 ERRORSEXITS("Region_RegionsGet",err,error) + RETURN 1 + + END SUBROUTINE Region_RegionsGet + + ! + !================================================================================================================================ + ! + !>Finds and returns a pointer to the region with the given user number. If no region with that number exists region is left nullified. SUBROUTINE Region_UserNumberFind(regions,userNumber,region,err,error,*) @@ -637,4 +722,34 @@ END SUBROUTINE Region_UserNumberGet !================================================================================================================================ ! + !>Returns a pointer to the world region for a regions. + SUBROUTINE Regions_WorldRegionGet(regions,worldRegion,err,error,*) + + !Argument variables + TYPE(RegionsType), POINTER :: regions !regions%worldREgion + IF(.NOT.ASSOCIATED(worldRegion)) CALL FlagError("Regions world region is not associated.",err,error,*999) + + EXITS("Regions_WorldRegionGet") + RETURN +999 NULLIFY(worldRegion) +998 ERRORSEXITS("Regions_WorldRegionGet",err,error) + RETURN 1 + + END SUBROUTINE Regions_WorldRegionGet + + ! + !================================================================================================================================ + ! + END MODULE RegionAccessRoutines diff --git a/src/region_routines.f90 b/src/region_routines.f90 index a0e34a83..83abe184 100755 --- a/src/region_routines.f90 +++ b/src/region_routines.f90 @@ -45,6 +45,7 @@ MODULE REGION_ROUTINES USE BaseRoutines + USE ContextAccessRoutines USE COORDINATE_ROUTINES USE CoordinateSystemAccessRoutines USE CMISS_CELLML diff --git a/src/solver_access_routines.f90 b/src/solver_access_routines.f90 index d6a3280a..ab5fe58b 100644 --- a/src/solver_access_routines.f90 +++ b/src/solver_access_routines.f90 @@ -94,6 +94,8 @@ MODULE SolverAccessRoutines PUBLIC Solver_SolversGet + PUBLIC Solver_WorkGroupGet + PUBLIC Solvers_ControlLoopGet PUBLIC Solvers_SolverGet @@ -272,6 +274,42 @@ END SUBROUTINE Solver_SolversGet !================================================================================================================================ ! + !>Returns a pointer to the work group for a solver. FOR NOW JUST RETURN THE PROBLEM WORK GROUP. + SUBROUTINE Solver_WorkGroupGet(solver,workGroup,err,error,*) + + !Argument variables + TYPE(SOLVER_TYPE), POINTER :: solver !solver%solvers%CONTROL_LOOP%problem%workGroup + IF(.NOT.ASSOCIATED(workGroup)) CALL FlagError("The solver work group is not associated.",err,error,*999) + + EXITS("Solver_WorkGroupGet") + RETURN +999 NULLIFY(workGroup) +998 ERRORSEXITS("Solver_WorkGroupGet",err,error) + RETURN 1 + + END SUBROUTINE Solver_WorkGroupGet + + ! + !================================================================================================================================ + ! + !>Returns a pointer to the control loop for a solvers. SUBROUTINE Solvers_ControlLoopGet(solvers,controlLoop,err,error,*) diff --git a/src/solver_mapping_routines.f90 b/src/solver_mapping_routines.f90 index 94a01437..29de2855 100755 --- a/src/solver_mapping_routines.f90 +++ b/src/solver_mapping_routines.f90 @@ -62,6 +62,7 @@ MODULE SOLVER_MAPPING_ROUTINES USE Lists USE MatrixVector USE PROBLEM_CONSTANTS + USE SolverAccessRoutines USE SolverMappingAccessRoutines USE Strings USE Types diff --git a/src/types.f90 b/src/types.f90 index 7c2a7907..a8be70ce 100644 --- a/src/types.f90 +++ b/src/types.f90 @@ -3918,19 +3918,19 @@ MODULE Types INTEGER(INTG) :: USER_NUMBER !Contains information about the regions diff --git a/src/util_array.f90 b/src/util_array.f90 index f1d97593..677dc837 100755 --- a/src/util_array.f90 +++ b/src/util_array.f90 @@ -42,7 +42,9 @@ !> Implements various dynamic array routines MODULE UTIL_ARRAY USE BaseRoutines - USE TYPES + USE ISO_VARYING_STRING + USE Kinds + USE Types #include "macros.h" diff --git a/tests/CellML/CellMLModelIntegration.f90 b/tests/CellML/CellMLModelIntegration.f90 index 32c153e9..90ab59c2 100644 --- a/tests/CellML/CellMLModelIntegration.f90 +++ b/tests/CellML/CellMLModelIntegration.f90 @@ -48,7 +48,7 @@ !< !> Main program -PROGRAM CELLMLINTEGRATIONFORTRANEXAMPLE +PROGRAM CellMLIntegrationFortranExample USE OpenCMISS USE OpenCMISS_Iron @@ -125,8 +125,9 @@ PROGRAM CELLMLINTEGRATIONFORTRANEXAMPLE TYPE(cmfe_CellMLType) :: CellML TYPE(cmfe_CellMLEquationsType) :: CellMLEquations TYPE(cmfe_ComputationEnvironmentType) :: ComputationEnvironment + TYPE(cmfe_ContextType) :: context TYPE(cmfe_ControlLoopType) :: ControlLoop - TYPE(cmfe_CoordinateSystemType) :: CoordinateSystem,WorldCoordinateSystem + TYPE(cmfe_CoordinateSystemType) :: CoordinateSystem TYPE(cmfe_DecompositionType) :: Decomposition TYPE(cmfe_EquationsType) :: Equations TYPE(cmfe_EquationsSetType) :: EquationsSet @@ -184,13 +185,17 @@ PROGRAM CELLMLINTEGRATIONFORTRANEXAMPLE ! ENDIF !Intialise OpenCMISS - CALL cmfe_Initialise(WorldCoordinateSystem,WorldRegion,Err) + CALL cmfe_Context_Initialise(context,err) + CALL cmfe_Initialise(context,Err) + CALL cmfe_Region_Initialise(worldRegion,err) + CALL cmfe_Context_WorldRegionGet(context,worldRegion,err) !Trap errors CALL cmfe_ErrorHandlingModeSet(CMFE_ERRORS_TRAP_ERROR,Err) !Get the computation nodes information CALL cmfe_ComputationEnvironment_Initialise(ComputationEnvironment,Err) + CALL cmfe_Context_ComputationEnvironmentGet(context,computationEnvironment,err) CALL cmfe_ComputationEnvironment_NumberOfWorldNodesGet(ComputationEnvironment,NumberOfComputationNodes,Err) CALL cmfe_ComputationEnvironment_WorldNodeNumberGet(ComputationEnvironment,ComputationNodeNumber,Err) @@ -207,7 +212,7 @@ PROGRAM CELLMLINTEGRATIONFORTRANEXAMPLE !Start the creation of a new RC coordinate system CALL cmfe_CoordinateSystem_Initialise(CoordinateSystem,Err) - CALL cmfe_CoordinateSystem_CreateStart(CoordinateSystemUserNumber,CoordinateSystem,Err) + CALL cmfe_CoordinateSystem_CreateStart(CoordinateSystemUserNumber,context,CoordinateSystem,Err) !Set the coordinate system to be 1D CALL cmfe_CoordinateSystem_DimensionSet(CoordinateSystem,1,Err) !Finish the creation of the coordinate system @@ -225,7 +230,7 @@ PROGRAM CELLMLINTEGRATIONFORTRANEXAMPLE !Start the creation of a basis (default is trilinear lagrange) CALL cmfe_Basis_Initialise(Basis,Err) - CALL cmfe_Basis_CreateStart(BasisUserNumber,Basis,Err) + CALL cmfe_Basis_CreateStart(BasisUserNumber,context,Basis,Err) !Set the basis to be a bilinear Lagrange basis CALL cmfe_Basis_NumberOfXiSet(Basis,1,Err) !Finish the creation of the basis @@ -413,7 +418,7 @@ PROGRAM CELLMLINTEGRATIONFORTRANEXAMPLE !Start the creation of a problem. CALL cmfe_Problem_Initialise(Problem,Err) !Set the problem to be a standard Monodomain problem - CALL cmfe_Problem_CreateStart(ProblemUserNumber,[CMFE_PROBLEM_BIOELECTRICS_CLASS,CMFE_PROBLEM_MONODOMAIN_EQUATION_TYPE, & + CALL cmfe_Problem_CreateStart(ProblemUserNumber,context,[CMFE_PROBLEM_BIOELECTRICS_CLASS,CMFE_PROBLEM_MONODOMAIN_EQUATION_TYPE, & & CMFE_PROBLEM_MONODOMAIN_GUDUNOV_SPLIT_SUBTYPE],Problem,Err) !Finish the creation of a problem. CALL cmfe_Problem_CreateFinish(Problem,Err) @@ -530,10 +535,10 @@ PROGRAM CELLMLINTEGRATIONFORTRANEXAMPLE ENDIF !Finialise CMISS - CALL cmfe_Finalise(Err) + CALL cmfe_Finalise(context,Err) WRITE(*,'(A)') "Program successfully completed." STOP -END PROGRAM CELLMLINTEGRATIONFORTRANEXAMPLE +END PROGRAM CellMLIntegrationFortranExample diff --git a/tests/CellML/Monodomain.f90 b/tests/CellML/Monodomain.f90 index 9e2fecc2..18167da8 100644 --- a/tests/CellML/Monodomain.f90 +++ b/tests/CellML/Monodomain.f90 @@ -48,7 +48,7 @@ !< !> Main program -PROGRAM MONODOMAINEXAMPLE +PROGRAM MonodomainExample USE OpenCMISS USE OpenCMISS_Iron @@ -123,8 +123,9 @@ PROGRAM MONODOMAINEXAMPLE TYPE(cmfe_CellMLType) :: CellML TYPE(cmfe_CellMLEquationsType) :: CellMLEquations TYPE(cmfe_ComputationEnvironmentType) :: ComputationEnvironment + TYPE(cmfe_ContextType) :: context TYPE(cmfe_ControlLoopType) :: ControlLoop - TYPE(cmfe_CoordinateSystemType) :: CoordinateSystem,WorldCoordinateSystem + TYPE(cmfe_CoordinateSystemType) :: CoordinateSystem TYPE(cmfe_DecompositionType) :: Decomposition TYPE(cmfe_EquationsType) :: Equations TYPE(cmfe_EquationsSetType) :: EquationsSet @@ -176,13 +177,17 @@ PROGRAM MONODOMAINEXAMPLE ENDIF !Intialise OpenCMISS - CALL cmfe_Initialise(WorldCoordinateSystem,WorldRegion,Err) + CALL cmfe_Context_Initialise(context,err) + CALL cmfe_Initialise(context,Err) + CALL cmfe_Region_Initialise(worldRegion,err) + CALL cmfe_Context_WorldRegionGet(context,worldRegion,err) !Trap errors CALL cmfe_ErrorHandlingModeSet(CMFE_ERRORS_TRAP_ERROR,Err) !Get the computation nodes information CALL cmfe_ComputationEnvironment_Initialise(ComputationEnvironment,Err) + CALL cmfe_Context_ComputationEnvironmentGet(context,computationEnvironment,err) CALL cmfe_ComputationEnvironment_NumberOfWorldNodesGet(ComputationEnvironment,NumberOfComputationNodes,Err) CALL cmfe_ComputationEnvironment_WorldNodeNumberGet(ComputationEnvironment,ComputationNodeNumber,Err) @@ -194,7 +199,7 @@ PROGRAM MONODOMAINEXAMPLE !Start the creation of a new RC coordinate system CALL cmfe_CoordinateSystem_Initialise(CoordinateSystem,Err) - CALL cmfe_CoordinateSystem_CreateStart(CoordinateSystemUserNumber,CoordinateSystem,Err) + CALL cmfe_CoordinateSystem_CreateStart(CoordinateSystemUserNumber,context,CoordinateSystem,Err) IF(NUMBER_GLOBAL_Z_ELEMENTS==0) THEN !Set the coordinate system to be 2D CALL cmfe_CoordinateSystem_DimensionSet(CoordinateSystem,2,Err) @@ -217,7 +222,7 @@ PROGRAM MONODOMAINEXAMPLE !Start the creation of a basis (default is trilinear lagrange) CALL cmfe_Basis_Initialise(Basis,Err) - CALL cmfe_Basis_CreateStart(BasisUserNumber,Basis,Err) + CALL cmfe_Basis_CreateStart(BasisUserNumber,context,Basis,Err) IF(NUMBER_GLOBAL_Z_ELEMENTS==0) THEN !Set the basis to be a bilinear Lagrange basis CALL cmfe_Basis_NumberOfXiSet(Basis,2,Err) @@ -425,7 +430,7 @@ PROGRAM MONODOMAINEXAMPLE !Start the creation of a problem. CALL cmfe_Problem_Initialise(Problem,Err) - CALL cmfe_Problem_CreateStart(ProblemUserNumber,[CMFE_PROBLEM_BIOELECTRICS_CLASS,CMFE_PROBLEM_MONODOMAIN_EQUATION_TYPE, & + CALL cmfe_Problem_CreateStart(ProblemUserNumber,context,[CMFE_PROBLEM_BIOELECTRICS_CLASS,CMFE_PROBLEM_MONODOMAIN_EQUATION_TYPE, & & CMFE_PROBLEM_MONODOMAIN_GUDUNOV_SPLIT_SUBTYPE],Problem,Err) !Finish the creation of a problem. CALL cmfe_Problem_CreateFinish(Problem,Err) @@ -542,10 +547,10 @@ PROGRAM MONODOMAINEXAMPLE ENDIF !Finialise CMISS - CALL cmfe_Finalise(Err) + CALL cmfe_Finalise(context,Err) WRITE(*,'(A)') "Program successfully completed." STOP -END PROGRAM MONODOMAINEXAMPLE +END PROGRAM MonodomainExample diff --git a/tests/ClassicalField/Analytic1DDiffusion.f90 b/tests/ClassicalField/Analytic1DDiffusion.f90 index cfb4a480..bef2998b 100644 --- a/tests/ClassicalField/Analytic1DDiffusion.f90 +++ b/tests/ClassicalField/Analytic1DDiffusion.f90 @@ -46,7 +46,7 @@ !< !> Main program -PROGRAM ANALYTIC1DDIFFUSIONEXAMPLE +PROGRAM Analytic1DDiffusionExample USE OpenCMISS USE OpenCMISS_Iron @@ -90,7 +90,8 @@ PROGRAM ANALYTIC1DDIFFUSIONEXAMPLE !CMISS variables TYPE(cmfe_BasisType) :: Basis - TYPE(cmfe_CoordinateSystemType) :: CoordinateSystem,WorldCoordinateSystem + TYPE(cmfe_ContextType) :: context + TYPE(cmfe_CoordinateSystemType) :: CoordinateSystem TYPE(cmfe_DecompositionType) :: Decomposition TYPE(cmfe_EquationsType) :: Equations TYPE(cmfe_EquationsSetType) :: EquationsSet @@ -114,7 +115,7 @@ PROGRAM ANALYTIC1DDIFFUSIONEXAMPLE !Generic CMISS variables INTEGER(CMISSIntg) :: EquationsSetIndex - INTEGER(CMISSIntg) :: Err + INTEGER(CMISSIntg) :: err #ifdef WIN32 !Initialise QuickWin @@ -128,198 +129,202 @@ PROGRAM ANALYTIC1DDIFFUSIONEXAMPLE #endif !Intialise OpenCMISS - CALL cmfe_Initialise(WorldCoordinateSystem,WorldRegion,Err) + CALL cmfe_Context_Initialise(context,err) + CALL cmfe_Initialise(context,Err) - CALL cmfe_ErrorHandlingModeSet(CMFE_ERRORS_TRAP_ERROR,Err) + CALL cmfe_Region_Initialise(worldRegion,err) + CALL cmfe_Context_WorldRegionGet(context,worldRegion,err) + + CALL cmfe_errorHandlingModeSet(CMFE_ERRORS_TRAP_ERROR,err) - CALL cmfe_OutputSetOn("Diffusion1DAnalytic",Err) + CALL cmfe_OutputSetOn("Diffusion1DAnalytic",err) !Start the creation of a new RC coordinate system - CALL cmfe_CoordinateSystem_Initialise(CoordinateSystem,Err) - CALL cmfe_CoordinateSystem_CreateStart(CoordinateSystemUserNumber,CoordinateSystem,Err) + CALL cmfe_CoordinateSystem_Initialise(CoordinateSystem,err) + CALL cmfe_CoordinateSystem_CreateStart(CoordinateSystemUserNumber,context,CoordinateSystem,err) !Set the coordinate system to be 1D - CALL cmfe_CoordinateSystem_DimensionSet(CoordinateSystem,1,Err) + CALL cmfe_CoordinateSystem_DimensionSet(CoordinateSystem,1,err) !Finish the creation of the coordinate system - CALL cmfe_CoordinateSystem_CreateFinish(CoordinateSystem,Err) + CALL cmfe_CoordinateSystem_CreateFinish(CoordinateSystem,err) !Start the creation of the region - CALL cmfe_Region_Initialise(Region,Err) - CALL cmfe_Region_CreateStart(RegionUserNumber,WorldRegion,Region,Err) + CALL cmfe_Region_Initialise(Region,err) + CALL cmfe_Region_CreateStart(RegionUserNumber,WorldRegion,Region,err) !Label the Region - CALL cmfe_Region_LabelSet(Region,"Region",Err) + CALL cmfe_Region_LabelSet(Region,"Region",err) !Set the regions coordinate system to the 1D RC coordinate system that we have created - CALL cmfe_Region_CoordinateSystemSet(Region,CoordinateSystem,Err) + CALL cmfe_Region_CoordinateSystemSet(Region,CoordinateSystem,err) !Finish the creation of the region - CALL cmfe_Region_CreateFinish(Region,Err) + CALL cmfe_Region_CreateFinish(Region,err) !Start the creation of a basis (default is trilinear lagrange) - CALL cmfe_Basis_Initialise(Basis,Err) - CALL cmfe_Basis_CreateStart(BasisUserNumber,Basis,Err) + CALL cmfe_Basis_Initialise(Basis,err) + CALL cmfe_Basis_CreateStart(BasisUserNumber,context,Basis,err) !Set the basis to be a linear Lagrange basis - CALL cmfe_Basis_NumberOfXiSet(Basis,1,Err) + CALL cmfe_Basis_NumberOfXiSet(Basis,1,err) !Finish the creation of the basis - CALL cmfe_Basis_CreateFinish(BASIS,Err) + CALL cmfe_Basis_CreateFinish(BASIS,err) !Start the creation of a generated mesh in the region - CALL cmfe_GeneratedMesh_Initialise(GeneratedMesh,Err) - CALL cmfe_GeneratedMesh_CreateStart(GeneratedMeshUserNumber,Region,GeneratedMesh,Err) + CALL cmfe_GeneratedMesh_Initialise(GeneratedMesh,err) + CALL cmfe_GeneratedMesh_CreateStart(GeneratedMeshUserNumber,Region,GeneratedMesh,err) !Set up a regular mesh - CALL cmfe_GeneratedMesh_TypeSet(GeneratedMesh,CMFE_GENERATED_MESH_REGULAR_MESH_TYPE,Err) + CALL cmfe_GeneratedMesh_TypeSet(GeneratedMesh,CMFE_GENERATED_MESH_REGULAR_MESH_TYPE,err) !Set the default basis - CALL cmfe_GeneratedMesh_BasisSet(GeneratedMesh,Basis,Err) + CALL cmfe_GeneratedMesh_BasisSet(GeneratedMesh,Basis,err) !Define the mesh on the region - CALL cmfe_GeneratedMesh_ExtentSet(GeneratedMesh,[LENGTH],Err) - CALL cmfe_GeneratedMesh_NumberOfElementsSet(GeneratedMesh,[NUMBER_GLOBAL_X_ELEMENTS],Err) + CALL cmfe_GeneratedMesh_ExtentSet(GeneratedMesh,[LENGTH],err) + CALL cmfe_GeneratedMesh_NumberOfElementsSet(GeneratedMesh,[NUMBER_GLOBAL_X_ELEMENTS],err) !Finish the creation of a generated mesh in the region - CALL cmfe_Mesh_Initialise(Mesh,Err) - CALL cmfe_GeneratedMesh_CreateFinish(GeneratedMesh,MeshUserNumber,Mesh,Err) + CALL cmfe_Mesh_Initialise(Mesh,err) + CALL cmfe_GeneratedMesh_CreateFinish(GeneratedMesh,MeshUserNumber,Mesh,err) !Create a decomposition - CALL cmfe_Decomposition_Initialise(Decomposition,Err) - CALL cmfe_Decomposition_CreateStart(DecompositionUserNumber,Mesh,Decomposition,Err) + CALL cmfe_Decomposition_Initialise(Decomposition,err) + CALL cmfe_Decomposition_CreateStart(DecompositionUserNumber,Mesh,Decomposition,err) !Set the decomposition to be a general decomposition with the specified number of domains - CALL cmfe_Decomposition_TypeSet(Decomposition,CMFE_DECOMPOSITION_CALCULATED_TYPE,Err) - CALL cmfe_Decomposition_NumberOfDomainsSet(Decomposition,1,Err) + CALL cmfe_Decomposition_TypeSet(Decomposition,CMFE_DECOMPOSITION_CALCULATED_TYPE,err) + CALL cmfe_Decomposition_NumberOfDomainsSet(Decomposition,1,err) !Finish the decomposition - CALL cmfe_Decomposition_CreateFinish(Decomposition,Err) + CALL cmfe_Decomposition_CreateFinish(Decomposition,err) !Start to create a default (geometric) field on the region - CALL cmfe_Field_Initialise(GeometricField,Err) - CALL cmfe_Field_CreateStart(GeometricFieldUserNumber,Region,GeometricField,Err) + CALL cmfe_Field_Initialise(GeometricField,err) + CALL cmfe_Field_CreateStart(GeometricFieldUserNumber,Region,GeometricField,err) !Set the decomposition to use - CALL cmfe_Field_MeshDecompositionSet(GeometricField,Decomposition,Err) + CALL cmfe_Field_MeshDecompositionSet(GeometricField,Decomposition,err) !Set the domain to be used by the field components. - CALL cmfe_Field_ComponentMeshComponentSet(GeometricField,CMFE_FIELD_U_VARIABLE_TYPE,1,1,Err) + CALL cmfe_Field_ComponentMeshComponentSet(GeometricField,CMFE_FIELD_U_VARIABLE_TYPE,1,1,err) !Finish creating the field - CALL cmfe_Field_CreateFinish(GeometricField,Err) + CALL cmfe_Field_CreateFinish(GeometricField,err) !Update the geometric field parameters - CALL cmfe_GeneratedMesh_GeometricParametersCalculate(GeneratedMesh,GeometricField,Err) + CALL cmfe_GeneratedMesh_GeometricParametersCalculate(GeneratedMesh,GeometricField,err) !Create the equations_set - CALL cmfe_EquationsSet_Initialise(EquationsSet,Err) - CALL cmfe_Field_Initialise(EquationsSetField,Err) + CALL cmfe_EquationsSet_Initialise(EquationsSet,err) + CALL cmfe_Field_Initialise(EquationsSetField,err) CALL cmfe_EquationsSet_CreateStart(EquationsSetUserNumber,Region,GeometricField,[CMFE_EQUATIONS_SET_CLASSICAL_FIELD_CLASS, & & CMFE_EQUATIONS_SET_DIFFUSION_EQUATION_TYPE,CMFE_EQUATIONS_SET_NO_SOURCE_DIFFUSION_SUBTYPE],EquationsSetFieldUserNumber, & - & EquationsSetField,EquationsSet,Err) + & EquationsSetField,EquationsSet,err) !Finish creating the equations set - CALL cmfe_EquationsSet_CreateFinish(EquationsSet,Err) + CALL cmfe_EquationsSet_CreateFinish(EquationsSet,err) !Create the equations set dependent field variables - CALL cmfe_Field_Initialise(DependentField,Err) - CALL cmfe_EquationsSet_DependentCreateStart(EquationsSet,DependentFieldUserNumber,DependentField,Err) + CALL cmfe_Field_Initialise(DependentField,err) + CALL cmfe_EquationsSet_DependentCreateStart(EquationsSet,DependentFieldUserNumber,DependentField,err) !Finish the equations set dependent field variables - CALL cmfe_EquationsSet_DependentCreateFinish(EquationsSet,Err) + CALL cmfe_EquationsSet_DependentCreateFinish(EquationsSet,err) !Create the equations set material field variables - CALL cmfe_Field_Initialise(MaterialsField,Err) - CALL cmfe_EquationsSet_MaterialsCreateStart(EquationsSet,MaterialsFieldUserNumber,MaterialsField,Err) + CALL cmfe_Field_Initialise(MaterialsField,err) + CALL cmfe_EquationsSet_MaterialsCreateStart(EquationsSet,MaterialsFieldUserNumber,MaterialsField,err) !Finish the equations set dependent field variables - CALL cmfe_EquationsSet_MaterialsCreateFinish(EquationsSet,Err) + CALL cmfe_EquationsSet_MaterialsCreateFinish(EquationsSet,err) !Set the conductivity - CALL cmfe_Field_ComponentValuesInitialise(MaterialsField,CMFE_FIELD_U_VARIABLE_TYPE,CMFE_FIELD_VALUES_SET_TYPE,1,K,Err) + CALL cmfe_Field_ComponentValuesInitialise(MaterialsField,CMFE_FIELD_U_VARIABLE_TYPE,CMFE_FIELD_VALUES_SET_TYPE,1,K,err) !Create the equations set analytic field variables - CALL cmfe_Field_Initialise(AnalyticField,Err) + CALL cmfe_Field_Initialise(AnalyticField,err) CALL cmfe_EquationsSet_AnalyticCreateStart(EquationsSet,CMFE_EQUATIONS_SET_DIFFUSION_EQUATION_ONE_DIM_1, & - & AnalyticFieldUserNumber,AnalyticField,Err) + & AnalyticFieldUserNumber,AnalyticField,err) !Finish the equations set analytic field variables - CALL cmfe_EquationsSet_AnalyticCreateFinish(EquationsSet,Err) + CALL cmfe_EquationsSet_AnalyticCreateFinish(EquationsSet,err) !Set the analytic field parameters !Set the multiplicative constant. - CALL cmfe_Field_ComponentValuesInitialise(AnalyticField,CMFE_FIELD_U_VARIABLE_TYPE,CMFE_FIELD_VALUES_SET_TYPE,1,A,Err) + CALL cmfe_Field_ComponentValuesInitialise(AnalyticField,CMFE_FIELD_U_VARIABLE_TYPE,CMFE_FIELD_VALUES_SET_TYPE,1,A,err) !Set the phase. - CALL cmfe_Field_ComponentValuesInitialise(AnalyticField,CMFE_FIELD_U_VARIABLE_TYPE,CMFE_FIELD_VALUES_SET_TYPE,2,B,Err) + CALL cmfe_Field_ComponentValuesInitialise(AnalyticField,CMFE_FIELD_U_VARIABLE_TYPE,CMFE_FIELD_VALUES_SET_TYPE,2,B,err) !Set the offset. - CALL cmfe_Field_ComponentValuesInitialise(AnalyticField,CMFE_FIELD_U_VARIABLE_TYPE,CMFE_FIELD_VALUES_SET_TYPE,3,C,Err) + CALL cmfe_Field_ComponentValuesInitialise(AnalyticField,CMFE_FIELD_U_VARIABLE_TYPE,CMFE_FIELD_VALUES_SET_TYPE,3,C,err) !Set the length to be the length of the mesh - CALL cmfe_Field_ComponentValuesInitialise(AnalyticField,CMFE_FIELD_U_VARIABLE_TYPE,CMFE_FIELD_VALUES_SET_TYPE,4,LENGTH,Err) + CALL cmfe_Field_ComponentValuesInitialise(AnalyticField,CMFE_FIELD_U_VARIABLE_TYPE,CMFE_FIELD_VALUES_SET_TYPE,4,LENGTH,err) !Create the equations set equations - CALL cmfe_Equations_Initialise(Equations,Err) - CALL cmfe_EquationsSet_EquationsCreateStart(EquationsSet,Equations,Err) + CALL cmfe_Equations_Initialise(Equations,err) + CALL cmfe_EquationsSet_EquationsCreateStart(EquationsSet,Equations,err) !Set the equations matrices sparsity type - CALL cmfe_Equations_SparsityTypeSet(Equations,CMFE_EQUATIONS_SPARSE_MATRICES,Err) + CALL cmfe_Equations_SparsityTypeSet(Equations,CMFE_EQUATIONS_SPARSE_MATRICES,err) !Set the equations set output - !CALL cmfe_Equations_OutputTypeSet(Equations,CMFE_EQUATIONS_NO_OUTPUT,Err) - !CALL cmfe_Equations_OutputTypeSet(Equations,CMFE_EQUATIONS_TIMING_OUTPUT,Err) - !CALL cmfe_Equations_OutputTypeSet(Equations,CMFE_EQUATIONS_MATRIX_OUTPUT,Err) - CALL cmfe_Equations_OutputTypeSet(Equations,CMFE_EQUATIONS_ELEMENT_MATRIX_OUTPUT,Err) + !CALL cmfe_Equations_OutputTypeSet(Equations,CMFE_EQUATIONS_NO_OUTPUT,err) + !CALL cmfe_Equations_OutputTypeSet(Equations,CMFE_EQUATIONS_TIMING_OUTPUT,err) + !CALL cmfe_Equations_OutputTypeSet(Equations,CMFE_EQUATIONS_MATRIX_OUTPUT,err) + CALL cmfe_Equations_OutputTypeSet(Equations,CMFE_EQUATIONS_ELEMENT_MATRIX_OUTPUT,err) !Finish the equations set equations - CALL cmfe_EquationsSet_EquationsCreateFinish(EquationsSet,Err) + CALL cmfe_EquationsSet_EquationsCreateFinish(EquationsSet,err) !Create the problem - CALL cmfe_Problem_Initialise(Problem,Err) - CALL cmfe_Problem_CreateStart(ProblemUserNumber,[CMFE_PROBLEM_CLASSICAL_FIELD_CLASS,CMFE_PROBLEM_DIFFUSION_EQUATION_TYPE, & - & CMFE_PROBLEM_LINEAR_SOURCE_DIFFUSION_SUBTYPE],Problem,Err) + CALL cmfe_Problem_Initialise(Problem,err) + CALL cmfe_Problem_CreateStart(ProblemUserNumber,context,[CMFE_PROBLEM_CLASSICAL_FIELD_CLASS, & + & CMFE_PROBLEM_DIFFUSION_EQUATION_TYPE,CMFE_PROBLEM_LINEAR_SOURCE_DIFFUSION_SUBTYPE],Problem,err) !Finish the creation of a problem. - CALL cmfe_Problem_CreateFinish(Problem,Err) + CALL cmfe_Problem_CreateFinish(Problem,err) !Create the problem control - CALL cmfe_Problem_ControlLoopCreateStart(Problem,Err) - CALL cmfe_ControlLoop_Initialise(ControlLoop,Err) + CALL cmfe_Problem_ControlLoopCreateStart(Problem,err) + CALL cmfe_ControlLoop_Initialise(ControlLoop,err) !Get the control loop - CALL cmfe_Problem_ControlLoopGet(Problem,CMFE_CONTROL_LOOP_NODE,ControlLoop,Err) + CALL cmfe_Problem_ControlLoopGet(Problem,CMFE_CONTROL_LOOP_NODE,ControlLoop,err) !Set the times - CALL cmfe_ControlLoop_TimesSet(ControlLoop,0.0_CMISSRP,END_TIME,TIME_STEP,Err) + CALL cmfe_ControlLoop_TimesSet(ControlLoop,0.0_CMISSRP,END_TIME,TIME_STEP,err) !Finish creating the problem control loop - CALL cmfe_Problem_ControlLoopCreateFinish(Problem,Err) + CALL cmfe_Problem_ControlLoopCreateFinish(Problem,err) !Start the creation of the problem solvers - CALL cmfe_Solver_Initialise(Solver,Err) - CALL cmfe_Solver_Initialise(LinearSolver,Err) - CALL cmfe_Problem_SolversCreateStart(Problem,Err) - CALL cmfe_Problem_SolverGet(Problem,CMFE_CONTROL_LOOP_NODE,1,Solver,Err) - !CALL cmfe_Solver_OutputTypeSet(Solver,CMFE_SOLVER_NO_OUTPUT,Err) - !CALL cmfe_Solver_OutputTypeSet(Solver,CMFE_SOLVER_PROGRESS_OUTPUT,Err) - !CALL cmfe_Solver_OutputTypeSet(Solver,CMFE_SOLVER_TIMING_OUTPUT,Err) - !CALL cmfe_Solver_OutputTypeSet(Solver,CMFE_SOLVER_SOLVER_OUTPUT,Err) - CALL cmfe_Solver_OutputTypeSet(Solver,CMFE_SOLVER_MATRIX_OUTPUT,Err) - CALL cmfe_Solver_DynamicLinearSolverGet(Solver,LinearSolver,Err) - CALL cmfe_Solver_OutputTypeSet(LinearSolver,CMFE_SOLVER_PROGRESS_OUTPUT,Err) + CALL cmfe_Solver_Initialise(Solver,err) + CALL cmfe_Solver_Initialise(LinearSolver,err) + CALL cmfe_Problem_SolversCreateStart(Problem,err) + CALL cmfe_Problem_SolverGet(Problem,CMFE_CONTROL_LOOP_NODE,1,Solver,err) + !CALL cmfe_Solver_OutputTypeSet(Solver,CMFE_SOLVER_NO_OUTPUT,err) + !CALL cmfe_Solver_OutputTypeSet(Solver,CMFE_SOLVER_PROGRESS_OUTPUT,err) + !CALL cmfe_Solver_OutputTypeSet(Solver,CMFE_SOLVER_TIMING_OUTPUT,err) + !CALL cmfe_Solver_OutputTypeSet(Solver,CMFE_SOLVER_SOLVER_OUTPUT,err) + CALL cmfe_Solver_OutputTypeSet(Solver,CMFE_SOLVER_MATRIX_OUTPUT,err) + CALL cmfe_Solver_DynamicLinearSolverGet(Solver,LinearSolver,err) + CALL cmfe_Solver_OutputTypeSet(LinearSolver,CMFE_SOLVER_PROGRESS_OUTPUT,err) !Finish the creation of the problem solver - CALL cmfe_Problem_SolversCreateFinish(Problem,Err) + CALL cmfe_Problem_SolversCreateFinish(Problem,err) !Create the problem solver equations - CALL cmfe_Solver_Initialise(Solver,Err) - CALL cmfe_SolverEquations_Initialise(SolverEquations,Err) - CALL cmfe_Problem_SolverEquationsCreateStart(Problem,Err) + CALL cmfe_Solver_Initialise(Solver,err) + CALL cmfe_SolverEquations_Initialise(SolverEquations,err) + CALL cmfe_Problem_SolverEquationsCreateStart(Problem,err) !Get the solve equations - CALL cmfe_Problem_SolverGet(Problem,CMFE_CONTROL_LOOP_NODE,1,Solver,Err) - CALL cmfe_Solver_SolverEquationsGet(Solver,SolverEquations,Err) + CALL cmfe_Problem_SolverGet(Problem,CMFE_CONTROL_LOOP_NODE,1,Solver,err) + CALL cmfe_Solver_SolverEquationsGet(Solver,SolverEquations,err) !Set the solver equations sparsity - CALL cmfe_SolverEquations_SparsityTypeSet(SolverEquations,CMFE_SOLVER_SPARSE_MATRICES,Err) - !CALL cmfe_SolverEquations_SparsityTypeSet(SolverEquations,CMFE_SOLVER_FULL_MATRICES,Err) + CALL cmfe_SolverEquations_SparsityTypeSet(SolverEquations,CMFE_SOLVER_SPARSE_MATRICES,err) + !CALL cmfe_SolverEquations_SparsityTypeSet(SolverEquations,CMFE_SOLVER_FULL_MATRICES,err) !Add in the equations set - CALL cmfe_SolverEquations_EquationsSetAdd(SolverEquations,EquationsSet,EquationsSetIndex,Err) + CALL cmfe_SolverEquations_EquationsSetAdd(SolverEquations,EquationsSet,EquationsSetIndex,err) !Finish the creation of the problem solver equations - CALL cmfe_Problem_SolverEquationsCreateFinish(Problem,Err) + CALL cmfe_Problem_SolverEquationsCreateFinish(Problem,err) !Create the equations set boundary conditions - CALL cmfe_BoundaryConditions_Initialise(BoundaryConditions,Err) - CALL cmfe_SolverEquations_BoundaryConditionsCreateStart(SolverEquations,BoundaryConditions,Err) - CALL cmfe_SolverEquations_BoundaryConditionsAnalytic(SolverEquations,Err) - CALL cmfe_SolverEquations_BoundaryConditionsCreateFinish(SolverEquations,Err) + CALL cmfe_BoundaryConditions_Initialise(BoundaryConditions,err) + CALL cmfe_SolverEquations_BoundaryConditionsCreateStart(SolverEquations,BoundaryConditions,err) + CALL cmfe_SolverEquations_BoundaryConditionsAnalytic(SolverEquations,err) + CALL cmfe_SolverEquations_BoundaryConditionsCreateFinish(SolverEquations,err) !Solve the problem - CALL cmfe_Problem_Solve(Problem,Err) + CALL cmfe_Problem_Solve(Problem,err) !Output Analytic analysis - !CALL cmfe_EquationsSet_AnalyticTimeSet(EquationsSet,END_TIME,Err) - !CALL cmfe_EquationsSet_AnalyticEvaluate(EquationsSet,Err) - CALL cmfe_AnalyticAnalysis_Output(DependentField,"Diffusion1DAnalytic",Err) + !CALL cmfe_EquationsSet_AnalyticTimeSet(EquationsSet,END_TIME,err) + !CALL cmfe_EquationsSet_AnalyticEvaluate(EquationsSet,err) + CALL cmfe_AnalyticAnalysis_Output(DependentField,"Diffusion1DAnalytic",err) !Output fields - CALL cmfe_Fields_Initialise(Fields,Err) - CALL cmfe_Fields_Create(Region,Fields,Err) - CALL cmfe_Fields_NodesExport(Fields,"Diffusion1DAnalytic","FORTRAN",Err) - CALL cmfe_Fields_ElementsExport(Fields,"Diffusion1DAnalytic","FORTRAN",Err) - CALL cmfe_Fields_Finalise(Fields,Err) + CALL cmfe_Fields_Initialise(Fields,err) + CALL cmfe_Fields_Create(Region,Fields,err) + CALL cmfe_Fields_NodesExport(Fields,"Diffusion1DAnalytic","FORTRAN",err) + CALL cmfe_Fields_ElementsExport(Fields,"Diffusion1DAnalytic","FORTRAN",err) + CALL cmfe_Fields_Finalise(Fields,err) !Finalise and quit - CALL cmfe_Finalise(Err) + CALL cmfe_Finalise(context,err) WRITE(*,'(A)') "Program successfully completed." STOP -END PROGRAM ANALYTIC1DDIFFUSIONEXAMPLE +END PROGRAM Analytic1DDiffusionExample diff --git a/tests/ClassicalField/AnalyticHelmholtz.f90 b/tests/ClassicalField/AnalyticHelmholtz.f90 index ae6c2363..00babfce 100644 --- a/tests/ClassicalField/AnalyticHelmholtz.f90 +++ b/tests/ClassicalField/AnalyticHelmholtz.f90 @@ -79,8 +79,8 @@ PROGRAM ANALYTICHELMHOLTZEXAMPLE !Program variables - TYPE(cmfe_RegionType) :: WORLD_REGION - TYPE(cmfe_CoordinateSystemType) :: WorldCoordinateSystem + TYPE(cmfe_ContextType) :: context + TYPE(cmfe_RegionType) :: worldRegion #ifdef WIN32 !Quickwin type @@ -103,13 +103,17 @@ PROGRAM ANALYTICHELMHOLTZEXAMPLE #endif !Intialise cmiss - CALL cmfe_Initialise(WorldCoordinateSystem,WORLD_REGION,Err) + CALL cmfe_Context_Initialise(context,err) + CALL cmfe_Initialise(context,Err) + + CALL cmfe_Region_Initialise(worldRegion,err) + CALL cmfe_Context_WorldRegionGet(context,worldRegion,err) CALL ANALYTICHELMHOLTZ_TESTCASE_BILINEAR_LAGRANGE_CONVERGENCE(2,10,2) CALL ANALYTICHELMHOLTZ_TESTCASE_BICUBIC_HERMITE_CONVERGENCE(2,10,2) CALL ANALYTICHELMHOLTZ_TESTCASE_BILINEAR_LAGRANGE_EXPORT(2,6,0) - CALL cmfe_Finalise(Err) + CALL cmfe_Finalise(context,Err) WRITE(*,'(A)') "Program successfully completed." @@ -238,7 +242,7 @@ END SUBROUTINE ANALYTICHELMHOLTZ_GENERIC_CONVERGENCE SUBROUTINE ANALYTICHELMHOLTZ_GENERIC(NUMBER_GLOBAL_X_ELEMENTS,NUMBER_GLOBAL_Y_ELEMENTS,NUMBER_GLOBAL_Z_ELEMENTS, & & INTERPOLATION_SPECIFICATIONS,DEPENDENT_FIELD) - !Argument variables + !Argument variables INTEGER(CMISSIntg), INTENT(IN) :: NUMBER_GLOBAL_X_ELEMENTS ! Main program -PROGRAM ANALYTICLAPLACEEXAMPLE +PROGRAM AnalyticLaplaceExample #ifndef NOMPIMOD USE MPI #endif @@ -78,8 +78,8 @@ PROGRAM ANALYTICLAPLACEEXAMPLE !Program variables - TYPE(cmfe_RegionType) :: WORLD_REGION - TYPE(cmfe_CoordinateSystemType) :: WorldCoordinateSystem + TYPE(cmfe_ContextType) :: context + TYPE(cmfe_RegionType) :: worldRegion INTEGER(CMISSIntg) :: NUMBER_OF_ARGUMENTS,ARGUMENT_LENGTH,STATUS,INTERPOLATION CHARACTER(LEN=255) :: COMMAND_ARGUMENT @@ -105,11 +105,15 @@ PROGRAM ANALYTICLAPLACEEXAMPLE #endif !Intialise cmiss - CALL cmfe_Initialise(WorldCoordinateSystem,WORLD_REGION,Err) + CALL cmfe_Context_Initialise(context,err) + CALL cmfe_Initialise(context,Err) - CALL cmfe_ErrorHandlingModeSet(CMFE_ERRORS_TRAP_ERROR,Err) + CALL cmfe_Region_Initialise(worldRegion,err) + CALL cmfe_Context_WorldRegionGet(context,worldRegion,err) - CALL cmfe_RandomSeedsSet(9999,Err) + CALL cmfe_ErrorHandlingModeSet(CMFE_ERRORS_TRAP_ERROR,err) + + CALL cmfe_Context_RandomSeedsSet(context,9999,err) !CALL cmfe_DiagnosticsSetOn(CMFE_ALL_DIAG_TYPE,[1,2,3,4,5],"Diagnostics",[""],Err) @@ -142,7 +146,7 @@ PROGRAM ANALYTICLAPLACEEXAMPLE CALL ANALYTICLAPLACE_TESTCASE_CUBIC_HERMITE_EXPORT(2,2,0) ENDIF - CALL cmfe_Finalise(Err) + CALL cmfe_Finalise(context,Err) WRITE(*,'(A)') "Program successfully completed." @@ -163,15 +167,17 @@ SUBROUTINE ANALYTICLAPLACE_TESTCASE_CUBIC_HERMITE_EXPORT(NUMBER_GLOBAL_X_ELEMENT INTEGER(CMISSIntg), INTENT(IN) :: NUMBER_GLOBAL_Y_ELEMENTS ! Main program -PROGRAM NONLINEARPOISSONEXAMPLE +PROGRAM NonlinearPoissonExample USE OpenCMISS USE OpenCMISS_Iron @@ -98,6 +98,7 @@ PROGRAM NONLINEARPOISSONEXAMPLE TYPE(cmfe_BasisType) :: Basis TYPE(cmfe_ComputationEnvironmentType) :: ComputationEnvironment + TYPE(cmfe_ContextType) :: context TYPE(cmfe_CoordinateSystemType) :: CoordinateSystem,WorldCoordinateSystem TYPE(cmfe_DecompositionType) :: Decomposition TYPE(cmfe_EquationsType) :: Equations @@ -140,21 +141,21 @@ PROGRAM NONLINEARPOISSONEXAMPLE !If we have enough arguments then use the first four for setting up the problem. The subsequent arguments may be used to !pass flags to, say, PETSc. CALL GET_COMMAND_ARGUMENT(1,COMMAND_ARGUMENT,ARGUMENT_LENGTH,STATUS) - IF(STATUS>0) CALL HANDLE_ERROR("Error for command argument 1.") + IF(STATUS>0) CALL HandleError("Error for command argument 1.") READ(COMMAND_ARGUMENT(1:ARGUMENT_LENGTH),*) NUMBER_GLOBAL_X_ELEMENTS - IF(NUMBER_GLOBAL_X_ELEMENTS<=0) CALL HANDLE_ERROR("Invalid number of X elements.") + IF(NUMBER_GLOBAL_X_ELEMENTS<=0) CALL HandleError("Invalid number of X elements.") CALL GET_COMMAND_ARGUMENT(2,COMMAND_ARGUMENT,ARGUMENT_LENGTH,STATUS) - IF(STATUS>0) CALL HANDLE_ERROR("Error for command argument 2.") + IF(STATUS>0) CALL HandleError("Error for command argument 2.") READ(COMMAND_ARGUMENT(1:ARGUMENT_LENGTH),*) NUMBER_GLOBAL_Y_ELEMENTS - IF(NUMBER_GLOBAL_Y_ELEMENTS<0) CALL HANDLE_ERROR("Invalid number of Y elements.") + IF(NUMBER_GLOBAL_Y_ELEMENTS<0) CALL HandleError("Invalid number of Y elements.") CALL GET_COMMAND_ARGUMENT(3,COMMAND_ARGUMENT,ARGUMENT_LENGTH,STATUS) - IF(STATUS>0) CALL HANDLE_ERROR("Error for command argument 3.") + IF(STATUS>0) CALL HandleError("Error for command argument 3.") READ(COMMAND_ARGUMENT(1:ARGUMENT_LENGTH),*) NUMBER_GLOBAL_Z_ELEMENTS - IF(NUMBER_GLOBAL_Z_ELEMENTS<0) CALL HANDLE_ERROR("Invalid number of Z elements.") + IF(NUMBER_GLOBAL_Z_ELEMENTS<0) CALL HandleError("Invalid number of Z elements.") CALL GET_COMMAND_ARGUMENT(4,COMMAND_ARGUMENT,ARGUMENT_LENGTH,STATUS) - IF(STATUS>0) CALL HANDLE_ERROR("Error for command argument 4.") + IF(STATUS>0) CALL HandleError("Error for command argument 4.") READ(COMMAND_ARGUMENT(1:ARGUMENT_LENGTH),*) INTERPOLATION_TYPE - IF(INTERPOLATION_TYPE<=0) CALL HANDLE_ERROR("Invalid Interpolation specification.") + IF(INTERPOLATION_TYPE<=0) CALL HandleError("Invalid Interpolation specification.") IF(NUMBER_GLOBAL_Z_ELEMENTS>0) THEN NUMBER_DIMENSIONS=3 ELSEIF(NUMBER_GLOBAL_Y_ELEMENTS>0) THEN @@ -172,7 +173,10 @@ PROGRAM NONLINEARPOISSONEXAMPLE ENDIF !Intialise OpenCMISS - CALL cmfe_Initialise(WorldCoordinateSystem,WorldRegion,Err) + CALL cmfe_Context_Initialise(context,err) + CALL cmfe_Initialise(context,Err) + CALL cmfe_Region_Initialise(worldRegion,err) + CALL cmfe_Context_WorldRegionGet(context,worldRegion,err) !Trap all errors CALL cmfe_ErrorHandlingModeSet(CMFE_ERRORS_TRAP_ERROR,Err) @@ -182,12 +186,13 @@ PROGRAM NONLINEARPOISSONEXAMPLE !Get the computation nodes information CALL cmfe_ComputationEnvironment_Initialise(ComputationEnvironment,Err) + CALL cmfe_Context_ComputationEnvironmentGet(context,computationEnvironment,err) CALL cmfe_ComputationEnvironment_NumberOfWorldNodesGet(ComputationEnvironment,NumberOfComputationNodes,Err) CALL cmfe_ComputationEnvironment_WorldNodeNumberGet(ComputationEnvironment,ComputationNodeNumber,Err) !Start the creation of a new RC coordinate system CALL cmfe_CoordinateSystem_Initialise(CoordinateSystem,Err) - CALL cmfe_CoordinateSystem_CreateStart(CoordinateSystemUserNumber,CoordinateSystem,Err) + CALL cmfe_CoordinateSystem_CreateStart(CoordinateSystemUserNumber,context,CoordinateSystem,Err) !Set the coordinate system number of dimensions CALL cmfe_CoordinateSystem_DimensionSet(CoordinateSystem,NUMBER_DIMENSIONS,Err) !Finish the creation of the coordinate system @@ -203,7 +208,7 @@ PROGRAM NONLINEARPOISSONEXAMPLE !Start the creation of a basis (default is trilinear lagrange) CALL cmfe_Basis_Initialise(Basis,Err) - CALL cmfe_Basis_CreateStart(BasisUserNumber,Basis,Err) + CALL cmfe_Basis_CreateStart(BasisUserNumber,context,Basis,Err) CALL cmfe_Basis_NumberOfXiSet(Basis,NUMBER_DIMENSIONS,Err) SELECT CASE(INTERPOLATION_TYPE) CASE(1,2,3,4) @@ -211,7 +216,7 @@ PROGRAM NONLINEARPOISSONEXAMPLE CASE(7,8,9) CALL cmfe_Basis_TypeSet(Basis,CMFE_BASIS_SIMPLEX_TYPE,Err) CASE DEFAULT - CALL HANDLE_ERROR("Invalid interpolation type.") + CALL HandleError("Invalid interpolation type.") END SELECT SELECT CASE(INTERPOLATION_TYPE) CASE(1) @@ -340,8 +345,8 @@ PROGRAM NONLINEARPOISSONEXAMPLE !Start the creation of a problem. CALL cmfe_Problem_Initialise(Problem,Err) - CALL cmfe_Problem_CreateStart(ProblemUserNumber,[CMFE_PROBLEM_CLASSICAL_FIELD_CLASS,CMFE_PROBLEM_POISSON_EQUATION_TYPE, & - & CMFE_PROBLEM_NONLINEAR_SOURCE_POISSON_SUBTYPE],Problem,Err) + CALL cmfe_Problem_CreateStart(ProblemUserNumber,context,[CMFE_PROBLEM_CLASSICAL_FIELD_CLASS, & + & CMFE_PROBLEM_POISSON_EQUATION_TYPE,CMFE_PROBLEM_NONLINEAR_SOURCE_POISSON_SUBTYPE],Problem,Err) !Finish the creation of a problem. CALL cmfe_Problem_CreateFinish(Problem,Err) @@ -407,7 +412,7 @@ PROGRAM NONLINEARPOISSONEXAMPLE ENDIF !Finialise CMISS - CALL cmfe_Finalise(Err) + CALL cmfe_Finalise(context,Err) WRITE(*,'(A)') "Program successfully completed." @@ -415,13 +420,13 @@ PROGRAM NONLINEARPOISSONEXAMPLE CONTAINS - SUBROUTINE HANDLE_ERROR(ERROR_STRING) + SUBROUTINE HandleError(ERROR_STRING) CHARACTER(LEN=*), INTENT(IN) :: ERROR_STRING WRITE(*,'(">>ERROR: ",A)') ERROR_STRING(1:LEN_TRIM(ERROR_STRING)) STOP - END SUBROUTINE HANDLE_ERROR + END SUBROUTINE HandleError -END PROGRAM NONLINEARPOISSONEXAMPLE +END PROGRAM NonlinearPoissonExample diff --git a/tests/ClassicalField/Laplace.f90 b/tests/ClassicalField/Laplace.f90 index 592e8fcd..816ef6e8 100644 --- a/tests/ClassicalField/Laplace.f90 +++ b/tests/ClassicalField/Laplace.f90 @@ -46,7 +46,7 @@ !< !> Main program -PROGRAM LAPLACEEXAMPLE +PROGRAM LaplaceExample USE OpenCMISS USE OpenCMISS_Iron @@ -98,7 +98,8 @@ PROGRAM LAPLACEEXAMPLE TYPE(cmfe_BasisType) :: Basis TYPE(cmfe_BoundaryConditionsType) :: BoundaryConditions TYPE(cmfe_ComputationEnvironmentType) :: ComputationEnvironment - TYPE(cmfe_CoordinateSystemType) :: CoordinateSystem,WorldCoordinateSystem + TYPE(cmfe_ContextType) :: context + TYPE(cmfe_CoordinateSystemType) :: CoordinateSystem TYPE(cmfe_DecompositionType) :: Decomposition TYPE(cmfe_EquationsType) :: Equations TYPE(cmfe_EquationsSetType) :: EquationsSet @@ -142,21 +143,21 @@ PROGRAM LAPLACEEXAMPLE !If we have enough arguments then use the first four for setting up the problem. The subsequent arguments may be used to !pass flags to, say, PETSc. CALL GET_COMMAND_ARGUMENT(1,COMMAND_ARGUMENT,ARGUMENT_LENGTH,STATUS) - IF(STATUS>0) CALL HANDLE_ERROR("Error for command argument 1.") + IF(STATUS>0) CALL HandleError("Error for command argument 1.") READ(COMMAND_ARGUMENT(1:ARGUMENT_LENGTH),*) NUMBER_GLOBAL_X_ELEMENTS - IF(NUMBER_GLOBAL_X_ELEMENTS<=0) CALL HANDLE_ERROR("Invalid number of X elements.") + IF(NUMBER_GLOBAL_X_ELEMENTS<=0) CALL HandleError("Invalid number of X elements.") CALL GET_COMMAND_ARGUMENT(2,COMMAND_ARGUMENT,ARGUMENT_LENGTH,STATUS) - IF(STATUS>0) CALL HANDLE_ERROR("Error for command argument 2.") + IF(STATUS>0) CALL HandleError("Error for command argument 2.") READ(COMMAND_ARGUMENT(1:ARGUMENT_LENGTH),*) NUMBER_GLOBAL_Y_ELEMENTS - IF(NUMBER_GLOBAL_Y_ELEMENTS<=0) CALL HANDLE_ERROR("Invalid number of Y elements.") + IF(NUMBER_GLOBAL_Y_ELEMENTS<=0) CALL HandleError("Invalid number of Y elements.") CALL GET_COMMAND_ARGUMENT(3,COMMAND_ARGUMENT,ARGUMENT_LENGTH,STATUS) - IF(STATUS>0) CALL HANDLE_ERROR("Error for command argument 3.") + IF(STATUS>0) CALL HandleError("Error for command argument 3.") READ(COMMAND_ARGUMENT(1:ARGUMENT_LENGTH),*) NUMBER_GLOBAL_Z_ELEMENTS - IF(NUMBER_GLOBAL_Z_ELEMENTS<0) CALL HANDLE_ERROR("Invalid number of Z elements.") + IF(NUMBER_GLOBAL_Z_ELEMENTS<0) CALL HandleError("Invalid number of Z elements.") CALL GET_COMMAND_ARGUMENT(4,COMMAND_ARGUMENT,ARGUMENT_LENGTH,STATUS) - IF(STATUS>0) CALL HANDLE_ERROR("Error for command argument 4.") + IF(STATUS>0) CALL HandleError("Error for command argument 4.") READ(COMMAND_ARGUMENT(1:ARGUMENT_LENGTH),*) INTERPOLATION_TYPE - IF(INTERPOLATION_TYPE<=0) CALL HANDLE_ERROR("Invalid Interpolation specification.") + IF(INTERPOLATION_TYPE<=0) CALL HandleError("Invalid Interpolation specification.") ELSE !If there are not enough arguments default the problem specification NUMBER_GLOBAL_X_ELEMENTS=1 @@ -171,11 +172,15 @@ PROGRAM LAPLACEEXAMPLE ENDIF !Intialise OpenCMISS - CALL cmfe_Initialise(WorldCoordinateSystem,WorldRegion,Err) - + CALL cmfe_Context_Initialise(context,err) + CALL cmfe_Initialise(context,Err) + + CALL cmfe_Region_Initialise(worldRegion,err) + CALL cmfe_Context_WorldRegionGet(context,worldRegion,err) + CALL cmfe_ErrorHandlingModeSet(CMFE_ERRORS_TRAP_ERROR,Err) - CALL cmfe_RandomSeedsSet(9999,Err) + CALL cmfe_Context_RandomSeedsSet(context,9999,Err) CALL cmfe_DiagnosticsSetOn(CMFE_IN_DIAG_TYPE,[1,2,3,4,5],"Diagnostics",["DOMAIN_MAPPINGS_LOCAL_FROM_GLOBAL_CALCULATE"],Err) @@ -186,12 +191,13 @@ PROGRAM LAPLACEEXAMPLE !Get the computation nodes information CALL cmfe_ComputationEnvironment_Initialise(ComputationEnvironment,Err) + CALL cmfe_Context_ComputationEnvironmentGet(context,computationEnvironment,err) CALL cmfe_ComputationEnvironment_NumberOfWorldNodesGet(ComputationEnvironment,NumberOfComputationNodes,Err) CALL cmfe_ComputationEnvironment_WorldNodeNumberGet(ComputationEnvironment,ComputationNodeNumber,Err) !Start the creation of a new RC coordinate system CALL cmfe_CoordinateSystem_Initialise(CoordinateSystem,Err) - CALL cmfe_CoordinateSystem_CreateStart(CoordinateSystemUserNumber,CoordinateSystem,Err) + CALL cmfe_CoordinateSystem_CreateStart(CoordinateSystemUserNumber,context,CoordinateSystem,Err) IF(NUMBER_GLOBAL_Z_ELEMENTS==0) THEN !Set the coordinate system to be 2D CALL cmfe_CoordinateSystem_DimensionSet(CoordinateSystem,2,Err) @@ -213,14 +219,14 @@ PROGRAM LAPLACEEXAMPLE !Start the creation of a basis (default is trilinear lagrange) CALL cmfe_Basis_Initialise(Basis,Err) - CALL cmfe_Basis_CreateStart(BasisUserNumber,Basis,Err) + CALL cmfe_Basis_CreateStart(BasisUserNumber,context,Basis,Err) SELECT CASE(INTERPOLATION_TYPE) CASE(1,2,3,4) CALL cmfe_Basis_TypeSet(Basis,CMFE_BASIS_LAGRANGE_HERMITE_TP_TYPE,Err) CASE(7,8,9) CALL cmfe_Basis_TypeSet(Basis,CMFE_BASIS_SIMPLEX_TYPE,Err) CASE DEFAULT - CALL HANDLE_ERROR("Invalid interpolation type.") + CALL HandleError("Invalid interpolation type.") END SELECT SELECT CASE(INTERPOLATION_TYPE) CASE(1) @@ -337,7 +343,7 @@ PROGRAM LAPLACEEXAMPLE !Start the creation of a problem. CALL cmfe_Problem_Initialise(Problem,Err) - CALL cmfe_Problem_CreateStart(ProblemUserNumber,[CMFE_PROBLEM_CLASSICAL_FIELD_CLASS,CMFE_PROBLEM_LAPLACE_EQUATION_TYPE, & + CALL cmfe_Problem_CreateStart(ProblemUserNumber,context,[CMFE_PROBLEM_CLASSICAL_FIELD_CLASS,CMFE_PROBLEM_LAPLACE_EQUATION_TYPE, & & CMFE_PROBLEM_STANDARD_LAPLACE_SUBTYPE],Problem,Err) !Finish the creation of a problem. CALL cmfe_Problem_CreateFinish(Problem,Err) @@ -418,7 +424,7 @@ PROGRAM LAPLACEEXAMPLE CALL cmfe_Fields_Finalise(Fields,Err) !Finialise CMISS - CALL cmfe_Finalise(Err) + CALL cmfe_Finalise(context,Err) WRITE(*,'(A)') "Program successfully completed." @@ -426,13 +432,13 @@ PROGRAM LAPLACEEXAMPLE CONTAINS - SUBROUTINE HANDLE_ERROR(ERROR_STRING) + SUBROUTINE HandleError(ERROR_STRING) CHARACTER(LEN=*), INTENT(IN) :: ERROR_STRING WRITE(*,'(">>ERROR: ",A)') ERROR_STRING(1:LEN_TRIM(ERROR_STRING)) STOP - END SUBROUTINE HANDLE_ERROR + END SUBROUTINE HandleError -END PROGRAM LAPLACEEXAMPLE +END PROGRAM LaplaceExample diff --git a/tests/FieldML/StaticAdvectionDiffusion_FieldML.f90 b/tests/FieldML/StaticAdvectionDiffusion_FieldML.f90 index 7b6add97..e2ada04e 100644 --- a/tests/FieldML/StaticAdvectionDiffusion_FieldML.f90 +++ b/tests/FieldML/StaticAdvectionDiffusion_FieldML.f90 @@ -46,7 +46,7 @@ !< !> Main program -PROGRAM STATICADVECTIONDIFFUSIONEXAMPLE +PROGRAM StaticAdvectionDiffusionExample USE OpenCMISS USE OpenCMISS_Iron @@ -105,7 +105,8 @@ PROGRAM STATICADVECTIONDIFFUSIONEXAMPLE TYPE(cmfe_BasisType) :: Basis TYPE(cmfe_BoundaryConditionsType) :: BoundaryConditions - TYPE(cmfe_CoordinateSystemType) :: CoordinateSystem,WorldCoordinateSystem + TYPE(cmfe_ContextType) :: context + TYPE(cmfe_CoordinateSystemType) :: CoordinateSystem TYPE(cmfe_DecompositionType) :: Decomposition TYPE(cmfe_EquationsType) :: Equations TYPE(cmfe_EquationsSetType) :: EquationsSet @@ -156,7 +157,10 @@ PROGRAM STATICADVECTIONDIFFUSIONEXAMPLE #endif !Intialise OpenCMISS - CALL cmfe_Initialise(WorldCoordinateSystem,WorldRegion,Err) + CALL cmfe_Context_Initialise(context,err) + CALL cmfe_Initialise(context,Err) + CALL cmfe_Region_Initialise(worldRegion,err) + CALL cmfe_Context_WorldRegionGet(context,worldRegion,err) CALL cmfe_ErrorHandlingModeSet(CMFE_ERRORS_TRAP_ERROR,Err) @@ -179,7 +183,7 @@ PROGRAM STATICADVECTIONDIFFUSIONEXAMPLE !Start the creation of a new RC coordinate system CALL cmfe_CoordinateSystem_Initialise(CoordinateSystem,Err) - CALL cmfe_CoordinateSystem_CreateStart(CoordinateSystemUserNumber,CoordinateSystem,Err) + CALL cmfe_CoordinateSystem_CreateStart(CoordinateSystemUserNumber,context,CoordinateSystem,Err) CALL cmfe_CoordinateSystem_DimensionSet(CoordinateSystem,dimensions,Err) !Finish the creation of the coordinate system CALL cmfe_CoordinateSystem_CreateFinish(CoordinateSystem,Err) @@ -194,7 +198,7 @@ PROGRAM STATICADVECTIONDIFFUSIONEXAMPLE !Start the creation of a basis (default is trilinear lagrange) CALL cmfe_Basis_Initialise(Basis,Err) - CALL cmfe_Basis_CreateStart(BasisUserNumber,Basis,Err) + CALL cmfe_Basis_CreateStart(BasisUserNumber,context,Basis,Err) CALL cmfe_Basis_NumberOfXiSet(Basis,dimensions,Err) !Finish the creation of the basis CALL cmfe_Basis_CreateFinish(BASIS,Err) @@ -350,7 +354,7 @@ PROGRAM STATICADVECTIONDIFFUSIONEXAMPLE !Create the problem CALL cmfe_Problem_Initialise(Problem,Err) - CALL cmfe_Problem_CreateStart(ProblemUserNumber,[CMFE_PROBLEM_CLASSICAL_FIELD_CLASS, & + CALL cmfe_Problem_CreateStart(ProblemUserNumber,context,[CMFE_PROBLEM_CLASSICAL_FIELD_CLASS, & & CMFE_PROBLEM_ADVECTION_DIFFUSION_EQUATION_TYPE,CMFE_PROBLEM_LINEAR_SOURCE_STATIC_ADVEC_DIFF_SUBTYPE],Problem,Err) !Finish the creation of a problem. CALL cmfe_Problem_CreateFinish(Problem,Err) @@ -447,9 +451,9 @@ PROGRAM STATICADVECTIONDIFFUSIONEXAMPLE ENDIF - !CALL cmfe_Finalise(Err) + CALL cmfe_Finalise(context,Err) WRITE(*,'(A)') "Program successfully completed." STOP -END PROGRAM STATICADVECTIONDIFFUSIONEXAMPLE +END PROGRAM StaticAdvectionDiffusionExample diff --git a/tests/FieldML_IO/cube.f90 b/tests/FieldML_IO/cube.f90 index 0f33fe39..278ff132 100644 --- a/tests/FieldML_IO/cube.f90 +++ b/tests/FieldML_IO/cube.f90 @@ -52,10 +52,10 @@ MODULE IRON_TEST_FIELDML_CUBE CONTAINS - SUBROUTINE TestFieldMLIOCube(worldRegion) - TYPE(cmfe_RegionType), INTENT(IN) :: worldRegion + SUBROUTINE TestFieldMLIOCube(context) + TYPE(cmfe_ContextType), INTENT(IN) :: context ! local variables - TYPE(cmfe_RegionType) :: region + TYPE(cmfe_RegionType) :: region,worldRegion TYPE(cmfe_MeshType) :: mesh TYPE(cmfe_FieldType) :: geometricField INTEGER(CMISSIntg) :: err @@ -63,11 +63,14 @@ SUBROUTINE TestFieldMLIOCube(worldRegion) err = 0 CALL BEGIN_TEST("cube") + CALL cmfe_Region_Initialise(worldRegion,err) + CALL cmfe_Context_WorldRegionGet(context,worldRegion,err) + ! Initial FieldML file is using Zinc-like naming conventions ! Files exported from Zinc are currently not yet readable in Iron due to the ! additional derivative/version mappings for element field parameters, which ! are present even for Lagrange bases (and set to defaults of 1). - CALL ReadCube(worldRegion, "input/cube.fieldml", & + CALL ReadCube(context,worldRegion, "input/cube.fieldml", & & region, mesh, geometricField, & & geometricFieldName = "coordinates", & & geometricFieldNodeParametersName = "nodes.coordinates", & @@ -84,7 +87,7 @@ SUBROUTINE TestFieldMLIOCube(worldRegion) CALL cmfe_Region_Destroy(region, err) ! File is re-read with Iron naming conventions - CALL ReadCube(worldRegion, "cube.fieldml", & + CALL ReadCube(context,worldRegion, "cube.fieldml", & & region, mesh, geometricField, & & geometricFieldName = "coordinates", & & geometricFieldNodeParametersName = "coordinates.dofs.node", & @@ -101,9 +104,10 @@ SUBROUTINE TestFieldMLIOCube(worldRegion) CALL END_TEST() END SUBROUTINE TestFieldMLIOCube - SUBROUTINE ReadCube(worldRegion, inputFilename, region, mesh, geometricField, & + SUBROUTINE ReadCube(context, worldRegion, inputFilename, region, mesh, geometricField, & & geometricFieldName, geometricFieldNodeParametersName, nodesArgumentName, & & basisEvaluatorName, meshArgumentName, meshComponentTemplateName) + TYPE(cmfe_ContextType), INTENT(IN) :: context TYPE(cmfe_RegionType), INTENT(IN) :: worldRegion CHARACTER(KIND=C_CHAR,LEN=*), INTENT(IN) :: inputFilename CHARACTER(KIND=C_CHAR,LEN=*), INTENT(IN) :: geometricFieldName @@ -129,6 +133,7 @@ SUBROUTINE ReadCube(worldRegion, inputFilename, region, mesh, geometricField, & ! Get computation nodes information CALL cmfe_ComputationEnvironment_Initialise(ComputationEnvironment,Err) + CALL cmfe_Context_ComputationEnvironmentGet(context,computationEnvironment,err) CALL cmfe_ComputationEnvironment_NumberOfWorldNodesGet(ComputationEnvironment,NumberOfComputationNodes,Err) CALL cmfe_ComputationEnvironment_WorldNodeNumberGet(ComputationEnvironment,ComputationNodeNumber,Err) @@ -140,8 +145,8 @@ SUBROUTINE ReadCube(worldRegion, inputFilename, region, mesh, geometricField, & ! Define Coordinate System from value type of coordinates field evaluator CALL cmfe_CoordinateSystem_Initialise(coordinateSystem, err) - CALL cmfe_FieldML_InputCoordinateSystemCreateStart( fieldmlInfo, geometricFieldName, coordinateSystem, & - & AUTO_USER_NUMBER(), err ) + CALL cmfe_FieldML_InputCoordinateSystemCreateStart( fieldmlInfo, geometricFieldName, & + & AUTO_USER_NUMBER(), context, coordinateSystem, err ) CALL cmfe_CoordinateSystem_CreateFinish(coordinateSystem, err) ! CALL cmfe_CoordinateSystem_DimensionGet(coordinateSystem, coordinateCount, err ) @@ -162,7 +167,7 @@ SUBROUTINE ReadCube(worldRegion, inputFilename, region, mesh, geometricField, & ! Define bases from FieldML evaluator (referencing interpolator) CALL cmfe_Basis_Initialise(basis, err) - CALL cmfe_FieldML_InputBasisCreateStart(fieldmlInfo, basisEvaluatorName, AUTO_USER_NUMBER(), basis, err) + CALL cmfe_FieldML_InputBasisCreateStart(fieldmlInfo, basisEvaluatorName, AUTO_USER_NUMBER(), context, basis, err) CALL cmfe_Basis_CreateFinish(basis, err) ! Define mesh from FieldML mesh argument diff --git a/tests/FieldML_IO/fieldml_arguments.f90 b/tests/FieldML_IO/fieldml_arguments.f90 index 957dda88..99475286 100644 --- a/tests/FieldML_IO/fieldml_arguments.f90 +++ b/tests/FieldML_IO/fieldml_arguments.f90 @@ -52,18 +52,18 @@ MODULE IRON_TEST_FIELDML_ARGUMENTS CONTAINS - SUBROUTINE TestFieldMLArguments(worldRegion) - TYPE(cmfe_RegionType), INTENT(IN) :: worldRegion + SUBROUTINE TestFieldMLArguments(context) + TYPE(cmfe_ContextType), INTENT(IN) :: context - CALL TestFieldMLInvalidInfo(worldRegion) + CALL TestFieldMLInvalidInfo(context) + END SUBROUTINE TestFieldMLArguments ! Call FieldML routines with initialised but not created fieldmlInfo - SUBROUTINE TestFieldMLInvalidInfo(worldRegion) - TYPE(cmfe_RegionType), INTENT(IN) :: worldRegion - ! local variables - TYPE(cmfe_RegionType) :: region + SUBROUTINE TestFieldMLInvalidInfo(context) + TYPE(cmfe_ContextType), INTENT(IN) :: context ! local variables + TYPE(cmfe_RegionType) :: region,worldRegion TYPE(cmfe_CoordinateSystemType) :: coordinateSystem TYPE(cmfe_FieldType) :: geometricField TYPE(cmfe_NodesType) :: nodes @@ -74,6 +74,9 @@ SUBROUTINE TestFieldMLInvalidInfo(worldRegion) err = 0 CALL BEGIN_TEST("invalid info") + CALL cmfe_Region_Initialise(worldRegion,err) + CALL cmfe_Context_WorldRegionGet(context,worldRegion,err) + ! Don't want to trap errors; this tests that they fail gracefully CALL cmfe_ErrorHandlingModeGet(originalErrorHandlingMode, err) CALL cmfe_ErrorHandlingModeSet(CMFE_ERRORS_OUTPUT_ERROR, err) @@ -81,8 +84,8 @@ SUBROUTINE TestFieldMLInvalidInfo(worldRegion) CALL cmfe_FieldMLIO_Initialise(fieldmlInfo, err) CALL cmfe_CoordinateSystem_Initialise(coordinateSystem, err) - CALL cmfe_FieldML_InputCoordinateSystemCreateStart( fieldmlInfo, "dummy field name", coordinateSystem, & - & AUTO_USER_NUMBER(), err ) + CALL cmfe_FieldML_InputCoordinateSystemCreateStart( fieldmlInfo, "dummy field name", & + & AUTO_USER_NUMBER(), context, coordinateSystem, err ) CALL EXPECT_EQ("cmfe_FieldML_InputCoordinateSystemCreateStart result with null FieldML info argument", 1, err) CALL cmfe_Region_Initialise(region, err) diff --git a/tests/FieldML_IO/fieldml_io.f90 b/tests/FieldML_IO/fieldml_io.f90 index 74c1662d..f489f029 100644 --- a/tests/FieldML_IO/fieldml_io.f90 +++ b/tests/FieldML_IO/fieldml_io.f90 @@ -48,9 +48,8 @@ PROGRAM IRON_TEST_FIELDML_IO IMPLICIT NONE ! CMISS variables + TYPE(cmfe_ContextType) :: context TYPE(cmfe_ComputationEnvironmentType) :: ComputationEnvironment - TYPE(cmfe_CoordinateSystemType) :: worldCoordinateSystem - TYPE(cmfe_RegionType) :: worldRegion ! Generic CMISS variables @@ -61,18 +60,20 @@ PROGRAM IRON_TEST_FIELDML_IO ! Initialise OpenCMISS-Iron - CALL cmfe_Initialise(worldCoordinateSystem, worldRegion, err) + CALL cmfe_Context_Initialise(context,err) + CALL cmfe_Initialise(context,Err) CALL cmfe_ErrorHandlingModeSet(CMFE_ERRORS_TRAP_ERROR, err) ! Get computation nodes information CALL cmfe_ComputationEnvironment_Initialise(ComputationEnvironment,Err) + CALL cmfe_Context_ComputationEnvironmentGet(context,computationEnvironment,err) CALL cmfe_ComputationEnvironment_NumberOfWorldNodesGet(ComputationEnvironment,NumberOfComputationNodes,Err) CALL cmfe_ComputationEnvironment_WorldNodeNumberGet(ComputationEnvironment,ComputationNodeNumber,Err) - CALL TestFieldMLIOCube(worldRegion) - CALL TestFieldMLArguments(worldRegion) + CALL TestFieldMLIOCube(context) + CALL TestFieldMLArguments(context) - CALL cmfe_Finalise(err) + CALL cmfe_Finalise(context,err) CALL FINALISE_TESTS(err) diff --git a/tests/FiniteElasticity/Cantilever.f90 b/tests/FiniteElasticity/Cantilever.f90 index 36cec906..48c622ac 100644 --- a/tests/FiniteElasticity/Cantilever.f90 +++ b/tests/FiniteElasticity/Cantilever.f90 @@ -47,7 +47,7 @@ !< !> Main program -PROGRAM CANTILEVEREXAMPLE +PROGRAM CantileverExample USE OpenCMISS USE OpenCMISS_Iron @@ -109,7 +109,8 @@ PROGRAM CANTILEVEREXAMPLE TYPE(cmfe_BasisType) :: DisplacementBasis,PressureBasis TYPE(cmfe_BoundaryConditionsType) :: BoundaryConditions TYPE(cmfe_ComputationEnvironmentType) :: ComputationEnvironment - TYPE(cmfe_CoordinateSystemType) :: CoordinateSystem, WorldCoordinateSystem + TYPE(cmfe_ContextType) :: context + TYPE(cmfe_CoordinateSystemType) :: CoordinateSystem TYPE(cmfe_MeshType) :: Mesh TYPE(cmfe_DecompositionType) :: Decomposition TYPE(cmfe_EquationsType) :: Equations @@ -141,7 +142,10 @@ PROGRAM CANTILEVEREXAMPLE #endif !Intialise cmiss - CALL cmfe_Initialise(WorldCoordinateSystem,WorldRegion,Err) + CALL cmfe_Context_Initialise(context,err) + CALL cmfe_Initialise(context,Err) + CALL cmfe_Region_Initialise(worldRegion,err) + CALL cmfe_Context_WorldRegionGet(context,worldRegion,err) CALL cmfe_ErrorHandlingModeSet(CMFE_ERRORS_TRAP_ERROR,Err) CALL cmfe_OutputSetOn("Cantilever",Err) @@ -157,33 +161,33 @@ PROGRAM CANTILEVEREXAMPLE NumberOfArguments = COMMAND_ARGUMENT_COUNT() IF(NumberOfArguments >= 1) THEN CALL GET_COMMAND_ARGUMENT(1,CommandArgument,ArgumentLength,ArgStatus) - IF(ArgStatus>0) CALL HANDLE_ERROR("Error for command argument 1.") + IF(ArgStatus>0) CALL HandleError("Error for command argument 1.") READ(CommandArgument(1:ArgumentLength),*) DisplacementInterpolationType ENDIF IF(NumberOfArguments >= 2) THEN CALL GET_COMMAND_ARGUMENT(2,CommandArgument,ArgumentLength,ArgStatus) - IF(ArgStatus>0) CALL HANDLE_ERROR("Error for command argument 2.") + IF(ArgStatus>0) CALL HandleError("Error for command argument 2.") READ(CommandArgument(1:ArgumentLength),*) NumberGlobalXElements - IF(NumberGlobalXElements<1) CALL HANDLE_ERROR("Invalid number of X elements.") + IF(NumberGlobalXElements<1) CALL HandleError("Invalid number of X elements.") ENDIF IF(NumberOfArguments >= 3) THEN CALL GET_COMMAND_ARGUMENT(3,CommandArgument,ArgumentLength,ArgStatus) - IF(ArgStatus>0) CALL HANDLE_ERROR("Error for command argument 3.") + IF(ArgStatus>0) CALL HandleError("Error for command argument 3.") READ(CommandArgument(1:ArgumentLength),*) NumberGlobalYElements - IF(NumberGlobalYElements<1) CALL HANDLE_ERROR("Invalid number of Y elements.") + IF(NumberGlobalYElements<1) CALL HandleError("Invalid number of Y elements.") ENDIF IF(NumberOfArguments >= 4) THEN CALL GET_COMMAND_ARGUMENT(4,CommandArgument,ArgumentLength,ArgStatus) - IF(ArgStatus>0) CALL HANDLE_ERROR("Error for command argument 4.") + IF(ArgStatus>0) CALL HandleError("Error for command argument 4.") READ(CommandArgument(1:ArgumentLength),*) NumberGlobalZElements - IF(NumberGlobalZElements<1) CALL HANDLE_ERROR("Invalid number of Z elements.") + IF(NumberGlobalZElements<1) CALL HandleError("Invalid number of Z elements.") ENDIF IF(DisplacementInterpolationType==CMFE_BASIS_CUBIC_HERMITE_INTERPOLATION) THEN IF(NumberOfArguments >= 5) THEN CALL GET_COMMAND_ARGUMENT(5,CommandArgument,ArgumentLength,ArgStatus) - IF(ArgStatus>0) CALL HANDLE_ERROR("Error for command argument 5.") + IF(ArgStatus>0) CALL HandleError("Error for command argument 5.") READ(CommandArgument(1:ArgumentLength),*) ScalingType - IF(ScalingType<0.OR.ScalingType>5) CALL HANDLE_ERROR("Invalid scaling type.") + IF(ScalingType<0.OR.ScalingType>5) CALL HandleError("Invalid scaling type.") ENDIF ELSE ScalingType=CMFE_FIELD_NO_SCALING @@ -211,6 +215,7 @@ PROGRAM CANTILEVEREXAMPLE !Get the number of computation nodes and this computation node number CALL cmfe_ComputationEnvironment_Initialise(ComputationEnvironment,Err) + CALL cmfe_Context_ComputationEnvironmentGet(context,computationEnvironment,err) CALL cmfe_ComputationEnvironment_NumberOfWorldNodesGet(ComputationEnvironment,NumberOfComputationNodes,Err) CALL cmfe_ComputationEnvironment_WorldNodeNumberGet(ComputationEnvironment,ComputationNodeNumber,Err) @@ -218,7 +223,7 @@ PROGRAM CANTILEVEREXAMPLE !Create a 3D rectangular cartesian coordinate system CALL cmfe_CoordinateSystem_Initialise(CoordinateSystem,Err) - CALL cmfe_CoordinateSystem_CreateStart(CoordinateSystemUserNumber,CoordinateSystem,Err) + CALL cmfe_CoordinateSystem_CreateStart(CoordinateSystemUserNumber,context,CoordinateSystem,Err) CALL cmfe_CoordinateSystem_CreateFinish(CoordinateSystem,Err) !Create a region and assign the coordinate system to the region @@ -230,7 +235,7 @@ PROGRAM CANTILEVEREXAMPLE !Define basis function for displacement CALL cmfe_Basis_Initialise(DisplacementBasis,Err) - CALL cmfe_Basis_CreateStart(DisplacementBasisUserNumber,DisplacementBasis,Err) + CALL cmfe_Basis_CreateStart(DisplacementBasisUserNumber,context,DisplacementBasis,Err) SELECT CASE(DisplacementInterpolationType) CASE(1,2,3,4) CALL cmfe_Basis_TypeSet(DisplacementBasis,CMFE_BASIS_LAGRANGE_HERMITE_TP_TYPE,Err) @@ -248,7 +253,7 @@ PROGRAM CANTILEVEREXAMPLE IF(PressureMeshComponent/=1) THEN !Basis for pressure CALL cmfe_Basis_Initialise(PressureBasis,Err) - CALL cmfe_Basis_CreateStart(PressureBasisUserNumber,PressureBasis,Err) + CALL cmfe_Basis_CreateStart(PressureBasisUserNumber,context,PressureBasis,Err) SELECT CASE(PressureInterpolationType) CASE(1,2,3,4) CALL cmfe_Basis_TypeSet(PressureBasis,CMFE_BASIS_LAGRANGE_HERMITE_TP_TYPE,Err) @@ -390,7 +395,7 @@ PROGRAM CANTILEVEREXAMPLE !Define the problem CALL cmfe_Problem_Initialise(Problem,Err) - CALL cmfe_Problem_CreateStart(ProblemUserNumber,[CMFE_PROBLEM_ELASTICITY_CLASS,CMFE_PROBLEM_FINITE_ELASTICITY_TYPE, & + CALL cmfe_Problem_CreateStart(ProblemUserNumber,context,[CMFE_PROBLEM_ELASTICITY_CLASS,CMFE_PROBLEM_FINITE_ELASTICITY_TYPE, & & CMFE_PROBLEM_NO_SUBTYPE],Problem,Err) CALL cmfe_Problem_CreateFinish(Problem,Err) @@ -459,7 +464,7 @@ PROGRAM CANTILEVEREXAMPLE CALL cmfe_Fields_ElementsExport(Fields,"Cantilever","FORTRAN",Err) CALL cmfe_Fields_Finalise(Fields,Err) - CALL cmfe_Finalise(Err) + CALL cmfe_Finalise(context,Err) WRITE(*,'(A)') "Program successfully completed." @@ -467,12 +472,13 @@ PROGRAM CANTILEVEREXAMPLE CONTAINS - SUBROUTINE HANDLE_ERROR(ERROR_STRING) + SUBROUTINE HandleError(ERROR_STRING) CHARACTER(LEN=*), INTENT(IN) :: ERROR_STRING WRITE(*,'(">>ERROR: ",A)') ERROR_STRING(1:LEN_TRIM(ERROR_STRING)) STOP - END SUBROUTINE HANDLE_ERROR + END SUBROUTINE HandleError + +END PROGRAM CantileverExample -END PROGRAM CANTILEVEREXAMPLE diff --git a/tests/FiniteElasticity/SimpleShear.f90 b/tests/FiniteElasticity/SimpleShear.f90 index dbb7159b..daddf3a0 100644 --- a/tests/FiniteElasticity/SimpleShear.f90 +++ b/tests/FiniteElasticity/SimpleShear.f90 @@ -47,7 +47,7 @@ !< !> Main program -PROGRAM SIMPLESHEAREXAMPLE +PROGRAM SimpleShearExample USE OpenCMISS USE OpenCMISS_Iron @@ -116,7 +116,8 @@ PROGRAM SIMPLESHEAREXAMPLE TYPE(cmfe_BasisType) :: Basis, PressureBasis TYPE(cmfe_BoundaryConditionsType) :: BoundaryConditions TYPE(cmfe_ComputationEnvironmentType) :: ComputationEnvironment - TYPE(cmfe_CoordinateSystemType) :: CoordinateSystem, WorldCoordinateSystem + TYPE(cmfe_ContextType) :: context + TYPE(cmfe_CoordinateSystemType) :: CoordinateSystem TYPE(cmfe_MeshType) :: Mesh TYPE(cmfe_DecompositionType) :: Decomposition TYPE(cmfe_EquationsType) :: Equations @@ -150,7 +151,10 @@ PROGRAM SIMPLESHEAREXAMPLE #endif !Intialise cmiss - CALL cmfe_Initialise(WorldCoordinateSystem,WorldRegion,Err) + CALL cmfe_Context_Initialise(context,err) + CALL cmfe_Initialise(context,Err) + CALL cmfe_Region_Initialise(worldRegion,err) + CALL cmfe_Context_WorldRegionGet(context,worldRegion,err) CALL cmfe_ErrorHandlingModeSet(CMFE_ERRORS_TRAP_ERROR,Err) @@ -161,6 +165,7 @@ PROGRAM SIMPLESHEAREXAMPLE !Get the number of computation nodes and this computation node number CALL cmfe_ComputationEnvironment_Initialise(ComputationEnvironment,Err) + CALL cmfe_Context_ComputationEnvironmentGet(context,computationEnvironment,err) CALL cmfe_ComputationEnvironment_NumberOfWorldNodesGet(ComputationEnvironment,NumberOfComputationNodes,Err) CALL cmfe_ComputationEnvironment_WorldNodeNumberGet(ComputationEnvironment,ComputationNodeNumber,Err) @@ -171,7 +176,7 @@ PROGRAM SIMPLESHEAREXAMPLE !Create a 3D rectangular cartesian coordinate system CALL cmfe_CoordinateSystem_Initialise(CoordinateSystem,Err) - CALL cmfe_CoordinateSystem_CreateStart(CoordinateSystemUserNumber,CoordinateSystem,Err) + CALL cmfe_CoordinateSystem_CreateStart(CoordinateSystemUserNumber,context,CoordinateSystem,Err) CALL cmfe_CoordinateSystem_CreateFinish(CoordinateSystem,Err) !Create a region and assign the coordinate system to the region @@ -183,7 +188,7 @@ PROGRAM SIMPLESHEAREXAMPLE !Define geometric basis CALL cmfe_Basis_Initialise(Basis,Err) - CALL cmfe_Basis_CreateStart(BasisUserNumber,Basis,Err) + CALL cmfe_Basis_CreateStart(BasisUserNumber,context,Basis,Err) SELECT CASE(InterpolationType) CASE(1,2,3,4) CALL cmfe_Basis_TypeSet(Basis,CMFE_BASIS_LAGRANGE_HERMITE_TP_TYPE,Err) @@ -208,7 +213,7 @@ PROGRAM SIMPLESHEAREXAMPLE !Define pressure basis IF(UsePressureBasis) THEN CALL cmfe_Basis_Initialise(PressureBasis,Err) - CALL cmfe_Basis_CreateStart(PressureBasisUserNumber,PressureBasis,Err) + CALL cmfe_Basis_CreateStart(PressureBasisUserNumber,context,PressureBasis,Err) SELECT CASE(PressureInterpolationType) CASE(1,2,3,4) CALL cmfe_Basis_TypeSet(PressureBasis,CMFE_BASIS_LAGRANGE_HERMITE_TP_TYPE,Err) @@ -354,7 +359,7 @@ PROGRAM SIMPLESHEAREXAMPLE !Define the problem CALL cmfe_Problem_Initialise(Problem,Err) - CALL cmfe_Problem_CreateStart(ProblemUserNumber,[CMFE_PROBLEM_ELASTICITY_CLASS,CMFE_PROBLEM_FINITE_ELASTICITY_TYPE, & + CALL cmfe_Problem_CreateStart(ProblemUserNumber,context,[CMFE_PROBLEM_ELASTICITY_CLASS,CMFE_PROBLEM_FINITE_ELASTICITY_TYPE, & & CMFE_PROBLEM_NO_SUBTYPE],Problem,Err) CALL cmfe_Problem_CreateFinish(Problem,Err) @@ -452,11 +457,11 @@ PROGRAM SIMPLESHEAREXAMPLE CALL cmfe_Fields_ElementsExport(Fields,"SimpleShear","FORTRAN",Err) CALL cmfe_Fields_Finalise(Fields,Err) - CALL cmfe_Finalise(Err) + CALL cmfe_Finalise(context,Err) WRITE(*,'(A)') "Program successfully completed." STOP -END PROGRAM SIMPLESHEAREXAMPLE +END PROGRAM SimpleShearExample diff --git a/tests/FluidMechanics/Darcy.f90 b/tests/FluidMechanics/Darcy.f90 index 4d9407dc..2a3c619c 100644 --- a/tests/FluidMechanics/Darcy.f90 +++ b/tests/FluidMechanics/Darcy.f90 @@ -51,7 +51,7 @@ !> Main program -PROGRAM DARCYANALYTICEXAMPLE +PROGRAM DarcyAnalyticExample ! !================================================================================================================================ @@ -165,12 +165,13 @@ PROGRAM DARCYANALYTICEXAMPLE !CMISS variables - !Regions + !Context + TYPE(cmfe_ContextType) :: context + !Regions TYPE(cmfe_RegionType) :: Region TYPE(cmfe_RegionType) :: WorldRegion !Coordinate systems TYPE(cmfe_CoordinateSystemType) :: CoordinateSystem - TYPE(cmfe_CoordinateSystemType) :: WorldCoordinateSystem !Basis TYPE(cmfe_BasisType) :: BasisGeometry TYPE(cmfe_BasisType) :: BasisVelocity @@ -242,7 +243,10 @@ PROGRAM DARCYANALYTICEXAMPLE !INITIALISE OPENCMISS - CALL cmfe_Initialise(WorldCoordinateSystem,WorldRegion,Err) + CALL cmfe_Context_Initialise(context,err) + CALL cmfe_Initialise(context,Err) + CALL cmfe_Region_Initialise(worldRegion,err) + CALL cmfe_Context_WorldRegionGet(context,worldRegion,err) CALL cmfe_ErrorHandlingModeSet(CMFE_ERRORS_TRAP_ERROR,Err) @@ -368,7 +372,7 @@ PROGRAM DARCYANALYTICEXAMPLE !Start the creation of a new RC coordinate system CALL cmfe_CoordinateSystem_Initialise(CoordinateSystem,Err) - CALL cmfe_CoordinateSystem_CreateStart(CoordinateSystemUserNumber,CoordinateSystem,Err) + CALL cmfe_CoordinateSystem_CreateStart(CoordinateSystemUserNumber,context,CoordinateSystem,Err) !Set the coordinate system dimension CALL cmfe_CoordinateSystem_DimensionSet(CoordinateSystem,NUMBER_OF_DIMENSIONS,Err) !Finish the creation of the coordinate system @@ -397,7 +401,7 @@ PROGRAM DARCYANALYTICEXAMPLE !Start the creation of new bases MESH_NUMBER_OF_COMPONENTS=1 CALL cmfe_Basis_Initialise(BasisGeometry,Err) - CALL cmfe_Basis_CreateStart(BASIS_NUMBER_GEOMETRY,BasisGeometry,Err) + CALL cmfe_Basis_CreateStart(BASIS_NUMBER_GEOMETRY,context,BasisGeometry,Err) !Set the basis type (Lagrange/Simplex) CALL cmfe_Basis_TypeSet(BasisGeometry,BASIS_TYPE,Err) !Set the basis xi number @@ -423,7 +427,7 @@ PROGRAM DARCYANALYTICEXAMPLE !Initialise a new velocity basis CALL cmfe_Basis_Initialise(BasisVelocity,Err) !Start the creation of a basis - CALL cmfe_Basis_CreateStart(BASIS_NUMBER_VELOCITY,BasisVelocity,Err) + CALL cmfe_Basis_CreateStart(BASIS_NUMBER_VELOCITY,context,BasisVelocity,Err) !Set the basis type (Lagrange/Simplex) CALL cmfe_Basis_TypeSet(BasisVelocity,BASIS_TYPE,Err) !Set the basis xi number @@ -452,7 +456,7 @@ PROGRAM DARCYANALYTICEXAMPLE !Initialise a new pressure basis CALL cmfe_Basis_Initialise(BasisPressure,Err) !Start the creation of a basis - CALL cmfe_Basis_CreateStart(BASIS_NUMBER_PRESSURE,BasisPressure,Err) + CALL cmfe_Basis_CreateStart(BASIS_NUMBER_PRESSURE,context,BasisPressure,Err) !Set the basis type (Lagrange/Simplex) CALL cmfe_Basis_TypeSet(BasisPressure,BASIS_TYPE,Err) !Set the basis xi number @@ -682,7 +686,7 @@ PROGRAM DARCYANALYTICEXAMPLE !Start the creation of a problem. CALL cmfe_Problem_Initialise(Problem,Err) CALL cmfe_ControlLoop_Initialise(ControlLoop,Err) - CALL cmfe_Problem_CreateStart(ProblemUserNumber,[CMFE_PROBLEM_FLUID_MECHANICS_CLASS,CMFE_PROBLEM_DARCY_EQUATION_TYPE, & + CALL cmfe_Problem_CreateStart(ProblemUserNumber,context,[CMFE_PROBLEM_FLUID_MECHANICS_CLASS,CMFE_PROBLEM_DARCY_EQUATION_TYPE, & & CMFE_PROBLEM_STANDARD_DARCY_SUBTYPE],Problem,Err) !Finish the creation of a problem. CALL cmfe_Problem_CreateFinish(Problem,Err) @@ -788,10 +792,10 @@ PROGRAM DARCYANALYTICEXAMPLE ENDIF !Finialise CMISS - CALL cmfe_Finalise(Err) + CALL cmfe_Finalise(context,Err) WRITE(*,'(A)') "Program successfully completed." STOP -END PROGRAM DARCYANALYTICEXAMPLE +END PROGRAM DarcyAnalyticExample diff --git a/tests/LinearElasticity/CantileverBeam.f90 b/tests/LinearElasticity/CantileverBeam.f90 index c1a2810b..da32ed2a 100644 --- a/tests/LinearElasticity/CantileverBeam.f90 +++ b/tests/LinearElasticity/CantileverBeam.f90 @@ -46,7 +46,7 @@ !< !> Main program -PROGRAM ANALYTIC_LINEAR_ELASTICITYEXAMPLE +PROGRAM CantileverBeamExample #ifndef NOMPIMOD USE MPI #endif @@ -97,8 +97,8 @@ PROGRAM ANALYTIC_LINEAR_ELASTICITYEXAMPLE !Program types + TYPE(cmfe_ContextType) :: context TYPE(cmfe_RegionType) :: WorldRegion - TYPE(cmfe_CoordinateSystemType) :: WorldCoordinateSystem #ifdef WIN32 !Quickwin type @@ -121,7 +121,10 @@ PROGRAM ANALYTIC_LINEAR_ELASTICITYEXAMPLE #endif !Intialise cmiss - CALL cmfe_Initialise(WorldCoordinateSystem,WorldRegion,Err) + CALL cmfe_Context_Initialise(context,err) + CALL cmfe_Initialise(context,Err) + CALL cmfe_Region_Initialise(worldRegion,err) + CALL cmfe_Context_WorldRegionGet(context,worldRegion,err) CALL cmfe_ErrorHandlingModeSet(CMFE_ERRORS_TRAP_ERROR,Err) @@ -132,7 +135,7 @@ PROGRAM ANALYTIC_LINEAR_ELASTICITYEXAMPLE CALL ANALYTIC_LINEAR_ELASTICITY_TESTCASE_LINEAR_LAGRANGE_EXPORT(2,2,2,"TriLinearLagrange") - CALL cmfe_Finalise(Err) + CALL cmfe_Finalise(context,Err) WRITE(*,'(A)') "Program successfully completed." @@ -235,6 +238,7 @@ SUBROUTINE ANALYTIC_LINEAR_ELASTICITY_GENERIC(NumberGlobalXElements,NumberGlobal !Get the number of computation nodes and this computation node number CALL cmfe_ComputationEnvironment_Initialise(ComputationEnvironment,Err) + CALL cmfe_Context_ComputationEnvironmentGet(context,computationEnvironment,err) CALL cmfe_ComputationEnvironment_NumberOfWorldNodesGet(ComputationEnvironment,NumberOfComputationNodes,Err) CALL cmfe_ComputationEnvironment_WorldNodeNumberGet(ComputationEnvironment,ComputationNodeNumber,Err) @@ -246,7 +250,7 @@ SUBROUTINE ANALYTIC_LINEAR_ELASTICITY_GENERIC(NumberGlobalXElements,NumberGlobal !Create a CS - default is 3D rectangular cartesian CS with 0,0,0 as origin CALL cmfe_CoordinateSystem_Initialise(CoordinateSystem,Err) - CALL cmfe_CoordinateSystem_CreateStart(CoordinateSystemUserNumber,CoordinateSystem,Err) + CALL cmfe_CoordinateSystem_CreateStart(CoordinateSystemUserNumber,context,CoordinateSystem,Err) CALL cmfe_CoordinateSystem_TypeSet(CoordinateSystem,CMFE_COORDINATE_RECTANGULAR_CARTESIAN_TYPE,Err) CALL cmfe_CoordinateSystem_DimensionSet(CoordinateSystem,NumberOfXi,Err) CALL cmfe_CoordinateSystem_OriginSet(CoordinateSystem,ORIGIN,Err) @@ -259,7 +263,7 @@ SUBROUTINE ANALYTIC_LINEAR_ELASTICITY_GENERIC(NumberGlobalXElements,NumberGlobal CALL cmfe_Region_CreateFinish(Region,Err) CALL cmfe_Basis_Initialise(Basis,Err) - CALL cmfe_Basis_CreateStart(BasisUserNumber,Basis,Err) + CALL cmfe_Basis_CreateStart(BasisUserNumber,context,Basis,Err) CALL cmfe_Basis_TypeSet(Basis,CMFE_BASIS_LAGRANGE_HERMITE_TP_TYPE,Err) CALL cmfe_Basis_NumberOfXiSet(Basis,NumberOfXi,Err) CALL cmfe_Basis_InterpolationXiSet(Basis,Interpolation(1:NumberOfXi),Err) @@ -371,7 +375,7 @@ SUBROUTINE ANALYTIC_LINEAR_ELASTICITY_GENERIC(NumberGlobalXElements,NumberGlobal !Define the problem CALL cmfe_Problem_Initialise(Problem,Err) - CALL cmfe_Problem_CreateStart(ProblemUserNumber,[CMFE_PROBLEM_ELASTICITY_CLASS,CMFE_PROBLEM_LINEAR_ELASTICITY_TYPE, & + CALL cmfe_Problem_CreateStart(ProblemUserNumber,context,[CMFE_PROBLEM_ELASTICITY_CLASS,CMFE_PROBLEM_LINEAR_ELASTICITY_TYPE, & & CMFE_PROBLEM_NO_SUBTYPE],Problem,Err) CALL cmfe_Problem_CreateFinish(Problem,Err) @@ -441,13 +445,17 @@ SUBROUTINE ANALYTIC_LINEAR_ELASTICITY_GENERIC_CLEAN(CoordinateSystemUserNumber,R INTEGER(CMISSIntg), INTENT(IN) :: GeneratedMeshUserNumber INTEGER(CMISSIntg), INTENT(IN) :: ProblemUserNumber - CALL cmfe_Problem_Destroy(ProblemUserNumber,Err) - CALL cmfe_GeneratedMesh_Destroy(RegionUserNumber,GeneratedMeshUserNumber,Err) - CALL cmfe_Basis_Destroy(BasisUserNumber,Err) - CALL cmfe_Region_Destroy(RegionUserNumber,Err) - CALL cmfe_CoordinateSystem_Destroy(CoordinateSystemUserNumber,Err) + INTEGER(CMISSIntg) :: contextUserNumber + + CALL cmfe_Context_UserNumberGet(context,contextUserNumber,err) + + CALL cmfe_Problem_Destroy(contextUserNumber,ProblemUserNumber,Err) + CALL cmfe_GeneratedMesh_Destroy(contextUserNumber,RegionUserNumber,GeneratedMeshUserNumber,Err) + CALL cmfe_Basis_Destroy(contextUserNumber,BasisUserNumber,Err) + CALL cmfe_Region_Destroy(contextUserNumber,RegionUserNumber,Err) + CALL cmfe_CoordinateSystem_Destroy(contextUserNumber,CoordinateSystemUserNumber,Err) END SUBROUTINE ANALYTIC_LINEAR_ELASTICITY_GENERIC_CLEAN -END PROGRAM ANALYTIC_LINEAR_ELASTICITYEXAMPLE +END PROGRAM CantileverBeamExample diff --git a/tests/LinearElasticity/Extension.f90 b/tests/LinearElasticity/Extension.f90 index fae01d9d..c44fef83 100644 --- a/tests/LinearElasticity/Extension.f90 +++ b/tests/LinearElasticity/Extension.f90 @@ -46,7 +46,7 @@ !< !> Main program -PROGRAM ANALYTIC_LINEAR_ELASTICITYEXAMPLE +PROGRAM AnalyticLinearElasticityExample #ifndef NOMPIMOD USE MPI #endif @@ -97,8 +97,8 @@ PROGRAM ANALYTIC_LINEAR_ELASTICITYEXAMPLE !Program types + TYPE(cmfe_ContextType) :: context TYPE(cmfe_RegionType) :: WorldRegion - TYPE(cmfe_CoordinateSystemType) :: WorldCoordinateSystem #ifdef WIN32 !Quickwin type @@ -121,7 +121,10 @@ PROGRAM ANALYTIC_LINEAR_ELASTICITYEXAMPLE #endif !Intialise cmiss - CALL cmfe_Initialise(WorldCoordinateSystem,WorldRegion,Err) + CALL cmfe_Context_Initialise(context,err) + CALL cmfe_Initialise(context,Err) + CALL cmfe_Region_Initialise(worldRegion,err) + CALL cmfe_Context_WorldRegionGet(context,worldRegion,err) CALL cmfe_ErrorHandlingModeSet(CMFE_ERRORS_TRAP_ERROR,Err) @@ -134,7 +137,7 @@ PROGRAM ANALYTIC_LINEAR_ELASTICITYEXAMPLE CALL ANALYTIC_LINEAR_ELASTICITY_TESTCASE_LINEAR_LAGRANGE_EXPORT(1,1,0,"BiLinearLagrange") CALL ANALYTIC_LINEAR_ELASTICITY_TESTCASE_LINEAR_LAGRANGE_EXPORT(1,1,1,"TriLinearLagrange") !CALL ANALYTIC_LINEAR_ELASTICITY_TESTCASE_QUADRATIC_LAGRANGE_EXPORT(1,0,0,"QuadraticLagrange") - CALL cmfe_Finalise(Err) + CALL cmfe_Finalise(context,Err) WRITE(*,'(A)') "Program successfully completed." @@ -287,6 +290,7 @@ SUBROUTINE ANALYTIC_LINEAR_ELASTICITY_GENERIC(NumberGlobalXElements,NumberGlobal !Get the number of computation nodes and this computation node number CALL cmfe_ComputationEnvironment_Initialise(ComputationEnvironment,Err) + CALL cmfe_Context_ComputationEnvironmentGet(context,computationEnvironment,err) CALL cmfe_ComputationEnvironment_NumberOfWorldNodesGet(ComputationEnvironment,NumberOfComputationNodes,Err) CALL cmfe_ComputationEnvironment_WorldNodeNumberGet(ComputationEnvironment,ComputationNodeNumber,Err) @@ -298,7 +302,7 @@ SUBROUTINE ANALYTIC_LINEAR_ELASTICITY_GENERIC(NumberGlobalXElements,NumberGlobal !Create a CS - default is 3D rectangular cartesian CS with 0,0,0 as origin CALL cmfe_CoordinateSystem_Initialise(CoordinateSystem,Err) - CALL cmfe_CoordinateSystem_CreateStart(CoordinateSystemUserNumber,CoordinateSystem,Err) + CALL cmfe_CoordinateSystem_CreateStart(CoordinateSystemUserNumber,context,CoordinateSystem,Err) CALL cmfe_CoordinateSystem_TypeSet(CoordinateSystem,CMFE_COORDINATE_RECTANGULAR_CARTESIAN_TYPE,Err) CALL cmfe_CoordinateSystem_DimensionSet(CoordinateSystem,NumberOfXi,Err) CALL cmfe_CoordinateSystem_OriginSet(CoordinateSystem,ORIGIN,Err) @@ -311,7 +315,7 @@ SUBROUTINE ANALYTIC_LINEAR_ELASTICITY_GENERIC(NumberGlobalXElements,NumberGlobal CALL cmfe_Region_CreateFinish(Region,Err) CALL cmfe_Basis_Initialise(Basis,Err) - CALL cmfe_Basis_CreateStart(BasisUserNumber,Basis,Err) + CALL cmfe_Basis_CreateStart(BasisUserNumber,context,Basis,Err) CALL cmfe_Basis_TypeSet(Basis,CMFE_BASIS_LAGRANGE_HERMITE_TP_TYPE,Err) CALL cmfe_Basis_NumberOfXiSet(Basis,NumberOfXi,Err) CALL cmfe_Basis_InterpolationXiSet(Basis,Interpolation(1:NumberOfXi),Err) @@ -424,7 +428,7 @@ SUBROUTINE ANALYTIC_LINEAR_ELASTICITY_GENERIC(NumberGlobalXElements,NumberGlobal !Define the problem CALL cmfe_Problem_Initialise(Problem,Err) - CALL cmfe_Problem_CreateStart(ProblemUserNumber,[CMFE_PROBLEM_ELASTICITY_CLASS,CMFE_PROBLEM_LINEAR_ELASTICITY_TYPE, & + CALL cmfe_Problem_CreateStart(ProblemUserNumber,context,[CMFE_PROBLEM_ELASTICITY_CLASS,CMFE_PROBLEM_LINEAR_ELASTICITY_TYPE, & & CMFE_PROBLEM_NO_SUBTYPE],Problem,Err) CALL cmfe_Problem_CreateFinish(Problem,Err) @@ -494,13 +498,16 @@ SUBROUTINE ANALYTIC_LINEAR_ELASTICITY_GENERIC_CLEAN(CoordinateSystemUserNumber,R INTEGER(CMISSIntg), INTENT(IN) :: GeneratedMeshUserNumber INTEGER(CMISSIntg), INTENT(IN) :: ProblemUserNumber - CALL cmfe_Problem_Destroy(ProblemUserNumber,Err) - CALL cmfe_GeneratedMesh_Destroy(RegionUserNumber,GeneratedMeshUserNumber,Err) - CALL cmfe_Basis_Destroy(BasisUserNumber,Err) - CALL cmfe_Region_Destroy(RegionUserNumber,Err) - CALL cmfe_CoordinateSystem_Destroy(CoordinateSystemUserNumber,Err) + INTEGER(CMISSIntg) :: contextUserNumber + + CALL cmfe_Context_UserNumberGet(context,contextUserNumber,err) + CALL cmfe_Problem_Destroy(contextUserNumber,ProblemUserNumber,Err) + CALL cmfe_GeneratedMesh_Destroy(contextUserNumber,RegionUserNumber,GeneratedMeshUserNumber,Err) + CALL cmfe_Basis_Destroy(contextUserNumber,BasisUserNumber,Err) + CALL cmfe_Region_Destroy(contextUserNumber,RegionUserNumber,Err) + CALL cmfe_CoordinateSystem_Destroy(contextUserNumber,CoordinateSystemUserNumber,Err) END SUBROUTINE ANALYTIC_LINEAR_ELASTICITY_GENERIC_CLEAN -END PROGRAM ANALYTIC_LINEAR_ELASTICITYEXAMPLE +END PROGRAM AnalyticLinearElasticityExample From 0513f9bf501362a1b1a38066b32e29ae1c3d9652 Mon Sep 17 00:00:00 2001 From: Chris Bradley Date: Thu, 26 Apr 2018 12:47:07 +1200 Subject: [PATCH 10/13] Bug fixes. --- src/boundary_condition_routines.f90 | 3 + src/mesh_routines.f90 | 5 +- src/opencmiss_iron.f90 | 431 +++++++++++++++++++++++++--- src/solver_mapping_routines.f90 | 3 + 4 files changed, 400 insertions(+), 42 deletions(-) diff --git a/src/boundary_condition_routines.f90 b/src/boundary_condition_routines.f90 index 276daed1..331ed6eb 100755 --- a/src/boundary_condition_routines.f90 +++ b/src/boundary_condition_routines.f90 @@ -318,9 +318,12 @@ SUBROUTINE BOUNDARY_CONDITIONS_CREATE_FINISH(BOUNDARY_CONDITIONS,ERR,ERROR,*) IF(BOUNDARY_CONDITIONS%BOUNDARY_CONDITIONS_FINISHED) THEN CALL FlagError("Boundary conditions have already been finished.",ERR,ERROR,*999) ELSE + NULLIFY(SOLVER_EQUATIONS) CALL BoundaryConditions_SolverEquationsGet(BOUNDARY_CONDITIONS,SOLVER_EQUATIONS,err,error,*999) + NULLIFY(solver) CALL SolverEquations_SolverGet(SOLVER_EQUATIONS,solver,err,error,*999) IF(ALLOCATED(BOUNDARY_CONDITIONS%BOUNDARY_CONDITIONS_VARIABLES)) THEN + NULLIFY(workGroup) CALL Solver_WorkGroupGet(solver,workGroup,err,error,*999) CALL WorkGroup_GroupCommunicatorGet(workGroup,groupCommunicator,err,error,*999) CALL WorkGroup_NumberOfGroupNodesGet(workGroup,numberOfGroupComputationNodes,err,error,*999) diff --git a/src/mesh_routines.f90 b/src/mesh_routines.f90 index 1dc0f649..7d2b1d6d 100644 --- a/src/mesh_routines.f90 +++ b/src/mesh_routines.f90 @@ -397,8 +397,11 @@ SUBROUTINE DECOMPOSITION_CREATE_START(USER_NUMBER,MESH,DECOMPOSITION,ERR,ERROR,* newDecomposition%MESH_COMPONENT_NUMBER=1 !Default decomposition is all the mesh with one domain. newDecomposition%DECOMPOSITION_TYPE=DECOMPOSITION_ALL_TYPE + NULLIFY(region) CALL Mesh_RegionGet(mesh,region,err,error,*999) + NULLIFY(context) CALL Region_ContextGet(region,context,err,error,*999) + NULLIFY(computationEnvironment) CALL Context_ComputationEnvironmentGet(context,computationEnvironment,err,error,*999) NULLIFY(worldWorkGroup) CALL ComputationEnvironment_WorldWorkGroupGet(computationEnvironment,worldWorkGroup,err,error,*999) @@ -4748,7 +4751,7 @@ SUBROUTINE DOMAIN_MAPPINGS_NODES_DOFS_CALCULATE(DOMAIN,ERR,ERROR,*) DO node_idx=1,MESH_TOPOLOGY%NODES%numberOfNodes no_computation_node=DOMAIN%NODE_DOMAIN(node_idx) IF(no_computation_node>=0.AND.no_computation_nodeAdds to the value of the specified constant and sets this as a boundary condition on the specified constant for boundary conditions identified by a user number. - SUBROUTINE cmfe_BoundaryConditions_AddConstantNumber(contextUserNumber,regionUserNumber,problemUserNumber, & - & controlLoopIdentifiers,solverIndex,fieldUserNumber,variableType,componentNumber,condition,value,err) + SUBROUTINE cmfe_BoundaryConditions_AddConstantNumber(contextUserNumber,problemUserNumber,controlLoopIdentifiers,solverIndex, & + & regionUserNumber,fieldUserNumber,variableType,componentNumber,condition,value,err) !DLLEXPORT(cmfe_BoundaryConditions_AddConstantNumber) !Argument variables INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets the value of the specified constant as a boundary condition on the specified constant for boundary conditions identified by a user number. - SUBROUTINE cmfe_BoundaryConditions_SetConstantNumber(contextUserNumber,regionUserNumber,problemUserNumber, & - & controlLoopIdentifiers,solverIndex,variableType,fieldUserNumber,componentNumber,condition,value,err) + SUBROUTINE cmfe_BoundaryConditions_SetConstantNumber(contextUserNumber,problemUserNumber, & + & controlLoopIdentifiers,solverIndex,regionUserNumber,fieldUserNumber,variableType,componentNumber,condition,value,err) !DLLEXPORT(cmfe_BoundaryConditions_SetConstantNumber) !Argument variables INTEGER(INTG), INTENT(IN) :: contextUserNumber !Adds the value to the specified element and sets this as a boundary condition on the specified element for boundary conditions identified by a user number. - SUBROUTINE cmfe_BoundaryConditions_AddElementNumber(contextUserNumber,regionUserNumber,problemUserNumber, & - & controlLoopIdentifiers,solverIndex,fieldUserNumber,variableType,elementUserNumber,componentNumber,condition,value,err) + SUBROUTINE cmfe_BoundaryConditions_AddElementNumber(contextUserNumber,problemUserNumber,controlLoopIdentifiers,solverIndex, & + & regionUserNumber,fieldUserNumber,variableType,elementUserNumber,componentNumber,condition,value,err) !DLLEXPORT(cmfe_BoundaryConditions_AddElementNumber) !Argument variables INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets the value of the specified element as a boundary condition on the specified element for boundary conditions identified by a user number. - SUBROUTINE cmfe_BoundaryConditions_SetElementNumber(contextUserNumber,regionUserNumber,problemUserNumber, & - & controlLoopIdentifiers,solverIndex,fieldUserNumber,variableType,elementUserNumber,componentNumber,condition,value,err) + SUBROUTINE cmfe_BoundaryConditions_SetElementNumber(contextUserNumber,problemUserNumber,controlLoopIdentifiers,solverIndex, & + & regionUserNumber,fieldUserNumber,variableType,elementUserNumber,componentNumber,condition,value,err) !DLLEXPORT(cmfe_BoundaryConditions_SetElementNumber) !Argument variables INTEGER(INTG), INTENT(IN) :: contextUserNumber !Adds the value to the specified node and sets this as a boundary condition on the specified node for boundary conditions identified by a user number. - SUBROUTINE cmfe_BoundaryConditions_AddNodeNumber(contextUserNumber,regionUserNumber,problemUserNumber, & - & controlLoopIdentifiers,solverIndex,fieldUserNumber,variableType,versionNumber,derivativeNumber,nodeUserNumber, & - & componentNumber,condition,value,err) + SUBROUTINE cmfe_BoundaryConditions_AddNodeNumber(contextUserNumber,problemUserNumber,controlLoopIdentifiers,solverIndex, & + & regionUserNumber,fieldUserNumber,variableType,versionNumber,derivativeNumber,nodeUserNumber,componentNumber,condition, & + & value,err) !DLLEXPORT(cmfe_BoundaryConditions_AddNodeNumber) !Argument variables INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets the value of the specified node as a boundary condition on the specified node for boundary conditions identified by a user number. - SUBROUTINE cmfe_BoundaryConditions_SetNodeNumber0(contextUserNumber,regionUserNumber,problemUserNumber,controlLoopIdentifier, & - & solverIndex,fieldUserNumber,variableType,versionNumber,derivativeNumber,nodeUserNumber,componentNumber,condition,value,err) + SUBROUTINE cmfe_BoundaryConditions_SetNodeNumber0(contextUserNumber,problemUserNumber,controlLoopIdentifier,solverIndex, & + & regionUserNumber,fieldUserNumber,variableType,versionNumber,derivativeNumber,nodeUserNumber,componentNumber,condition, & + & value,err) !DLLEXPORT(cmfe_BoundaryConditions_SetNodeNumber0) !Argument variables INTEGER(INTG), INTENT(IN) :: contextUserNumber !Sets the value of the specified node as a boundary condition on the specified node for boundary conditions identified by a user number. - SUBROUTINE cmfe_BoundaryConditions_SetNodeNumber1(contextUserNumber,regionUserNumber,problemUserNumber, & - & controlLoopIdentifiers,solverIndex,fieldUserNumber,variableType,versionNumber,derivativeNumber,nodeUserNumber, & - & componentNumber,condition,value,err) + SUBROUTINE cmfe_BoundaryConditions_SetNodeNumber1(contextUserNumber,problemUserNumber,controlLoopIdentifiers,solverIndex, & + & regionUserNumber,fieldUserNumber,variableType,versionNumber,derivativeNumber,nodeUserNumber,componentNumber,condition, & + & value,err) !DLLEXPORT(cmfe_BoundaryConditions_SetNodeNumber1) !Argument variables INTEGER(INTG), INTENT(IN) :: contextUserNumber !Constrain multiple nodal equations dependent field DOFs to be a single solver DOF in the solver equations - SUBROUTINE cmfe_BoundaryConditions_ConstrainNodeDofsEqualNumber(contextUserNumber,regionUserNumber,problemUserNumber, & - & controlLoopIdentifier,solverIndex,fieldUserNumber,fieldVariableType,versionNumber,derivativeNumber,component,nodes, & + SUBROUTINE cmfe_BoundaryConditions_ConstrainNodeDofsEqualNumber(contextUserNumber,problemUserNumber,controlLoopIdentifier, & + & solverIndex,regionUserNumber,fieldUserNumber,fieldVariableType,versionNumber,derivativeNumber,component,nodes, & & coefficient,err) !DLLEXPORT(cmfe_BoundaryConditions_ConstrainNodeDofsEqualNumber) !Argument variables INTEGER(INTG), INTENT(IN) :: contextUserNumber !Export element information for fields set identified by an object. \todo number method + !>Export element information for fields set identified by user number. + SUBROUTINE cmfe_Fields_ElementsExportCCNumber(contextUserNumber,regionUserNumber,fileName,method,err) + !DLLEXPORT(cmfe_Fields_ElementsExportCCNumber) + + !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Export element information for fields set identified by user number. + SUBROUTINE cmfe_Fields_ElementsExportVSCNumber(contextUserNumber,regionUserNumber,fileName,method,err) + !DLLEXPORT(cmfe_Fields_ElementsExportVSCNumber) + + !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Export element information for fields set identified by user number + SUBROUTINE cmfe_Fields_ElementsExportCVSNumber(contextUserNumber,regionUserNumber,fileName,method,err) + !DLLEXPORT(cmfe_Fields_ElementsExportCVSNumber) + + !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Export element information for fields set identified by user number. + SUBROUTINE cmfe_Fields_ElementsExportVSVSNumber(contextUserNumber,regionUserNumber,fileName,method,err) + !DLLEXPORT(cmfe_Fields_ElementsExportVSVSNumber) + + !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Export element information for fields set identified by an object. SUBROUTINE cmfe_Fields_ElementsExportCCObj(fields,fileName,method,err) !DLLEXPORT(cmfe_Fields_ElementsExportCCObj) @@ -41121,7 +41303,7 @@ END SUBROUTINE cmfe_Fields_ElementsExportCCObj ! - !>Export element information for fields set identified by an object. \todo number method + !>Export element information for fields set identified by an object. SUBROUTINE cmfe_Fields_ElementsExportVSCObj(fields,fileName,method,err) !DLLEXPORT(cmfe_Fields_ElementsExportVSCObj) @@ -41154,7 +41336,7 @@ END SUBROUTINE cmfe_Fields_ElementsExportVSCObj ! - !>Export element information for fields set identified by an object. \todo number method + !>Export element information for fields set identified by an object. SUBROUTINE cmfe_Fields_ElementsExportCVSObj(fields,fileName,method,err) !DLLEXPORT(cmfe_Fields_ElementsExportCVSObj) @@ -41186,7 +41368,7 @@ END SUBROUTINE cmfe_Fields_ElementsExportCVSObj !================================================================================================================================ ! - !>Export element information for fields set identified by an object. \todo number method + !>Export element information for fields set identified by an object. SUBROUTINE cmfe_Fields_ElementsExportVSVSObj(fields,fileName,method,err) !DLLEXPORT(cmfe_Fields_ElementsExportVSVSObj) @@ -41213,7 +41395,173 @@ END SUBROUTINE cmfe_Fields_ElementsExportVSVSObj !================================================================================================================================ ! - !>Export nodal information for fields set identified by an object. \todo number method + !>Export nodal information for fields set identified by user number + SUBROUTINE cmfe_Fields_NodesExportCCNumber(contextUserNumber,regionUserNumber,fileName,method,err) + !DLLEXPORT(cmfe_Fields_NodesExportCCNumber) + + !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Export nodal information for fields set identified by user number + SUBROUTINE cmfe_Fields_NodesExportVSCNumber(contextUserNumber,regionUserNumber,fileName,method,err) + !DLLEXPORT(cmfe_Fields_NodesExportVSCNumber) + + !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Export nodal information for fields set identified by user number + SUBROUTINE cmfe_Fields_NodesExportCVSNumber(contextUserNumber,regionUserNumber,fileName,method,err) + !DLLEXPORT(cmfe_Fields_NodesExportCVSNumber) + + !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Export nodal information for fields set identified by user number. + SUBROUTINE cmfe_Fields_NodesExportVSVSNumber(contextUserNumber,regionUserNumber,fileName,method,err) + !DLLEXPORT(cmfe_Fields_NodesExportVSVSNumber) + + !Argument variables + INTEGER(INTG), INTENT(IN) :: contextUserNumber !Export nodal information for fields set identified by an object. SUBROUTINE cmfe_Fields_NodesExportCCObj(fields,fileName,method,err) !DLLEXPORT(cmfe_Fields_NodesExportCCObj) @@ -41249,7 +41597,7 @@ END SUBROUTINE cmfe_Fields_NodesExportCCObj !================================================================================================================================ ! - !>Export nodal information for fields set identified by an object. \todo number method + !>Export nodal information for fields set identified by an object. SUBROUTINE cmfe_Fields_NodesExportVSCObj(fields,fileName,method,err) !DLLEXPORT(cmfe_Fields_NodesExportVSCObj) @@ -41281,7 +41629,7 @@ END SUBROUTINE cmfe_Fields_NodesExportVSCObj !================================================================================================================================ ! - !>Export nodal information for fields set identified by an object. \todo number method + !>Export nodal information for fields set identified by an object. SUBROUTINE cmfe_Fields_NodesExportCVSObj(fields,fileName,method,err) !DLLEXPORT(cmfe_Fields_NodesExportCVSObj) @@ -41313,7 +41661,7 @@ END SUBROUTINE cmfe_Fields_NodesExportCVSObj !================================================================================================================================ ! - !>Export nodal information for fields set identified by an object. \todo number method + !>Export nodal information for fields set identified by an object. SUBROUTINE cmfe_Fields_NodesExportVSVSObj(fields,fileName,method,err) !DLLEXPORT(cmfe_Fields_NodesExportVSVSObj) @@ -52405,6 +52753,7 @@ SUBROUTINE cmfe_Problem_CreateStartObj(problemUserNumber,context,problemSpecific CALL TAU_STATIC_PHASE_START('problem Create') #endif + NULLIFY(problems) CALL Context_ProblemsGet(context%context,problems,err,error,*999) CALL PROBLEM_CREATE_START(problemUserNumber,problems,problemSpecification,problem%problem,err,error,*999) diff --git a/src/solver_mapping_routines.f90 b/src/solver_mapping_routines.f90 index 29de2855..e75ba54c 100755 --- a/src/solver_mapping_routines.f90 +++ b/src/solver_mapping_routines.f90 @@ -200,7 +200,9 @@ SUBROUTINE SOLVER_MAPPING_CALCULATE(SOLVER_MAPPING,ERR,ERROR,*) IF(.NOT.ASSOCIATED(BOUNDARY_CONDITIONS)) THEN CALL FlagError("The solver equations boundary conditions are not associated.",ERR,ERROR,*999) END IF + NULLIFY(solver) CALL SolverEquations_SolverGet(SOLVER_EQUATIONS,solver,err,error,*999) + NULLIFY(workGroup) CALL Solver_WorkGroupGet(solver,workGroup,err,error,*999) ! @@ -328,6 +330,7 @@ SUBROUTINE SOLVER_MAPPING_CALCULATE(SOLVER_MAPPING,ERR,ERROR,*) ! !Calculate the row mappings. CALL WorkGroup_NumberOfGroupNodesGet(workGroup,numberOfGroupComputationNodes,err,error,*999) + CALL WorkGroup_GroupNodeNumberGet(workGroup,myrank,err,error,*999) NUMBER_OF_GLOBAL_SOLVER_ROWS=0 NUMBER_OF_LOCAL_SOLVER_ROWS=0 !Add in the rows from any equations sets that have been added to the solver equations From bdce89ba2e281fc9288db0099738662d191e6853 Mon Sep 17 00:00:00 2001 From: Chris Bradley Date: Fri, 27 Apr 2018 18:16:41 +1200 Subject: [PATCH 11/13] More bug fixes. Examples now pass. --- src/boundary_condition_routines.f90 | 5 +++ src/computation_routines.f90 | 4 +-- src/field_IO_routines.f90 | 10 ++++-- src/field_access_routines.f90 | 49 +++++++++++++++++++++++++++++ src/mesh_access_routines.f90 | 4 +-- src/mesh_routines.f90 | 13 +++++--- src/solver_access_routines.f90 | 22 ++++++++----- 7 files changed, 89 insertions(+), 18 deletions(-) diff --git a/src/boundary_condition_routines.f90 b/src/boundary_condition_routines.f90 index 331ed6eb..9b5560dc 100755 --- a/src/boundary_condition_routines.f90 +++ b/src/boundary_condition_routines.f90 @@ -2539,7 +2539,9 @@ SUBROUTINE BoundaryConditions_NeumannMatricesInitialise(boundaryConditionsVariab !Set up vector of Neumann point values CALL DistributedVector_CreateStart(pointDofMapping,boundaryConditionsNeumann%pointValues,err,error,*999) CALL DistributedVector_CreateFinish(boundaryConditionsNeumann%pointValues,err,error,*999) + NULLIFY(decomposition) CALL Field_DecompositionGet(rhsVariable%field,decomposition,err,error,*999) + NULLIFY(workGroup) CALL Decomposition_WorkGroupGet(decomposition,workGroup,err,error,*999) CALL WorkGroup_GroupNodeNumberGet(workGroup,myGroupComputationNodeNumber,err,error,*999) !Set point values vector from boundary conditions field parameter set @@ -2708,6 +2710,7 @@ SUBROUTINE BoundaryConditions_NeumannIntegrate(rhsBoundaryConditions,err,error,* CALL FlagError("Field variable for RHS boundary conditions is not associated.",err,error,*999) END IF + NULLIFY(geometricField) CALL Field_GeometricGeneralFieldGet(rhsVariable%field,geometricField,dependentGeometry,err,error,*999) CALL DistributedMatrix_AllValuesSet(neumannConditions%integrationMatrix,0.0_DP,err,error,*999) @@ -2715,7 +2718,9 @@ SUBROUTINE BoundaryConditions_NeumannIntegrate(rhsBoundaryConditions,err,error,* numberOfNeumann=rhsBoundaryConditions%DOF_COUNTS(BOUNDARY_CONDITION_NEUMANN_POINT) + & & rhsBoundaryConditions%DOF_COUNTS(BOUNDARY_CONDITION_NEUMANN_POINT_INCREMENTED) + NULLIFY(decomposition) CALL Field_DecompositionGet(rhsVariable%field,decomposition,err,error,*999) + NULLIFY(workGroup) CALL Decomposition_WorkGroupGet(decomposition,workGroup,err,error,*999) CALL WorkGroup_GroupNodeNumberGet(workGroup,myGroupComputationNodeNumber,err,error,*999) diff --git a/src/computation_routines.f90 b/src/computation_routines.f90 index ae327524..f6fc8d34 100755 --- a/src/computation_routines.f90 +++ b/src/computation_routines.f90 @@ -507,7 +507,7 @@ SUBROUTINE ComputationEnvironment_Initialise(context,err,error,*) context%computationEnvironment%worldWorkGroup%parentWorkGroup=>context%computationEnvironment%worldWorkGroup context%computationEnvironment%worldWorkGroup%numberOfGroupComputationNodes= & & context%computationEnvironment%numberOfWorldComputationNodes - !computationEnvironment%worldWorkGroup%computationEnvironment=>computationEnvironment + context%computationEnvironment%worldWorkGroup%computationEnvironment=>context%computationEnvironment ALLOCATE(context%computationEnvironment%worldWorkGroup%worldRanks( & & context%computationEnvironment%numberOfWorldComputationNodes),STAT=err) IF(err/=0) CALL FlagError("Could not allocate world work group world ranks.",err,error,*999) @@ -536,7 +536,7 @@ SUBROUTINE ComputationEnvironment_Initialise(context,err,error,*) context%computationEnvironment%worldWorkGroup%myWorldComputationNodeNumber=rank CALL MPI_COMM_RANK(context%computationEnvironment%worldWorkGroup%mpiGroupCommunicator,rank,mpiIError) CALL MPI_ErrorCheck("MPI_COMM_RANK",mpiIError,err,error,*999) - context%computationEnvironment%worldWorkGroup%myWorldComputationNodeNumber=rank + context%computationEnvironment%worldWorkGroup%myGroupComputationNodeNumber=rank context%computationEnvironment%worldWorkGroup%workGroupFinished=.TRUE. diff --git a/src/field_IO_routines.f90 b/src/field_IO_routines.f90 index e39148b2..869602e5 100755 --- a/src/field_IO_routines.f90 +++ b/src/field_IO_routines.f90 @@ -6249,13 +6249,16 @@ SUBROUTINE FIELD_IO_NODES_EXPORT(FIELDS, FILE_NAME, METHOD, ERR,ERROR,*) INTEGER(INTG):: computation_node_numbers !Returns the region for a fields accounting for regions and interfaces + SUBROUTINE Fields_RegionGet(fields,region,err,error,*) + + !Argument variables + TYPE(FIELDS_TYPE), POINTER :: fields !fields%region + IF(.NOT.ASSOCIATED(region)) THEN + interface=>fields%interface + IF(ASSOCIATED(interface)) THEN + IF(ASSOCIATED(interface%PARENT_REGION)) THEN + region=>interface%PARENT_REGION + ELSE + localError="The parent region is not associated for interface number "// & + & TRIM(NumberToVString(interface%USER_NUMBER,"*",err,error))//"." + CALL FlagError(localError,err,error,*999) + ENDIF + ELSE + CALL FlagError("A region or interface is not associated for the fields.",err,error,*999) + ENDIF + ENDIF + + EXITS("Fields_RegionGet") + RETURN +999 NULLIFY(region) +998 ERRORSEXITS("Fields_RegionGet",err,error) + RETURN 1 + + END SUBROUTINE Fields_RegionGet + + ! + !================================================================================================================================ + ! + END MODULE FieldAccessRoutines diff --git a/src/mesh_access_routines.f90 b/src/mesh_access_routines.f90 index 583068c6..975e9c57 100644 --- a/src/mesh_access_routines.f90 +++ b/src/mesh_access_routines.f90 @@ -1089,8 +1089,8 @@ SUBROUTINE Mesh_RegionGet(mesh,region,err,error,*) NULLIFY(interface) region=>mesh%region IF(.NOT.ASSOCIATED(region)) THEN - INTERFACE=>mesh%INTERFACE - IF(ASSOCIATED(INTERFACE)) THEN + interface=>mesh%interface + IF(ASSOCIATED(interface)) THEN parentRegion=>interface%PARENT_REGION IF(ASSOCIATED(parentRegion)) THEN region=>parentRegion diff --git a/src/mesh_routines.f90 b/src/mesh_routines.f90 index 7d2b1d6d..72fe56e5 100644 --- a/src/mesh_routines.f90 +++ b/src/mesh_routines.f90 @@ -619,11 +619,9 @@ SUBROUTINE DECOMPOSITION_ELEMENT_DOMAIN_CALCULATE(DECOMPOSITION,ERR,ERROR,*) INTEGER(INTG), ALLOCATABLE :: ELEMENT_COUNT(:),ELEMENT_PTR(:),ELEMENT_INDICIES(:),ELEMENT_DISTANCE(:),DISPLACEMENTS(:), & & RECEIVE_COUNTS(:) INTEGER(INTG) :: ELEMENT_WEIGHT(1),WEIGHT_FLAG,NUMBER_FLAG,NUMBER_OF_CONSTRAINTS, & - & NUMBER_OF_COMMON_NODES,PARMETIS_OPTIONS(0:2),randomSeeds(1) + & NUMBER_OF_COMMON_NODES,PARMETIS_OPTIONS(0:2),randomSeedsSize INTEGER(INTG) :: groupCommunicator - !ParMETIS now has double for these - !REAL(SP) :: UBVEC(1) - !REAL(SP), ALLOCATABLE :: TPWGTS(:) + INTEGER(INTG), ALLOCATABLE :: randomSeeds(:) REAL(DP) :: UBVEC(1) REAL(DP), ALLOCATABLE :: TPWGTS(:) REAL(DP) :: NUMBER_ELEMENTS_PER_NODE @@ -716,7 +714,11 @@ SUBROUTINE DECOMPOSITION_ELEMENT_DOMAIN_CALCULATE(DECOMPOSITION,ERR,ERROR,*) ENDDO !ne !Set up ParMETIS variables + NULLIFY(context) CALL WorkGroup_ContextGet(decomposition%workGroup,context,err,error,*999) + CALL Context_RandomSeedsSizeGet(context,randomSeedsSize,err,error,*999) + ALLOCATE(randomSeeds(randomSeedsSize),STAT=err) + IF(err/=0) CALL FlagError("Could not allocate random seeds.",err,error,*999) CALL Context_RandomSeedsGet(context,randomSeeds,err,error,*999) WEIGHT_FLAG=0 !No weights ELEMENT_WEIGHT(1)=1 !Isn't used due to weight flag @@ -735,7 +737,7 @@ SUBROUTINE DECOMPOSITION_ELEMENT_DOMAIN_CALCULATE(DECOMPOSITION,ERR,ERROR,*) PARMETIS_OPTIONS(0)=1 !If zero, defaults are used, otherwise next two values are used PARMETIS_OPTIONS(1)=7 !Level of information to output PARMETIS_OPTIONS(2)=randomSeeds(1) !Seed for random number generator - + IF(ALLOCATED(randomSeeds)) DEALLOCATE(randomSeeds) !Call ParMETIS to calculate the partitioning of the mesh graph. CALL PARMETIS_PARTMESHKWAY(ELEMENT_DISTANCE,ELEMENT_PTR,ELEMENT_INDICIES,ELEMENT_WEIGHT,WEIGHT_FLAG,NUMBER_FLAG, & & NUMBER_OF_CONSTRAINTS,NUMBER_OF_COMMON_NODES,DECOMPOSITION%NUMBER_OF_DOMAINS,TPWGTS,UBVEC,PARMETIS_OPTIONS, & @@ -829,6 +831,7 @@ SUBROUTINE DECOMPOSITION_ELEMENT_DOMAIN_CALCULATE(DECOMPOSITION,ERR,ERROR,*) IF(ALLOCATED(ELEMENT_PTR)) DEALLOCATE(ELEMENT_PTR) IF(ALLOCATED(ELEMENT_INDICIES)) DEALLOCATE(ELEMENT_INDICIES) IF(ALLOCATED(TPWGTS)) DEALLOCATE(TPWGTS) + IF(ALLOCATED(randomSeeds)) DEALLOCATE(randomSeeds) ERRORSEXITS("DECOMPOSITION_ELEMENT_DOMAIN_CALCULATE",ERR,ERROR) RETURN 1 diff --git a/src/solver_access_routines.f90 b/src/solver_access_routines.f90 index ab5fe58b..217be4ef 100644 --- a/src/solver_access_routines.f90 +++ b/src/solver_access_routines.f90 @@ -253,13 +253,18 @@ SUBROUTINE Solver_SolversGet(solver,solvers,err,error,*) INTEGER(INTG), INTENT(OUT) :: err !solver%solvers + + testSolver=>solver + DO WHILE(ASSOCIATED(testSolver%LINKING_SOLVER)) + testSolver=>testSolver%LINKING_SOLVER + ENDDO + solvers=>testSolver%solvers IF(.NOT.ASSOCIATED(solvers)) CALL FlagError("The solver solvers is not associated.",err,error,*999) EXITS("Solver_SolversGet") @@ -283,19 +288,22 @@ SUBROUTINE Solver_WorkGroupGet(solver,workGroup,err,error,*) INTEGER(INTG), INTENT(OUT) :: err !solver%solvers%CONTROL_LOOP%problem%workGroup + workGroup=>solvers%CONTROL_LOOP%problem%workGroup IF(.NOT.ASSOCIATED(workGroup)) CALL FlagError("The solver work group is not associated.",err,error,*999) EXITS("Solver_WorkGroupGet") From f7299d263f95b7a58fa1a6954ae93df8fa6ae382 Mon Sep 17 00:00:00 2001 From: Chris Bradley Date: Sat, 28 Apr 2018 10:47:47 +1200 Subject: [PATCH 12/13] Fix bug in backsubstitution for sparse equations matrices. --- src/equations_set_routines.f90 | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/equations_set_routines.f90 b/src/equations_set_routines.f90 index ad8da6b8..0ca0e730 100644 --- a/src/equations_set_routines.f90 +++ b/src/equations_set_routines.f90 @@ -1805,7 +1805,8 @@ SUBROUTINE EQUATIONS_SET_BACKSUBSTITUTE(equationsSet,BOUNDARY_CONDITIONS,err,err DO equations_column_idx=ROW_INDICES(equations_row_number), & ROW_INDICES(equations_row_number+1)-1 equations_column_number=COLUMN_INDICES(equations_column_idx) - variable_dof=equations_column_idx-ROW_INDICES(equations_row_number)+1 + variable_dof=COLUMN_DOMAIN_MAPPING%GLOBAL_TO_LOCAL_MAP( & + & equations_column_number)%LOCAL_NUMBER(1) MATRIX_VALUE=equationsMatrixData(equations_column_idx) DEPENDENT_VALUE=DEPENDENT_PARAMETERS(variable_dof) RHS_VALUE=RHS_VALUE+MATRIX_VALUE*DEPENDENT_VALUE From e8830c4939055faf362d7d15c53764e52d1ba1aa Mon Sep 17 00:00:00 2001 From: Chris Bradley Date: Wed, 9 May 2018 18:12:11 +1200 Subject: [PATCH 13/13] Add in context files. --- src/context_access_routines.f90 | 475 ++++++++++++++++++++++++++++++++ src/context_routines.f90 | 364 ++++++++++++++++++++++++ 2 files changed, 839 insertions(+) create mode 100644 src/context_access_routines.f90 create mode 100644 src/context_routines.f90 diff --git a/src/context_access_routines.f90 b/src/context_access_routines.f90 new file mode 100644 index 00000000..5c2f526b --- /dev/null +++ b/src/context_access_routines.f90 @@ -0,0 +1,475 @@ +!> \file +!> \author Chris Bradley +!> \brief This module handles all context access routines +!> +!> \section LICENSE +!> +!> Version: MPL 1.1/GPL 2.0/LGPL 2.1 +!> +!> The contents of this file are subject to the Mozilla Public License +!> Version 1.1 (the "License"); you may not use this file except in +!> compliance with the License. You may obtain a copy of the License at +!> http://www.mozilla.org/MPL/ +!> +!> Software distributed under the License is distributed on an "AS IS" +!> basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +!> License for the specific language governing rights and limitations +!> under the License. +!> +!> The Original Code is OpenCMISS +!> +!> The Initial Developer of the Original Code is University of Auckland, +!> Auckland, New Zealand, the University of Oxford, Oxford, United +!> Kingdom and King's College, London, United Kingdom. Portions created +!> by the University of Auckland, the University of Oxford and King's +!> College, London are Copyright (C) 2007-2010 by the University of +!> Auckland, the University of Oxford and King's College, London. +!> All Rights Reserved. +!> +!> Contributor(s): Chris Bradley +!> +!> Alternatively, the contents of this file may be used under the terms of +!> either the GNU General Public License Version 2 or later (the "GPL"), or +!> the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), +!> in which case the provisions of the GPL or the LGPL are applicable instead +!> of those above. If you wish to allow use of your version of this file only +!> under the terms of either the GPL or the LGPL, and not to allow others to +!> use your version of this file under the terms of the MPL, indicate your +!> decision by deleting the provisions above and replace them with the notice +!> and other provisions required by the GPL or the LGPL. If you do not delete +!> the provisions above, a recipient may use your version of this file under +!> the terms of any one of the MPL, the GPL or the LGPL. +!> + +!> This module handles all contex access routines. +MODULE ContextAccessRoutines + + USE BaseRoutines + USE ISO_VARYING_STRING + USE Kinds + USE Strings + USE Types + +#include "macros.h" + + IMPLICIT NONE + + PRIVATE + + !Module parameters + + !Module types + + !Module variables + + !Interfaces + + PUBLIC Context_BasisFunctionsGet + + PUBLIC Context_ComputationEnvironmentGet + + PUBLIC Context_ContextsGet + + PUBLIC Context_CoordinateSystemsGet + + PUBLIC Context_ProblemsGet + + PUBLIC Context_RandomSeedsGet + + PUBLIC Context_RandomSeedsSizeGet + + PUBLIC Context_RegionsGet + + PUBLIC Context_UserNumberFind + + PUBLIC Context_UserNumberGet + + PUBLIC Context_Get + +CONTAINS + + ! + !================================================================================================================================ + ! + + !>Gets the basis functions for a context. + SUBROUTINE Context_BasisFunctionsGet(context,basisFunctions,err,error,*) + + !Argument Variables + TYPE(ContextType), POINTER, INTENT(IN) :: context !context%basisFunctions + IF(.NOT.ASSOCIATED(basisFunctions)) THEN + localError="The basis functions for context number "// & + & TRIM(NumberToVString(context%userNumber,"*",err,error))//" is not associated." + CALL FlagError(localError,err,error,*999) + ENDIF + + EXITS("Context_BasisFunctionsGet") + RETURN +999 NULLIFY(basisFunctions) +998 ERRORS("Context_BasisFunctionsGet",err,error) + EXITS("Context_BasisFunctionsGet") + RETURN 1 + + END SUBROUTINE Context_BasisFunctionsGet + + ! + !================================================================================================================================ + ! + + !>Gets the computation environment for a context. + SUBROUTINE Context_ComputationEnvironmentGet(context,computationEnvironment,err,error,*) + + !Argument Variables + TYPE(ContextType), POINTER, INTENT(IN) :: context !context%computationEnvironment + IF(.NOT.ASSOCIATED(computationEnvironment)) THEN + localError="The computation environment for context number "// & + & TRIM(NumberToVString(context%userNumber,"*",err,error))//" is not associated." + CALL FlagError(localError,err,error,*999) + ENDIF + + EXITS("Context_ComputationEnvironmentGet") + RETURN +999 NULLIFY(computationEnvironment) +998 ERRORS("Context_ComputationEnvironmentGet",err,error) + EXITS("Context_ComputationEnvironmentGet") + RETURN 1 + + END SUBROUTINE Context_ComputationEnvironmentGet + + ! + !================================================================================================================================ + ! + + !>Gets the contexts for a context. + SUBROUTINE Context_ContextsGet(context,contexts,err,error,*) + + !Argument Variables + TYPE(ContextType), POINTER, INTENT(IN) :: context !context%contexts + IF(.NOT.ASSOCIATED(contexts)) THEN + localError="The contexts for context number "// & + & TRIM(NumberToVString(context%userNumber,"*",err,error))//" is not associated." + CALL FlagError(localError,err,error,*999) + ENDIF + + EXITS("Context_ContextsGet") + RETURN +999 NULLIFY(contexts) +998 ERRORS("Context_ContextsGet",err,error) + EXITS("Context_ContextsGet") + RETURN 1 + + END SUBROUTINE Context_ContextsGet + + ! + !================================================================================================================================ + ! + + !>Gets the coordinate systems for a context. + SUBROUTINE Context_CoordinateSystemsGet(context,coordinateSystems,err,error,*) + + !Argument Variables + TYPE(ContextType), POINTER, INTENT(IN) :: context !context%coordinateSystems + IF(.NOT.ASSOCIATED(coordinateSystems)) THEN + localError="The coordinate systems for context number "// & + & TRIM(NumberToVString(context%userNumber,"*",err,error))//" is not associated." + CALL FlagError(localError,err,error,*999) + ENDIF + + EXITS("Context_CoordinateSystemsGet") + RETURN +999 NULLIFY(coordinateSystems) +998 ERRORS("Context_CoordinateSystemsGet",err,error) + EXITS("Context_CoordinateSystemsGet") + RETURN 1 + + END SUBROUTINE Context_CoordinateSystemsGet + + ! + !================================================================================================================================ + ! + + !>Gets the problems for a context. + SUBROUTINE Context_ProblemsGet(context,problems,err,error,*) + + !Argument Variables + TYPE(ContextType), POINTER, INTENT(IN) :: context !context%problems + IF(.NOT.ASSOCIATED(problems)) THEN + localError="The problems for context number "// & + & TRIM(NumberToVString(context%userNumber,"*",err,error))//" is not associated." + CALL FlagError(localError,err,error,*999) + ENDIF + + EXITS("Context_ProblemsGet") + RETURN +999 NULLIFY(problems) +998 ERRORS("Context_ProblemsGet",err,error) + EXITS("Context_ProblemsGet") + RETURN 1 + + END SUBROUTINE Context_ProblemsGet + + ! + !================================================================================================================================ + ! + + !>Gets the random seeds for a context. \see OpenCMISS::Iron::cmfe_Context_RandomSeedsGet + SUBROUTINE Context_RandomSeedsGet(context,randomSeeds,err,error,*) + + !Argument Variables + TYPE(ContextType), POINTER, INTENT(IN) :: context != "// & + & TRIM(NumberToVString(SIZE(context%cmissRandomSeeds,1),"*",err,error))//"." + CALL FlagError(localError,err,error,*999) + ENDIF + + randomSeeds(1:SIZE(context%cmissRandomSeeds,1))=context%cmissRandomSeeds(1:SIZE(context%cmissRandomSeeds,1)) + + EXITS("Context_RandomSeedsGet") + RETURN +999 ERRORS("Context_RandomSeedsGet",err,error) + EXITS("Context_RandomSeedsGet") + RETURN 1 + + END SUBROUTINE Context_RandomSeedsGet + + ! + !================================================================================================================================ + ! + + !>Returns the size of the random seeds array for a context \see OpenCMISS::Iron::cmfe_Context_RandomSeedsSizeGet + SUBROUTINE Context_RandomSeedsSizeGet(context,randomSeedsSize,err,error,*) + + !Argument variables + TYPE(ContextType), POINTER, INTENT(IN) :: context !Gets the regions for a context. + SUBROUTINE Context_RegionsGet(context,regions,err,error,*) + + !Argument Variables + TYPE(ContextType), POINTER, INTENT(IN) :: context !context%regions + IF(.NOT.ASSOCIATED(regions)) THEN + localError="The regions for context number "// & + & TRIM(NumberToVString(context%userNumber,"*",err,error))//" is not associated." + CALL FlagError(localError,err,error,*999) + ENDIF + + EXITS("Context_RegionsGet") + RETURN +999 NULLIFY(regions) +998 ERRORS("Context_RegionsGet",err,error) + EXITS("Context_RegionsGet") + RETURN 1 + + END SUBROUTINE Context_RegionsGet + + ! + !================================================================================================================================ + ! + + !>Finds and returns a pointer to the context identified by a user number. If no context with that user number exists context is left nullified. + SUBROUTINE Context_UserNumberFind(contexts,userNumber,context,err,error,*) + + !Argument variables + TYPE(ContextsType), INTENT(IN) :: contexts !0) THEN + IF(.NOT.ALLOCATED(contexts%contexts)) CALL FlagError("Contexts contexts is not allocated.",err,error,*999) + NULLIFY(context) + DO contextIdx=1,contexts%numberOfContexts + IF(.NOT.ASSOCIATED(contexts%contexts(contextIdx)%ptr)) THEN + localError="The context pointer in contexts is not associated for context index "// & + & TRIM(NumberToVString(contextIdx,"*",err,error))//"." + CALL FlagError(localError,err,error,*999) + ENDIF + IF(contexts%contexts(contextIdx)%ptr%userNumber==userNumber) THEN + context=>contexts%contexts(contextIdx)%ptr + EXIT + ENDIF + ENDDO !contextIdx + ENDIF + + EXITS("Context_UserNumberFind") + RETURN +999 ERRORSEXITS("Context_UserNumberFind",err,error) + RETURN 1 + + END SUBROUTINE Context_UserNumberFind + + ! + !================================================================================================================================ + ! + + !>Returns the user number for a context. + SUBROUTINE Context_UserNumberGet(context,userNumber,err,error,*) + + !Argument variables + TYPE(ContextType), POINTER :: context !Finds and returns a pointer to the context with the given user number. + SUBROUTINE Context_Get(contexts,userNumber,context,err,error,*) + + !Argument variables + TYPE(ContextsType), INTENT(IN) :: contexts ! \file +!> \author Chris Bradley +!> \brief This module handles all context routines +!> +!> \section LICENSE +!> +!> Version: MPL 1.1/GPL 2.0/LGPL 2.1 +!> +!> The contents of this file are subject to the Mozilla Public License +!> Version 1.1 (the "License"); you may not use this file except in +!> compliance with the License. You may obtain a copy of the License at +!> http://www.mozilla.org/MPL/ +!> +!> Software distributed under the License is distributed on an "AS IS" +!> basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +!> License for the specific language governing rights and limitations +!> under the License. +!> +!> The Original Code is OpenCMISS +!> +!> The Initial Developer of the Original Code is University of Auckland, +!> Auckland, New Zealand, the University of Oxford, Oxford, United +!> Kingdom and King's College, London, United Kingdom. Portions created +!> by the University of Auckland, the University of Oxford and King's +!> College, London are Copyright (C) 2007-2010 by the University of +!> Auckland, the University of Oxford and King's College, London. +!> All Rights Reserved. +!> +!> Contributor(s): Chris Bradley +!> +!> Alternatively, the contents of this file may be used under the terms of +!> either the GNU General Public License Version 2 or later (the "GPL"), or +!> the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), +!> in which case the provisions of the GPL or the LGPL are applicable instead +!> of those above. If you wish to allow use of your version of this file only +!> under the terms of either the GPL or the LGPL, and not to allow others to +!> use your version of this file under the terms of the MPL, indicate your +!> decision by deleting the provisions above and replace them with the notice +!> and other provisions required by the GPL or the LGPL. If you do not delete +!> the provisions above, a recipient may use your version of this file under +!> the terms of any one of the MPL, the GPL or the LGPL. +!> + +!> This module handles all contex routines. +MODULE ContextRoutines + + USE BaseRoutines + USE BasisRoutines + USE ComputationRoutines + USE ContextAccessRoutines + USE COORDINATE_ROUTINES + USE ISO_VARYING_STRING + USE Kinds + USE PROBLEM_ROUTINES + USE REGION_ROUTINES + USE Strings + USE Types + +#include "macros.h" + + IMPLICIT NONE + + PRIVATE + + !Module parameters + + !Module types + + !Module variables + + !Interfaces + + PUBLIC Context_Create + + PUBLIC Context_Destroy + + PUBLIC Context_RandomSeedsSet + + PUBLIC Contexts_Finalise,Contexts_Initialise + +CONTAINS + + ! + !================================================================================================================================= + ! + + !>Create a context + SUBROUTINE Context_Create(contexts,context,err,error,*) + + !Argument Variables + TYPE(ContextsType), TARGET :: contexts !contexts + ALLOCATE(newContexts(contexts%numberOfContexts+1),STAT=err) + DO contextIdx=1,contexts%numberOfContexts + newContexts(contextIdx)%ptr=>contexts%contexts(contextIdx)%ptr + ENDDO !contextIdx + newContexts(contexts%numberOfContexts+1)%ptr=>newContext + CALL MOVE_ALLOC(newContexts,contexts%contexts) + contexts%numberOfContexts=contexts%numberOfContexts+1 + context=>newContext + + EXITS("Context_Create") + RETURN +999 CALL Context_Finalise(newContext,dummyErr,dummyError,*998) +998 IF(ALLOCATED(newContexts)) DEALLOCATE(newContexts) + ERRORSEXITS("Context_Create",err,error) + RETURN 1 + + END SUBROUTINE Context_Create + + ! + !================================================================================================================================= + ! + + !>Destroy a context + SUBROUTINE Context_Destroy(context,err,error,*) + + !Argument Variables + TYPE(ContextType), POINTER :: context !contexts%contexts(contextIdx)%ptr + ELSE IF(contextIdx>position) THEN + newContexts(contextIdx-1)%ptr=>contexts%contexts(contextIdx)%ptr + ENDIF + ENDDO !contextIdx + CALL MOVE_ALLOC(newContexts,contexts%contexts) + contexts%numberOfContexts=contexts%numberOfContexts-1 + CALL Context_Finalise(context,err,error,*999) + + EXITS("Context_Destroy") + RETURN +999 IF(ALLOCATED(newContexts)) DEALLOCATE(newContexts) + ERRORSEXITS("Context_Destroy",err,error) + RETURN 1 + + END SUBROUTINE Context_Destroy + + ! + !================================================================================================================================= + ! + + !>Finalise a context and deallocate all memory + SUBROUTINE Context_Finalise(context,err,error,*) + + !Argument Variables + TYPE(ContextType),POINTER :: context !Initialise a context + SUBROUTINE Context_Initialise(context,err,error,*) + + !Argument Variables + TYPE(ContextType), POINTER :: context !Sets the random seeds for a context \see OpenCMISS::Iron::cmfe_Context_RandomSeedsSet + SUBROUTINE Context_RandomSeedsSet(context,randomSeeds,err,error,*) + + !Argument variables + TYPE(ContextType), POINTER :: context !SIZE(context%cmissRandomSeeds,1)) THEN + context%cmissRandomSeeds(1:SIZE(context%cmissRandomSeeds,1))=randomSeeds(1:SIZE(context%cmissRandomSeeds,1)) + ELSE + context%cmissRandomSeeds(1:SIZE(randomSeeds,1))=randomSeeds(1:SIZE(randomSeeds,1)) + ENDIF + + EXITS("Context_RandomSeedsSet") + RETURN +999 ERRORSEXITS("Context_RandomSeedsSet",err,error) + RETURN 1 + + END SUBROUTINE Context_RandomSeedsSet + + ! + !================================================================================================================================= + ! + + !>Finalise the contexts + SUBROUTINE Contexts_Finalise(contexts,err,error,*) + + !Argument Variables + TYPE(ContextsType) :: contexts !Initialise the contexts + SUBROUTINE Contexts_Initialise(contexts,err,error,*) + + !Argument Variables + TYPE(ContextsType) :: contexts !