diff --git a/CMakeLists.txt b/CMakeLists.txt index 080641e..7218f9c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,8 +1,17 @@ +cmake_minimum_required(VERSION 3.26 FATAL_ERROR) + +if(DEFINED OpenCMISS_INSTALL_ROOT) + if(EXISTS "${OpenCMISS_INSTALL_ROOT}/libOpenCMISSSetup.cmake") + set(CMAKE_PROJECT_INCLUDE_BEFORE "${OpenCMISS_INSTALL_ROOT}/libOpenCMISSSetup.cmake") + endif() +endif() + set(ExampleName "mooney_rivlin_cellml") -cmake_minimum_required(VERSION 3.4 FATAL_ERROR) project(${ExampleName} VERSION 1.0.0 LANGUAGES C Fortran) -find_package(OpenCMISSLibs 1.3.0 COMPONENTS iron REQUIRED CONFIG) +find_package(libOpenCMISS 1.0.0 REQUIRED + COMPONENTS Fortran +) add_subdirectory(src/fortran) diff --git a/README.rst b/README.rst index 366c252..5d7c69a 100644 --- a/README.rst +++ b/README.rst @@ -10,9 +10,10 @@ Building the example Instructions on how to configure and build with CMake:: git clone https://github.com/OpenCMISS-Examples/mooney_rivlin_cellml.git - mkdir mooney_rivlin_cellml-build - cd mooney_rivlin_cellml-build - cmake -DOpenCMISSLibs_DIR=/path/to/opencmisslib/install ../mooney_rivlin_cellml + cd mooney_rivlin_cellml + mkdir build + cd build + cmake -DOpenCMISS_INSTALL_ROOT=/path/to/opencmiss/install ../. make # cmake --build . will also work here and is much more platform agnostic. Running the example diff --git a/src/fortran/CMakeLists.txt b/src/fortran/CMakeLists.txt index e55d77e..cddd4d3 100644 --- a/src/fortran/CMakeLists.txt +++ b/src/fortran/CMakeLists.txt @@ -1,6 +1,6 @@ add_executable(${ExampleName} ${ExampleName}.F90) -target_link_libraries(${ExampleName} PRIVATE opencmisslibs) +target_link_libraries(${ExampleName} PRIVATE OpenCMISS::libOpenCMISS_Fortran) install(TARGETS ${ExampleName} DESTINATION bin) diff --git a/src/fortran/inputs/mooney_rivlin.xml b/src/fortran/inputs/mooney_rivlin.xml index eff0be0..2fefd00 100644 --- a/src/fortran/inputs/mooney_rivlin.xml +++ b/src/fortran/inputs/mooney_rivlin.xml @@ -1,93 +1,6 @@ - - - + - - - - - - - Nickerson - David - - - d.nickerson@auckland.ac.nz - - - - The University of Auckland - The Bioengineering Institute - - - - - 2003-11-28 - - - - - - - - This is a CellML version of the Mooney-Rivlin constitutive material law, - defining the relation between the eight independent strain components - and the stress components. It is assumed that the strain components - will be controlled externally by the application using this CellML - model. - - - - pubmed_id - - - - - - - Master - Andre - T - - - - - - - Bob - Billy - - - - - - - What cool article to reference ?? - - - year - - - The Journal of Cool Stuff - - volume - 1 - 1000 - - - - + @@ -106,77 +19,55 @@ - + - - - - - We'll use this component as the "interface" to the model, all - other components are hidden via encapsulation in this component. - - - - + - - - - - - - - + + + + + + + + - - - - - - + + + + + + - + - - - - - In this simple model we only have one component, which holds the - six equations. - - - - + - - - - - - - - + + + + + + + + - - - - - - + + + + + + - + Tdev11 @@ -199,7 +90,7 @@ - + Tdev22 @@ -222,7 +113,7 @@ - + Tdev33 @@ -245,7 +136,7 @@ - + Tdev12 @@ -257,7 +148,7 @@ - + Tdev13 @@ -269,7 +160,7 @@ - + Tdev23 @@ -283,8 +174,8 @@ - - + + @@ -301,11 +192,11 @@ - - + + - + diff --git a/src/fortran/inputs/mooney_rivlin_new.cellml b/src/fortran/inputs/mooney_rivlin_new.cellml new file mode 100644 index 0000000..7723e2f --- /dev/null +++ b/src/fortran/inputs/mooney_rivlin_new.cellml @@ -0,0 +1,154 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Tdev11 + + + + + 2.0 + c1 + + + + 4.0 + c2 + + + E22 + E33 + + + + + 4.0 + c2 + + + + + + Tdev22 + + + + + 2.0 + c1 + + + + 4.0 + c2 + + + E11 + E33 + + + + + 4.0 + c2 + + + + + + Tdev33 + + + + + 2.0 + c1 + + + + 4.0 + c2 + + + E11 + E22 + + + + + 4.0 + c2 + + + + + + Tdev12 + + + + + 4.0 + + E12 + c2 + + + + + Tdev13 + + + + + 4.0 + + E13 + c2 + + + + + Tdev23 + + + + + 4.0 + + E23 + c2 + + + + + + diff --git a/src/fortran/mooney_rivlin_cellml.F90 b/src/fortran/mooney_rivlin_cellml.F90 index d8a9cea..ca2813a 100644 --- a/src/fortran/mooney_rivlin_cellml.F90 +++ b/src/fortran/mooney_rivlin_cellml.F90 @@ -1,678 +1,644 @@ !> Main program -PROGRAM MOONEYRIVLININCELLMLEXAMPLE +PROGRAM MooneyRivlinInCellMLExample USE OpenCMISS - USE OpenCMISS_Iron -#ifndef NOMPIMOD +#ifdef WITH_F08_MPI + USE MPI_F08 +#elif WITH_F90_MPI USE MPI #endif -#ifdef WIN32 - USE IFQWIN -#endif - IMPLICIT NONE -#ifdef NOMPIMOD +#ifdef WITH_F77_MPI #include "mpif.h" #endif - !Test program parameters - -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - INTEGER(CMISSIntg) :: NUMBER_OF_ARGUMENTS,ARGUMENT_LENGTH,STATUS - CHARACTER(LEN=255) :: COMMAND_ARGUMENT!,Filename -! INTEGER(CMISSIntg), PARAMETER :: NumberOfElementsInEachDirection=10 - INTEGER(CMISSIntg), PARAMETER :: DependentFieldAutoCreate=1 ! 1=yes 0=no -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - + INTEGER(OC_Intg), PARAMETER :: DEPENDENT_FIELD_AUTO_CREATE=1 ! 1=yes 0=no - REAL(CMISSRP), PARAMETER :: HEIGHT=1.0_CMISSRP - REAL(CMISSRP), PARAMETER :: WIDTH=1.0_CMISSRP - REAL(CMISSRP), PARAMETER :: LENGTH=1.0_CMISSRP - - INTEGER(CMISSIntg), PARAMETER :: CoordinateSystemUserNumber=1 - INTEGER(CMISSIntg), PARAMETER :: NumberOfSpatialCoordinates=3 - INTEGER(CMISSIntg), PARAMETER :: RegionUserNumber=1 - INTEGER(CMISSIntg), PARAMETER :: QuadraticBasisUserNumber=1 - INTEGER(CMISSIntg), PARAMETER :: LinearBasisUserNumber=2 - INTEGER(CMISSIntg), PARAMETER :: GeneratedMeshUserNumber=1 - INTEGER(CMISSIntg), PARAMETER :: MeshUserNumber=1 - INTEGER(CMISSIntg), PARAMETER :: DecompositionUserNumber=1 - - INTEGER(CMISSIntg), PARAMETER :: NumberOfMeshDimensions=3 - INTEGER(CMISSIntg), PARAMETER :: NumberOfXiCoordinates=3 - INTEGER(CMISSIntg), PARAMETER :: NumberOfMeshComponents=2 - INTEGER(CMISSIntg), PARAMETER :: QuadraticMeshComponentNumber=1 - INTEGER(CMISSIntg), PARAMETER :: LinearMeshComponentNumber=2 - - INTEGER(CMISSIntg), PARAMETER :: FieldGeometryUserNumber=1 - INTEGER(CMISSIntg), PARAMETER :: FieldGeometryNumberOfVariables=1 - INTEGER(CMISSIntg), PARAMETER :: FieldGeometryNumberOfComponents=3 - - INTEGER(CMISSIntg), PARAMETER :: FieldFibreUserNumber=2 - INTEGER(CMISSIntg), PARAMETER :: FieldFibreNumberOfVariables=1 - INTEGER(CMISSIntg), PARAMETER :: FieldFibreNumberOfComponents=3 - - INTEGER(CMISSIntg), PARAMETER :: FieldMaterialUserNumber=3 - INTEGER(CMISSIntg), PARAMETER :: FieldMaterialNumberOfVariables=1 - INTEGER(CMISSIntg), PARAMETER :: FieldMaterialNumberOfComponents=2 - - INTEGER(CMISSIntg), PARAMETER :: FieldDependentUserNumber=4 - INTEGER(CMISSIntg), PARAMETER :: FieldDependentNumberOfVariables=4 - INTEGER(CMISSIntg), PARAMETER :: FieldDependentNumberOfComponentsDisplPress=4 - INTEGER(CMISSIntg), PARAMETER :: FieldDependentNumberOfComponentsStressStrain=6 - - INTEGER(CMISSIntg), PARAMETER :: EquationSetUserNumber=1 - INTEGER(CMISSIntg), PARAMETER :: EquationsSetFieldUserNumber=5 - INTEGER(CMISSIntg), PARAMETER :: ProblemUserNumber=1 - - INTEGER(CMISSIntg), PARAMETER :: NumberOfGaussPoints=3 - - INTEGER(CMISSIntg), PARAMETER :: CellMLUserNumber=11 - INTEGER(CMISSIntg), PARAMETER :: CellMLModelsFieldUserNumber=12 -! State field is not required! -! INTEGER(CMISSIntg), PARAMETER :: CellMLStateFieldUserNumber=13 - INTEGER(CMISSIntg), PARAMETER :: CellMLIntermediateFieldUserNumber=14 - INTEGER(CMISSIntg), PARAMETER :: CellMLParametersFieldUserNumber=15 + REAL(OC_RP), PARAMETER :: HEIGHT=1.0_OC_RP + REAL(OC_RP), PARAMETER :: WIDTH=1.0_OC_RP + REAL(OC_RP), PARAMETER :: LENGTH=1.0_OC_RP + + INTEGER(OC_Intg), PARAMETER :: CONTEXT_USER_NUMBER=1 + INTEGER(OC_Intg), PARAMETER :: COORDINATE_SYSTEM_USER_NUMBER=1 + INTEGER(OC_Intg), PARAMETER :: NUMBER_OF_SPATIAL_COORDINATES=3 + INTEGER(OC_Intg), PARAMETER :: REGION_USER_NUMBER=1 + INTEGER(OC_Intg), PARAMETER :: QUADRATIC_BASIS_USER_NUMBER=1 + INTEGER(OC_Intg), PARAMETER :: LINEAR_BASIS_USER_NUMBER=2 + INTEGER(OC_Intg), PARAMETER :: GENERATED_MESH_USER_NUMBER=1 + INTEGER(OC_Intg), PARAMETER :: MESH_USER_NUMBER=1 + INTEGER(OC_Intg), PARAMETER :: DECOMPOSITION_USER_NUMBER=1 + INTEGER(OC_Intg), PARAMETER :: DECOMPOSER_USER_NUMBER=1 + + INTEGER(OC_Intg), PARAMETER :: NUMBER_OF_XI_COORDINATES=3 + INTEGER(OC_Intg), PARAMETER :: QUADRATIC_MESH_COMPONENT_NUMBER=1 + INTEGER(OC_Intg), PARAMETER :: LINEAR_MESH_COMPONENT_NUMBER=2 + + INTEGER(OC_Intg), PARAMETER :: FIELD_GEOMETRY_USER_NUMBER=1 + INTEGER(OC_Intg), PARAMETER :: FIELD_GEOMETRY_NUMBER_OF_VARIABLES=1 + INTEGER(OC_Intg), PARAMETER :: FIELD_GEOMETRY_NUMBER_OF_COMPONENTS=3 + + INTEGER(OC_Intg), PARAMETER :: FIELD_FIBRE_USER_NUMBER=2 + INTEGER(OC_Intg), PARAMETER :: FIELD_FIBRE_NUMBER_OF_VARIABLES=1 + INTEGER(OC_Intg), PARAMETER :: FIELD_FIBRE_NUMBER_OF_COMPONENTS=3 + + INTEGER(OC_Intg), PARAMETER :: FIELD_MATERIAL_USER_NUMBER=3 + INTEGER(OC_Intg), PARAMETER :: FIELD_MATERIAL_NUMBER_OF_VARIABLES=1 + INTEGER(OC_Intg), PARAMETER :: FIELD_MATERIAL_NUMBER_OF_COMPONENTS=2 + + INTEGER(OC_Intg), PARAMETER :: FIELD_DEPENDENT_USER_NUMBER=4 + INTEGER(OC_Intg), PARAMETER :: FIELD_DEPENDENT_NUMBER_OF_VARIABLES=4 + INTEGER(OC_Intg), PARAMETER :: FIELD_DEPENDENT_NUMBER_OF_COMPONENTS_DISPL_PRESS=4 + INTEGER(OC_Intg), PARAMETER :: FIELD_DEPENDENT_NUMBER_OF_COMPONENTS_STRESS_STRAIN=6 + + INTEGER(OC_Intg), PARAMETER :: EQUATIONS_SET_USER_NUMBER=1 + INTEGER(OC_Intg), PARAMETER :: EQUATIONS_SET_FIELD_USER_NUMBER=5 + INTEGER(OC_Intg), PARAMETER :: PROBLEM_USER_NUMBER=1 + + INTEGER(OC_Intg), PARAMETER :: NUMBER_OF_GAUSS_POINTS=3 + + INTEGER(OC_Intg), PARAMETER :: CELLML_USER_NUMBER=11 + INTEGER(OC_Intg), PARAMETER :: CELLML_MODELS_FIELD_USER_NUMBER=12 + INTEGER(OC_Intg), PARAMETER :: CELLML_INTERMEDIATE_FIELD_USER_NUMBER=14 + INTEGER(OC_Intg), PARAMETER :: CELLML_PARAMETERS_FIELD_USER_NUMBER=15 !Program types - !Program variables - LOGICAL :: directory_exists = .FALSE. - - INTEGER(CMISSIntg) :: NumberGlobalXElements,NumberGlobalYElements,NumberGlobalZElements - INTEGER(CMISSIntg) :: MPI_IERROR - INTEGER(CMISSIntg) :: EquationsSetIndex - INTEGER(CMISSIntg) :: NumberOfComputationalNodes,NumberOfDomains,ComputationalNodeNumber - - INTEGER(CMISSIntg) :: NodeNumber,NodeDomain,node_idx - INTEGER(CMISSIntg),ALLOCATABLE :: BottomSurfaceNodes(:) - INTEGER(CMISSIntg),ALLOCATABLE :: LeftSurfaceNodes(:) - INTEGER(CMISSIntg),ALLOCATABLE :: RightSurfaceNodes(:) - INTEGER(CMISSIntg),ALLOCATABLE :: FrontSurfaceNodes(:) - INTEGER(CMISSIntg) :: BottomNormalXi,LeftNormalXi,RightNormalXi,FrontNormalXi - - INTEGER(CMISSIntg) :: DependentVariableTypes(4) + INTEGER(OC_Intg) :: numberOfArguments,argumentLength,status + CHARACTER(LEN=255) :: commandArgument + LOGICAL :: directoryExists = .FALSE. + + INTEGER(OC_Intg) :: numberOfGlobalXElements,numberOfGlobalYElements,numberOfGlobalZElements + INTEGER(OC_Intg) :: mpiIError + INTEGER(OC_Intg) :: decompositionIndex,equationsSetIndex + INTEGER(OC_Intg) :: numberOfComputationalNodes,computationalNodeNumber + + INTEGER(OC_Intg) :: nodeNumber,nodeDomain,nodeIdx + INTEGER(OC_Intg), ALLOCATABLE :: bottomSurfaceNodes(:) + INTEGER(OC_Intg), ALLOCATABLE :: leftSurfaceNodes(:) + INTEGER(OC_Intg), ALLOCATABLE :: rightSurfaceNodes(:) + INTEGER(OC_Intg), ALLOCATABLE :: frontSurfaceNodes(:) + INTEGER(OC_Intg) :: bottomNormalXi,leftNormalXi,rightNormalXi,frontNormalXi + + INTEGER(OC_Intg) :: dependentVariableTypes(4) - INTEGER(CMISSIntg) :: MooneyRivlinModelIndex - INTEGER(CMISSIntg) :: CellMLIndex + INTEGER(OC_Intg) :: mooneyRivlinModelIndex + INTEGER(OC_Intg) :: cellMLIndex - !CMISS variables - TYPE(cmfe_BasisType) :: QuadraticBasis, LinearBasis, Basis(2) - TYPE(cmfe_BoundaryConditionsType) :: BoundaryConditions - TYPE(cmfe_CoordinateSystemType) :: CoordinateSystem, WorldCoordinateSystem - TYPE(cmfe_GeneratedMeshType) :: GeneratedMesh - TYPE(cmfe_MeshType) :: Mesh - TYPE(cmfe_DecompositionType) :: Decomposition - TYPE(cmfe_EquationsType) :: Equations - TYPE(cmfe_EquationsSetType) :: EquationsSet - TYPE(cmfe_FieldType) :: GeometricField,FibreField,DependentField,EquationsSetField - TYPE(cmfe_FieldType) :: MaterialField - TYPE(cmfe_FieldsType) :: Fields - TYPE(cmfe_ProblemType) :: Problem - TYPE(cmfe_RegionType) :: Region,WorldRegion - TYPE(cmfe_SolverType) :: Solver,LinearSolver - TYPE(cmfe_SolverEquationsType) :: SolverEquations - TYPE(cmfe_ControlLoopType) :: ControlLoop - - TYPE(cmfe_CellMLType) :: CellML - TYPE(cmfe_CellMLEquationsType) :: CellMLEquations - TYPE(cmfe_FieldType) :: CellMLModelsField - TYPE(cmfe_FieldType) :: CellMLIntermediateField,CellMLParametersField !,CellMLStateField !SourceField - TYPE(cmfe_SolverType) :: CellMLSolver - -#ifdef WIN32 - !Quickwin type - LOGICAL :: QUICKWIN_STATUS=.FALSE. - TYPE(WINDOWCONFIG) :: QUICKWIN_WINDOW_CONFIG -#endif + TYPE(OC_BasisType) :: linearBasis,quadraticBasis + TYPE(OC_BoundaryConditionsType) :: boundaryConditions + TYPE(OC_CellMLType) :: cellML + TYPE(OC_CellMLEquationsType) :: cellMLEquations + TYPE(OC_ComputationEnvironmentType) :: computationEnvironment + TYPE(OC_ContextType) :: context + TYPE(OC_ControlLoopType) :: controlLoop + TYPE(OC_CoordinateSystemType) :: coordinateSystem + TYPE(OC_DecompositionType) :: decomposition + TYPE(OC_DecomposerType) :: decomposer + TYPE(OC_EquationsType) :: equations + TYPE(OC_EquationsSetType) :: equationsSet + TYPE(OC_FieldType) :: dependentField,equationsSetField,fibreField,geometricField,materialsField + TYPE(OC_FieldType) :: cellMLIntermediateField,cellMLModelsField,cellMLParametersField + TYPE(OC_FieldsType) :: fields + TYPE(OC_GeneratedMeshType) :: generatedMesh + TYPE(OC_MeshType) :: mesh + TYPE(OC_ProblemType) :: problem + TYPE(OC_RegionType) :: region,worldRegion + TYPE(OC_SolverType) :: linearSolver,solver + TYPE(OC_SolverType) :: cellMLSolver + TYPE(OC_SolverEquationsType) :: solverEquations + TYPE(OC_WorkGroupType) :: worldWorkGroup !Generic CMISS variables - INTEGER(CMISSIntg) :: Err - -#ifdef WIN32 - !Initialise QuickWin - QUICKWIN_WINDOW_CONFIG%TITLE="General Output" !Window title - QUICKWIN_WINDOW_CONFIG%NUMTEXTROWS=-1 !Max possible number of rows - QUICKWIN_WINDOW_CONFIG%MODE=QWIN$SCROLLDOWN - !Set the window parameters - QUICKWIN_STATUS=SETWINDOWCONFIG(QUICKWIN_WINDOW_CONFIG) - !If attempt fails set with system estimated values - IF(.NOT.QUICKWIN_STATUS) QUICKWIN_STATUS=SETWINDOWCONFIG(QUICKWIN_WINDOW_CONFIG) -#endif - - -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + INTEGER(OC_Intg) :: err !Get the command arguments - NUMBER_OF_ARGUMENTS = COMMAND_ARGUMENT_COUNT() - IF(NUMBER_OF_ARGUMENTS == 3) THEN - CALL GET_COMMAND_ARGUMENT(1,COMMAND_ARGUMENT,ARGUMENT_LENGTH,STATUS) - IF(STATUS>0) CALL HANDLE_ERROR("Error for command argument 1.") - READ(COMMAND_ARGUMENT(1:ARGUMENT_LENGTH),*) NumberGlobalXElements - IF(NumberGlobalXElements<=0) CALL HANDLE_ERROR("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.") - READ(COMMAND_ARGUMENT(1:ARGUMENT_LENGTH),*) NumberGlobalYElements - IF(NumberGlobalYElements<=0) CALL HANDLE_ERROR("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.") - READ(COMMAND_ARGUMENT(1:ARGUMENT_LENGTH),*) NumberGlobalZElements - IF(NumberGlobalZElements<0) CALL HANDLE_ERROR("Invalid number of Z elements.") + numberOfArguments = COMMAND_ARGUMENT_COUNT() + IF(numberOfArguments == 3) THEN + CALL GET_COMMAND_ARGUMENT(1,commandArgument,argumentLength,status) + IF(status>0) CALL HandleError("Error for command argument 1.") + READ(commandArgument(1:argumentLength),*) numberOfGlobalXElements + IF(numberOfGlobalXElements<=0) CALL HandleError("Invalid number of X elements.") + CALL GET_COMMAND_ARGUMENT(2,commandArgument,argumentLength,status) + IF(status>0) CALL HandleError("Error for command argument 2.") + READ(commandArgument(1:argumentLength),*) numberOfGlobalYElements + IF(numberOfGlobalYElements<=0) CALL HandleError("Invalid number of Y elements.") + CALL GET_COMMAND_ARGUMENT(3,commandArgument,argumentLength,status) + IF(status>0) CALL HandleError("Error for command argument 3.") + READ(commandArgument(1:argumentLength),*) numberOfGlobalZElements + IF(numberOfGlobalZElements<0) CALL HandleError("Invalid number of Z elements.") ELSE - NumberGlobalXElements=1 - NumberGlobalYElements=1 - NumberGlobalZElements=1 + numberOfGlobalXElements=1 + numberOfGlobalYElements=1 + numberOfGlobalZElements=1 ENDIF -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - - !Intialise cmiss - CALL cmfe_Initialise(WorldCoordinateSystem,WorldRegion,Err) - - CALL cmfe_ErrorHandlingModeSet(CMFE_ERRORS_TRAP_ERROR,Err) + !Intialise OpenCMISS + CALL OC_Initialise(err) + CALL OC_ErrorHandlingModeSet(OC_ERRORS_TRAP_ERROR,err) + !Set all diganostic levels on for testing + !CALL OC_DiagnosticsSetOn(OC_FROM_DIAG_TYPE,[1,2,3,4,5],"Diagnostics",["Problem_FiniteElementCalculate"],err) + !Create a context + CALL OC_Context_Initialise(context,err) + CALL OC_Context_Create(CONTEXT_USER_NUMBER,context,err) + CALL OC_Region_Initialise(worldRegion,err) + CALL OC_Context_WorldRegionGet(context,worldRegion,err) + CALL OC_Context_RandomSeedsSet(context,9999,err) WRITE(*,'(A)') "Program starting." - !Set all diganostic levels on for testing -! CALL cmfe_DiagnosticsSetOn(CMFE_FROM_DIAG_TYPE,[1,2,3,4,5],"Diagnostics",["PROBLEM_FINITE_ELEMENT_CALCULATE"],Err) - !Get the number of computational nodes and this computational node number - CALL cmfe_ComputationalNumberOfNodesGet(NumberOfComputationalNodes,Err) - CALL cmfe_ComputationalNodeNumberGet(ComputationalNodeNumber,Err) - -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - - NumberOfDomains=NumberOfComputationalNodes + CALL OC_ComputationEnvironment_Initialise(computationEnvironment,err) + CALL OC_Context_ComputationEnvironmentGet(context,computationEnvironment,err) + + CALL OC_WorkGroup_Initialise(worldWorkGroup,err) + CALL OC_ComputationEnvironment_WorldWorkGroupGet(computationEnvironment,worldWorkGroup,err) + CALL OC_WorkGroup_NumberOfGroupNodesGet(worldWorkGroup,numberOfComputationalNodes,err) + CALL OC_WorkGroup_GroupNodeNumberGet(worldWorkGroup,computationalNodeNumber,err) !Broadcast the number of elements in the X,Y and Z directions and the number of partitions to the other computational 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) - CALL MPI_BCAST(NumberOfDomains,1,MPI_INTEGER,0,MPI_COMM_WORLD,MPI_IERROR) + CALL MPI_Bcast(numberOfGlobalXElements,1,MPI_INTEGER,0,MPI_COMM_WORLD,mpiIError) + CALL MPI_Bcast(numberOfGlobalYElements,1,MPI_INTEGER,0,MPI_COMM_WORLD,mpiIError) + CALL MPI_Bcast(numberOfGlobalZElements,1,MPI_INTEGER,0,MPI_COMM_WORLD,mpiIError) !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_TypeSet(CoordinateSystem,CMFE_COORDINATE_RECTANGULAR_CARTESIAN_TYPE,Err) - CALL cmfe_CoordinateSystem_DimensionSet(CoordinateSystem,NumberOfSpatialCoordinates,Err) - CALL cmfe_CoordinateSystem_OriginSet(CoordinateSystem,[0.0_CMISSRP,0.0_CMISSRP,0.0_CMISSRP],Err) - CALL cmfe_CoordinateSystem_CreateFinish(CoordinateSystem,Err) + CALL OC_CoordinateSystem_Initialise(coordinateSystem,err) + CALL OC_CoordinateSystem_CreateStart(COORDINATE_SYSTEM_USER_NUMBER,context,coordinateSystem,err) + CALL OC_CoordinateSystem_TypeSet(coordinateSystem,OC_COORDINATE_RECTANGULAR_CARTESIAN_TYPE,err) + CALL OC_CoordinateSystem_DimensionSet(coordinateSystem,NUMBER_OF_SPATIAL_COORDINATES,err) + CALL OC_CoordinateSystem_OriginSet(coordinateSystem,[0.0_OC_RP,0.0_OC_RP,0.0_OC_RP],err) + CALL OC_CoordinateSystem_CreateFinish(coordinateSystem,err) !Create a region and assign the CS to the region - CALL cmfe_Region_Initialise(Region,Err) - CALL cmfe_Region_CreateStart(RegionUserNumber,WorldRegion,Region,Err) - CALL cmfe_Region_LabelSet(Region,"Region",Err) - CALL cmfe_Region_CoordinateSystemSet(Region,CoordinateSystem,Err) - CALL cmfe_Region_CreateFinish(Region,Err) + CALL OC_Region_Initialise(region,err) + CALL OC_Region_CreateStart(REGION_USER_NUMBER,worldRegion,region,err) + CALL OC_Region_LabelSet(region,"Region",err) + CALL OC_Region_CoordinateSystemSet(region,coordinateSystem,err) + CALL OC_Region_CreateFinish(region,err) !Define basis functions - tri-Quadratic Lagrange and tri-Linear Lagrange - CALL cmfe_Basis_Initialise(QuadraticBasis,Err) - CALL cmfe_Basis_CreateStart(QuadraticBasisUserNumber,QuadraticBasis,Err) - CALL cmfe_Basis_TypeSet(QuadraticBasis,CMFE_BASIS_LAGRANGE_HERMITE_TP_TYPE,Err) - CALL cmfe_Basis_NumberOfXiSet(QuadraticBasis,NumberOfXiCoordinates,Err) - CALL cmfe_Basis_InterpolationXiSet(QuadraticBasis,[CMFE_BASIS_QUADRATIC_LAGRANGE_INTERPOLATION, & - & CMFE_BASIS_QUADRATIC_LAGRANGE_INTERPOLATION,CMFE_BASIS_QUADRATIC_LAGRANGE_INTERPOLATION],Err) - CALL cmfe_Basis_QuadratureNumberOfGaussXiSet(QuadraticBasis, & - & [NumberOfGaussPoints,NumberOfGaussPoints,NumberOfGaussPoints],Err) - CALL cmfe_Basis_CreateFinish(QuadraticBasis,Err) - - CALL cmfe_Basis_Initialise(LinearBasis,Err) - CALL cmfe_Basis_CreateStart(LinearBasisUserNumber,LinearBasis,Err) - CALL cmfe_Basis_TypeSet(LinearBasis,CMFE_BASIS_LAGRANGE_HERMITE_TP_TYPE,Err) - CALL cmfe_Basis_NumberOfXiSet(LinearBasis,NumberOfXiCoordinates,Err) - CALL cmfe_Basis_InterpolationXiSet(LinearBasis,[CMFE_BASIS_LINEAR_LAGRANGE_INTERPOLATION, & - & CMFE_BASIS_LINEAR_LAGRANGE_INTERPOLATION,CMFE_BASIS_LINEAR_LAGRANGE_INTERPOLATION],Err) - CALL cmfe_Basis_QuadratureNumberOfGaussXiSet(LinearBasis, & - & [NumberOfGaussPoints,NumberOfGaussPoints,NumberOfGaussPoints],Err) - CALL cmfe_Basis_CreateFinish(LinearBasis,Err) - - Basis(1)=QuadraticBasis - Basis(2)=LinearBasis + CALL OC_Basis_Initialise(quadraticBasis,err) + CALL OC_Basis_CreateStart(QUADRATIC_BASIS_USER_NUMBER,context,quadraticBasis,err) + CALL OC_Basis_TypeSet(quadraticBasis,OC_BASIS_LAGRANGE_HERMITE_TP_TYPE,err) + CALL OC_Basis_NumberOfXiSet(quadraticBasis,NUMBER_OF_XI_COORDINATES,err) + CALL OC_Basis_InterpolationXiSet(quadraticBasis,[OC_BASIS_QUADRATIC_LAGRANGE_INTERPOLATION, & + & OC_BASIS_QUADRATIC_LAGRANGE_INTERPOLATION,OC_BASIS_QUADRATIC_LAGRANGE_INTERPOLATION],err) + CALL OC_Basis_QuadratureNumberOfGaussXiSet(quadraticBasis, & + & [NUMBER_OF_GAUSS_POINTS,NUMBER_OF_GAUSS_POINTS,NUMBER_OF_GAUSS_POINTS],err) + CALL OC_Basis_CreateFinish(quadraticBasis,err) + + CALL OC_Basis_Initialise(linearBasis,err) + CALL OC_Basis_CreateStart(LINEAR_BASIS_USER_NUMBER,context,linearBasis,err) + CALL OC_Basis_TypeSet(linearBasis,OC_BASIS_LAGRANGE_HERMITE_TP_TYPE,err) + CALL OC_Basis_NumberOfXiSet(linearBasis,NUMBER_OF_XI_COORDINATES,err) + CALL OC_Basis_InterpolationXiSet(linearBasis,[OC_BASIS_LINEAR_LAGRANGE_INTERPOLATION, & + & OC_BASIS_LINEAR_LAGRANGE_INTERPOLATION,OC_BASIS_LINEAR_LAGRANGE_INTERPOLATION],err) + CALL OC_Basis_QuadratureNumberOfGaussXiSet(linearBasis, & + & [NUMBER_OF_GAUSS_POINTS,NUMBER_OF_GAUSS_POINTS,NUMBER_OF_GAUSS_POINTS],err) + CALL OC_Basis_CreateFinish(linearBasis,err) !Start the creation of a generated mesh in the region - CALL cmfe_Mesh_Initialise(Mesh,Err) - CALL cmfe_GeneratedMesh_Initialise(GeneratedMesh,Err) - CALL cmfe_GeneratedMesh_CreateStart(GeneratedMeshUserNumber,Region,GeneratedMesh,Err) + CALL OC_Mesh_Initialise(mesh,err) + CALL OC_GeneratedMesh_Initialise(generatedMesh,err) + CALL OC_GeneratedMesh_CreateStart(GENERATED_MESH_USER_NUMBER,region,generatedMesh,err) !Set up a regular x*y*z mesh - CALL cmfe_GeneratedMesh_TypeSet(GeneratedMesh,CMFE_GENERATED_MESH_REGULAR_MESH_TYPE,Err) - !Set the basis - Basis is now an array: [QuadraticBasis,LinearBasis] - CALL cmfe_GeneratedMesh_BasisSet(GeneratedMesh,Basis,Err) + CALL OC_GeneratedMesh_TypeSet(generatedMesh,OC_GENERATED_MESH_REGULAR_MESH_TYPE,err) + !Set the basis + CALL OC_GeneratedMesh_BasisSet(generatedMesh,[quadraticBasis,linearBasis],err) !Define the mesh on the region - CALL cmfe_GeneratedMesh_ExtentSet(GeneratedMesh,[LENGTH,WIDTH,HEIGHT],Err) - CALL cmfe_GeneratedMesh_NumberOfElementsSet(GeneratedMesh,[NumberGlobalXElements,NumberGlobalYElements, & - & NumberGlobalZElements],Err) + CALL OC_GeneratedMesh_ExtentSet(generatedMesh,[LENGTH,WIDTH,HEIGHT],err) + CALL OC_GeneratedMesh_NumberOfElementsSet(generatedMesh,[numberOfGlobalXElements,numberOfGlobalYElements, & + & numberOfGlobalZElements],err) !Finish the creation of the generated mesh in the region - CALL cmfe_GeneratedMesh_CreateFinish(GeneratedMesh,MeshUserNumber,Mesh,Err) + CALL OC_GeneratedMesh_CreateFinish(generatedMesh,MESH_USER_NUMBER,mesh,err) !Create a decomposition - CALL cmfe_Decomposition_Initialise(Decomposition,Err) - CALL cmfe_Decomposition_CreateStart(DecompositionUserNumber,Mesh,Decomposition,Err) - CALL cmfe_Decomposition_TypeSet(Decomposition,CMFE_DECOMPOSITION_CALCULATED_TYPE,Err) - CALL cmfe_Decomposition_NumberOfDomainsSet(Decomposition,NumberOfDomains,Err) - CALL cmfe_Decomposition_CalculateFacesSet(Decomposition,.TRUE.,Err) - CALL cmfe_Decomposition_CreateFinish(Decomposition,Err) - + CALL OC_Decomposition_Initialise(decomposition,err) + CALL OC_Decomposition_CreateStart(DECOMPOSITION_USER_NUMBER,mesh,decomposition,err) + CALL OC_Decomposition_CalculateFacesSet(decomposition,.TRUE.,err) + CALL OC_Decomposition_CreateFinish(decomposition,err) + + !Decompose + CALL OC_Decomposer_Initialise(decomposer,err) + CALL OC_Decomposer_CreateStart(DECOMPOSER_USER_NUMBER,region,worldWorkGroup,decomposer,err) + !Add in the decomposition + CALL OC_Decomposer_DecompositionAdd(decomposer,decomposition,decompositionIndex,err) + !Finish the decomposer + CALL OC_Decomposer_CreateFinish(decomposer,err) + !Create a field to put the geometry (default is geometry) - quadratic interpolation - CALL cmfe_Field_Initialise(GeometricField,Err) - CALL cmfe_Field_CreateStart(FieldGeometryUserNumber,Region,GeometricField,Err) - CALL cmfe_Field_MeshDecompositionSet(GeometricField,Decomposition,Err) - CALL cmfe_Field_TypeSet(GeometricField,CMFE_FIELD_GEOMETRIC_TYPE,Err) - CALL cmfe_Field_NumberOfVariablesSet(GeometricField,FieldGeometryNumberOfVariables,Err) - CALL cmfe_Field_VariableLabelSet(GeometricField,CMFE_FIELD_U_VARIABLE_TYPE,"Geometry",Err) - CALL cmfe_Field_NumberOfComponentsSet(GeometricField,CMFE_FIELD_U_VARIABLE_TYPE,FieldGeometryNumberOfComponents,Err) - CALL cmfe_Field_ComponentMeshComponentSet(GeometricField,CMFE_FIELD_U_VARIABLE_TYPE,1,QuadraticMeshComponentNumber,Err) - CALL cmfe_Field_ComponentMeshComponentSet(GeometricField,CMFE_FIELD_U_VARIABLE_TYPE,2,QuadraticMeshComponentNumber,Err) - CALL cmfe_Field_ComponentMeshComponentSet(GeometricField,CMFE_FIELD_U_VARIABLE_TYPE,3,QuadraticMeshComponentNumber,Err) - CALL cmfe_Field_CreateFinish(GeometricField,Err) + CALL OC_Field_Initialise(geometricField,err) + CALL OC_Field_CreateStart(FIELD_GEOMETRY_USER_NUMBER,region,geometricField,err) + CALL OC_Field_DecompositionSet(geometricField,decomposition,err) + CALL OC_Field_TypeSet(geometricField,OC_FIELD_GEOMETRIC_TYPE,err) + CALL OC_Field_NumberOfVariablesSet(geometricField,FIELD_GEOMETRY_NUMBER_OF_VARIABLES,err) + CALL OC_Field_VariableLabelSet(geometricField,OC_FIELD_U_VARIABLE_TYPE,"Geometry",err) + CALL OC_Field_NumberOfComponentsSet(geometricField,OC_FIELD_U_VARIABLE_TYPE,FIELD_GEOMETRY_NUMBER_OF_COMPONENTS,err) + CALL OC_Field_ComponentMeshComponentSet(geometricField,OC_FIELD_U_VARIABLE_TYPE,1,QUADRATIC_MESH_COMPONENT_NUMBER,err) + CALL OC_Field_ComponentMeshComponentSet(geometricField,OC_FIELD_U_VARIABLE_TYPE,2,QUADRATIC_MESH_COMPONENT_NUMBER,err) + CALL OC_Field_ComponentMeshComponentSet(geometricField,OC_FIELD_U_VARIABLE_TYPE,3,QUADRATIC_MESH_COMPONENT_NUMBER,err) + CALL OC_Field_CreateFinish(geometricField,err) !Update the geometric field parameters - CALL cmfe_GeneratedMesh_GeometricParametersCalculate(GeneratedMesh,GeometricField,Err) + CALL OC_GeneratedMesh_GeometricParametersCalculate(generatedMesh,geometricField,err) !Create a fibre field and attach it to the geometric field - linear interpolation - CALL cmfe_Field_Initialise(FibreField,Err) - CALL cmfe_Field_CreateStart(FieldFibreUserNumber,Region,FibreField,Err) - CALL cmfe_Field_TypeSet(FibreField,CMFE_FIELD_FIBRE_TYPE,Err) - CALL cmfe_Field_MeshDecompositionSet(FibreField,Decomposition,Err) - CALL cmfe_Field_GeometricFieldSet(FibreField,GeometricField,Err) - CALL cmfe_Field_NumberOfVariablesSet(FibreField,FieldFibreNumberOfVariables,Err) - CALL cmfe_Field_VariableLabelSet(FibreField,CMFE_FIELD_U_VARIABLE_TYPE,"Fibre",Err) - CALL cmfe_Field_NumberOfComponentsSet(FibreField,CMFE_FIELD_U_VARIABLE_TYPE,FieldFibreNumberOfComponents,Err) - !LinearMeshComponentNumber QuadraticMeshComponentNumber ??? - CALL cmfe_Field_ComponentMeshComponentSet(FibreField,CMFE_FIELD_U_VARIABLE_TYPE,1,LinearMeshComponentNumber,Err) - CALL cmfe_Field_ComponentMeshComponentSet(FibreField,CMFE_FIELD_U_VARIABLE_TYPE,2,LinearMeshComponentNumber,Err) - CALL cmfe_Field_ComponentMeshComponentSet(FibreField,CMFE_FIELD_U_VARIABLE_TYPE,3,LinearMeshComponentNumber,Err) - CALL cmfe_Field_CreateFinish(FibreField,Err) + CALL OC_Field_Initialise(fibreField,err) + CALL OC_Field_CreateStart(FIELD_FIBRE_USER_NUMBER,region,fibreField,err) + CALL OC_Field_TypeSet(fibreField,OC_FIELD_FIBRE_TYPE,err) + CALL OC_Field_DecompositionSet(fibreField,decomposition,err) + CALL OC_Field_geometricFieldSet(fibreField,geometricField,err) + CALL OC_Field_NumberOfVariablesSet(fibreField,FIELD_FIBRE_NUMBER_OF_VARIABLES,err) + CALL OC_Field_VariableLabelSet(fibreField,OC_FIELD_U_VARIABLE_TYPE,"Fibre",err) + CALL OC_Field_NumberOfComponentsSet(fibreField,OC_FIELD_U_VARIABLE_TYPE,FIELD_FIBRE_NUMBER_OF_COMPONENTS,err) + CALL OC_Field_ComponentMeshComponentSet(fibreField,OC_FIELD_U_VARIABLE_TYPE,1,LINEAR_MESH_COMPONENT_NUMBER,err) + CALL OC_Field_ComponentMeshComponentSet(fibreField,OC_FIELD_U_VARIABLE_TYPE,2,LINEAR_MESH_COMPONENT_NUMBER,err) + CALL OC_Field_ComponentMeshComponentSet(fibreField,OC_FIELD_U_VARIABLE_TYPE,3,LINEAR_MESH_COMPONENT_NUMBER,err) + CALL OC_Field_CreateFinish(fibreField,err) !Create a material field and attach it to the geometric field - quadratic interpolation - CALL cmfe_Field_Initialise(MaterialField,Err) - CALL cmfe_Field_CreateStart(FieldMaterialUserNumber,Region,MaterialField,Err) - CALL cmfe_Field_TypeSet(MaterialField,CMFE_FIELD_MATERIAL_TYPE,Err) - CALL cmfe_Field_MeshDecompositionSet(MaterialField,Decomposition,Err) - CALL cmfe_Field_GeometricFieldSet(MaterialField,GeometricField,Err) - CALL cmfe_Field_NumberOfVariablesSet(MaterialField,FieldMaterialNumberOfVariables,Err) - CALL cmfe_Field_NumberOfComponentsSet(MaterialField,CMFE_FIELD_U_VARIABLE_TYPE,FieldMaterialNumberOfComponents,Err) - ! default is CMFE_FIELD_NODE_BASED_INTERPOLATION - CALL cmfe_Field_ComponentInterpolationSet(MaterialField,CMFE_FIELD_U_VARIABLE_TYPE,1,CMFE_FIELD_CONSTANT_INTERPOLATION,Err) - CALL cmfe_Field_ComponentInterpolationSet(MaterialField,CMFE_FIELD_U_VARIABLE_TYPE,2,CMFE_FIELD_CONSTANT_INTERPOLATION,Err) - ! not implemented yet!!! - ! CALL cmfe_Field_ComponentInterpolationSet(MaterialField,CMFE_FIELD_U_VARIABLE_TYPE,1,CMFE_FIELD_GAUSS_POINT_BASED_INTERPOLATION,Err) - ! CALL cmfe_Field_ComponentInterpolationSet(MaterialField,CMFE_FIELD_U_VARIABLE_TYPE,2,CMFE_FIELD_GAUSS_POINT_BASED_INTERPOLATION,Err) - CALL cmfe_Field_CreateFinish(MaterialField,Err) + CALL OC_Field_Initialise(materialsField,err) + CALL OC_Field_CreateStart(FIELD_MATERIAL_USER_NUMBER,region,materialsField,err) + CALL OC_Field_TypeSet(materialsField,OC_FIELD_MATERIAL_TYPE,err) + CALL OC_Field_DecompositionSet(materialsField,decomposition,err) + CALL OC_Field_geometricFieldSet(materialsField,geometricField,err) + CALL OC_Field_NumberOfVariablesSet(materialsField,FIELD_MATERIAL_NUMBER_OF_VARIABLES,err) + CALL OC_Field_NumberOfComponentsSet(materialsField,OC_FIELD_U_VARIABLE_TYPE,FIELD_MATERIAL_NUMBER_OF_COMPONENTS,err) + !Default is OC_FIELD_NODE_BASED_INTERPOLATION + CALL OC_Field_ComponentInterpolationSet(materialsField,OC_FIELD_U_VARIABLE_TYPE,1,OC_FIELD_CONSTANT_INTERPOLATION,err) + CALL OC_Field_ComponentInterpolationSet(materialsField,OC_FIELD_U_VARIABLE_TYPE,2,OC_FIELD_CONSTANT_INTERPOLATION,err) + !CALL OC_Field_ComponentInterpolationSet(materialsField,OC_FIELD_U_VARIABLE_TYPE,1, & + ! & OC_FIELD_GAUSS_POINT_BASED_INTERPOLATION,err) + !CALL OC_Field_ComponentInterpolationSet(materialsField,OC_FIELD_U_VARIABLE_TYPE,2, & + ! & OC_FIELD_GAUSS_POINT_BASED_INTERPOLATION,err) + CALL OC_Field_CreateFinish(materialsField,err) !Set Mooney-Rivlin constants c10 and c01 to 2.0 and 6.0 respectively. - CALL cmfe_Field_ComponentValuesInitialise(MaterialField,CMFE_FIELD_U_VARIABLE_TYPE,CMFE_FIELD_VALUES_SET_TYPE,1,2.0_CMISSRP,Err) - CALL cmfe_Field_ComponentValuesInitialise(MaterialField,CMFE_FIELD_U_VARIABLE_TYPE,CMFE_FIELD_VALUES_SET_TYPE,2,6.0_CMISSRP,Err) + CALL OC_Field_ComponentValuesInitialise(materialsField,OC_FIELD_U_VARIABLE_TYPE,OC_FIELD_VALUES_SET_TYPE,1,2.0_OC_RP,err) + CALL OC_Field_ComponentValuesInitialise(materialsField,OC_FIELD_U_VARIABLE_TYPE,OC_FIELD_VALUES_SET_TYPE,2,6.0_OC_RP,err) !Create the dependent field with 4 variables and the respective number of components ! 1 U_Var_Type 4 components: 3 displacement (quad interpol) + 1 pressure (lin interpol)) ! 2 DELUDELN_Var_Type 4 components: 3 displacement (quad interpol) + 1 pressure (lin interpol)) ! 3 U1_Var_Type 6 components: 6 independent components of the strain tensor (quad interpol) [independent] ! 4 U2_Var_Type 6 components: 6 independent components of the stress tensor (quad interpol) [dependent] - DependentVariableTypes = [CMFE_FIELD_U_VARIABLE_TYPE,CMFE_FIELD_DELUDELN_VARIABLE_TYPE, & - & CMFE_FIELD_U1_VARIABLE_TYPE,CMFE_FIELD_U2_VARIABLE_TYPE] - CALL cmfe_Field_Initialise(DependentField,Err) - IF(DependentFieldAutoCreate/=1) THEN - CALL cmfe_Field_CreateStart(FieldDependentUserNumber,Region,DependentField,Err) - CALL cmfe_Field_TypeSet(DependentField,CMFE_FIELD_GENERAL_TYPE,Err) - CALL cmfe_Field_MeshDecompositionSet(DependentField,Decomposition,Err) - CALL cmfe_Field_GeometricFieldSet(DependentField,GeometricField,Err) - CALL cmfe_Field_DependentTypeSet(DependentField,CMFE_FIELD_DEPENDENT_TYPE,Err) - CALL cmfe_Field_NumberOfVariablesSet(DependentField,FieldDependentNumberOfVariables,Err) - CALL cmfe_Field_VariableLabelSet(DependentField,CMFE_FIELD_U_VARIABLE_TYPE,"Dependent",Err) - CALL cmfe_Field_VariableTypesSet(DependentField,DependentVariableTypes,Err) - CALL cmfe_Field_NumberOfComponentsSet(DependentField,CMFE_FIELD_U_VARIABLE_TYPE,FieldDependentNumberOfComponentsDisplPress,Err) - CALL cmfe_Field_NumberOfComponentsSet(DependentField,CMFE_FIELD_DELUDELN_VARIABLE_TYPE, & - & FieldDependentNumberOfComponentsDisplPress,Err) - CALL cmfe_Field_NumberOfComponentsSet(DependentField,CMFE_FIELD_U1_VARIABLE_TYPE, & - & FieldDependentNumberOfComponentsStressStrain, & - & Err) - CALL cmfe_Field_NumberOfComponentsSet(DependentField,CMFE_FIELD_U2_VARIABLE_TYPE, & - & FieldDependentNumberOfComponentsStressStrain, & - & Err) - - ! set interpolation for the components of the field variables. + dependentVariableTypes = [OC_FIELD_U_VARIABLE_TYPE,OC_FIELD_DELUDELN_VARIABLE_TYPE, & + & OC_FIELD_U1_VARIABLE_TYPE,OC_FIELD_U2_VARIABLE_TYPE] + CALL OC_Field_Initialise(dependentField,err) + IF(DEPENDENT_FIELD_AUTO_CREATE/=1) THEN + CALL OC_Field_CreateStart(FIELD_DEPENDENT_USER_NUMBER,region,dependentField,err) + CALL OC_Field_TypeSet(dependentField,OC_FIELD_GENERAL_TYPE,err) + CALL OC_Field_DecompositionSet(dependentField,decomposition,err) + CALL OC_Field_geometricFieldSet(dependentField,geometricField,err) + CALL OC_Field_DependentTypeSet(dependentField,OC_FIELD_DEPENDENT_TYPE,err) + CALL OC_Field_NumberOfVariablesSet(dependentField,FIELD_DEPENDENT_NUMBER_OF_VARIABLES,err) + CALL OC_Field_VariableLabelSet(dependentField,OC_FIELD_U_VARIABLE_TYPE,"Dependent",err) + CALL OC_Field_VariableTypesSet(dependentField,dependentVariableTypes,err) + CALL OC_Field_NumberOfComponentsSet(dependentField,OC_FIELD_U_VARIABLE_TYPE, & + & FIELD_DEPENDENT_NUMBER_OF_COMPONENTS_DISPL_PRESS,err) + CALL OC_Field_NumberOfComponentsSet(dependentField,OC_FIELD_DELUDELN_VARIABLE_TYPE, & + & FIELD_DEPENDENT_NUMBER_OF_COMPONENTS_DISPL_PRESS,err) + CALL OC_Field_NumberOfComponentsSet(dependentField,OC_FIELD_U1_VARIABLE_TYPE, & + & FIELD_DEPENDENT_NUMBER_OF_COMPONENTS_STRESS_STRAIN,err) + CALL OC_Field_NumberOfComponentsSet(dependentField,OC_FIELD_U2_VARIABLE_TYPE, & + & FIELD_DEPENDENT_NUMBER_OF_COMPONENTS_STRESS_STRAIN,err) + + !Set interpolation for the components of the field variables. ! Default is Node Based Interpolation - so there is nothing to be done for U_Variable_Type and DelUDelN_Variable_Type - CALL cmfe_Field_ComponentInterpolationSet(DependentField,CMFE_FIELD_U1_VARIABLE_TYPE,1, & - & CMFE_FIELD_GAUSS_POINT_BASED_INTERPOLATION,Err) - CALL cmfe_Field_ComponentInterpolationSet(DependentField,CMFE_FIELD_U1_VARIABLE_TYPE,2, & - & CMFE_FIELD_GAUSS_POINT_BASED_INTERPOLATION,Err) - CALL cmfe_Field_ComponentInterpolationSet(DependentField,CMFE_FIELD_U1_VARIABLE_TYPE,3, & - & CMFE_FIELD_GAUSS_POINT_BASED_INTERPOLATION,Err) - CALL cmfe_Field_ComponentInterpolationSet(DependentField,CMFE_FIELD_U1_VARIABLE_TYPE,4, & - & CMFE_FIELD_GAUSS_POINT_BASED_INTERPOLATION,Err) - CALL cmfe_Field_ComponentInterpolationSet(DependentField,CMFE_FIELD_U1_VARIABLE_TYPE,5, & - & CMFE_FIELD_GAUSS_POINT_BASED_INTERPOLATION,Err) - CALL cmfe_Field_ComponentInterpolationSet(DependentField,CMFE_FIELD_U1_VARIABLE_TYPE,6, & - & CMFE_FIELD_GAUSS_POINT_BASED_INTERPOLATION,Err) - - CALL cmfe_Field_ComponentInterpolationSet(DependentField,CMFE_FIELD_U2_VARIABLE_TYPE,1, & - & CMFE_FIELD_GAUSS_POINT_BASED_INTERPOLATION,Err) - CALL cmfe_Field_ComponentInterpolationSet(DependentField,CMFE_FIELD_U2_VARIABLE_TYPE,2, & - & CMFE_FIELD_GAUSS_POINT_BASED_INTERPOLATION,Err) - CALL cmfe_Field_ComponentInterpolationSet(DependentField,CMFE_FIELD_U2_VARIABLE_TYPE,3, & - & CMFE_FIELD_GAUSS_POINT_BASED_INTERPOLATION,Err) - CALL cmfe_Field_ComponentInterpolationSet(DependentField,CMFE_FIELD_U2_VARIABLE_TYPE,4, & - & CMFE_FIELD_GAUSS_POINT_BASED_INTERPOLATION,Err) - CALL cmfe_Field_ComponentInterpolationSet(DependentField,CMFE_FIELD_U2_VARIABLE_TYPE,5, & - & CMFE_FIELD_GAUSS_POINT_BASED_INTERPOLATION,Err) - CALL cmfe_Field_ComponentInterpolationSet(DependentField,CMFE_FIELD_U2_VARIABLE_TYPE,6, & - & CMFE_FIELD_GAUSS_POINT_BASED_INTERPOLATION,Err) - - ! set the corresponding mesh component - CALL cmfe_Field_ComponentMeshComponentSet(DependentField,CMFE_FIELD_U_VARIABLE_TYPE,1,QuadraticMeshComponentNumber,Err) - CALL cmfe_Field_ComponentMeshComponentSet(DependentField,CMFE_FIELD_U_VARIABLE_TYPE,2,QuadraticMeshComponentNumber,Err) - CALL cmfe_Field_ComponentMeshComponentSet(DependentField,CMFE_FIELD_U_VARIABLE_TYPE,3,QuadraticMeshComponentNumber,Err) - CALL cmfe_Field_ComponentMeshComponentSet(DependentField,CMFE_FIELD_U_VARIABLE_TYPE,4,LinearMeshComponentNumber,Err) - - CALL cmfe_Field_ComponentMeshComponentSet(DependentField,CMFE_FIELD_DELUDELN_VARIABLE_TYPE,1,QuadraticMeshComponentNumber,Err) - CALL cmfe_Field_ComponentMeshComponentSet(DependentField,CMFE_FIELD_DELUDELN_VARIABLE_TYPE,2,QuadraticMeshComponentNumber,Err) - CALL cmfe_Field_ComponentMeshComponentSet(DependentField,CMFE_FIELD_DELUDELN_VARIABLE_TYPE,3,QuadraticMeshComponentNumber,Err) - CALL cmfe_Field_ComponentMeshComponentSet(DependentField,CMFE_FIELD_DELUDELN_VARIABLE_TYPE,4,LinearMeshComponentNumber,Err) - - CALL cmfe_Field_ComponentMeshComponentSet(DependentField,CMFE_FIELD_U1_VARIABLE_TYPE,1,QuadraticMeshComponentNumber,Err) - CALL cmfe_Field_ComponentMeshComponentSet(DependentField,CMFE_FIELD_U1_VARIABLE_TYPE,2,QuadraticMeshComponentNumber,Err) - CALL cmfe_Field_ComponentMeshComponentSet(DependentField,CMFE_FIELD_U1_VARIABLE_TYPE,3,QuadraticMeshComponentNumber,Err) - CALL cmfe_Field_ComponentMeshComponentSet(DependentField,CMFE_FIELD_U1_VARIABLE_TYPE,4,QuadraticMeshComponentNumber,Err) - CALL cmfe_Field_ComponentMeshComponentSet(DependentField,CMFE_FIELD_U1_VARIABLE_TYPE,5,QuadraticMeshComponentNumber,Err) - CALL cmfe_Field_ComponentMeshComponentSet(DependentField,CMFE_FIELD_U1_VARIABLE_TYPE,6,QuadraticMeshComponentNumber,Err) - - CALL cmfe_Field_ComponentMeshComponentSet(DependentField,CMFE_FIELD_U2_VARIABLE_TYPE,1,QuadraticMeshComponentNumber,Err) - CALL cmfe_Field_ComponentMeshComponentSet(DependentField,CMFE_FIELD_U2_VARIABLE_TYPE,2,QuadraticMeshComponentNumber,Err) - CALL cmfe_Field_ComponentMeshComponentSet(DependentField,CMFE_FIELD_U2_VARIABLE_TYPE,3,QuadraticMeshComponentNumber,Err) - CALL cmfe_Field_ComponentMeshComponentSet(DependentField,CMFE_FIELD_U2_VARIABLE_TYPE,4,QuadraticMeshComponentNumber,Err) - CALL cmfe_Field_ComponentMeshComponentSet(DependentField,CMFE_FIELD_U2_VARIABLE_TYPE,5,QuadraticMeshComponentNumber,Err) - CALL cmfe_Field_ComponentMeshComponentSet(DependentField,CMFE_FIELD_U2_VARIABLE_TYPE,6,QuadraticMeshComponentNumber,Err) - -! CALL cmfe_Field_ScalingTypeSet(DependentField,CMFE_FIELD_UNIT_SCALING,Err) - CALL cmfe_Field_CreateFinish(DependentField,Err) - ENDIF !DependentFieldAutoCreate + CALL OC_Field_ComponentInterpolationSet(dependentField,OC_FIELD_U1_VARIABLE_TYPE,1, & + & OC_FIELD_GAUSS_POINT_BASED_INTERPOLATION,err) + CALL OC_Field_ComponentInterpolationSet(dependentField,OC_FIELD_U1_VARIABLE_TYPE,2, & + & OC_FIELD_GAUSS_POINT_BASED_INTERPOLATION,err) + CALL OC_Field_ComponentInterpolationSet(dependentField,OC_FIELD_U1_VARIABLE_TYPE,3, & + & OC_FIELD_GAUSS_POINT_BASED_INTERPOLATION,err) + CALL OC_Field_ComponentInterpolationSet(dependentField,OC_FIELD_U1_VARIABLE_TYPE,4, & + & OC_FIELD_GAUSS_POINT_BASED_INTERPOLATION,err) + CALL OC_Field_ComponentInterpolationSet(dependentField,OC_FIELD_U1_VARIABLE_TYPE,5, & + & OC_FIELD_GAUSS_POINT_BASED_INTERPOLATION,err) + CALL OC_Field_ComponentInterpolationSet(dependentField,OC_FIELD_U1_VARIABLE_TYPE,6, & + & OC_FIELD_GAUSS_POINT_BASED_INTERPOLATION,err) + + CALL OC_Field_ComponentInterpolationSet(dependentField,OC_FIELD_U2_VARIABLE_TYPE,1, & + & OC_FIELD_GAUSS_POINT_BASED_INTERPOLATION,err) + CALL OC_Field_ComponentInterpolationSet(dependentField,OC_FIELD_U2_VARIABLE_TYPE,2, & + & OC_FIELD_GAUSS_POINT_BASED_INTERPOLATION,err) + CALL OC_Field_ComponentInterpolationSet(dependentField,OC_FIELD_U2_VARIABLE_TYPE,3, & + & OC_FIELD_GAUSS_POINT_BASED_INTERPOLATION,err) + CALL OC_Field_ComponentInterpolationSet(dependentField,OC_FIELD_U2_VARIABLE_TYPE,4, & + & OC_FIELD_GAUSS_POINT_BASED_INTERPOLATION,err) + CALL OC_Field_ComponentInterpolationSet(dependentField,OC_FIELD_U2_VARIABLE_TYPE,5, & + & OC_FIELD_GAUSS_POINT_BASED_INTERPOLATION,err) + CALL OC_Field_ComponentInterpolationSet(dependentField,OC_FIELD_U2_VARIABLE_TYPE,6, & + & OC_FIELD_GAUSS_POINT_BASED_INTERPOLATION,err) + + !Set the corresponding mesh component + CALL OC_Field_ComponentMeshComponentSet(dependentField,OC_FIELD_U_VARIABLE_TYPE,1,QUADRATIC_MESH_COMPONENT_NUMBER,err) + CALL OC_Field_ComponentMeshComponentSet(dependentField,OC_FIELD_U_VARIABLE_TYPE,2,QUADRATIC_MESH_COMPONENT_NUMBER,err) + CALL OC_Field_ComponentMeshComponentSet(dependentField,OC_FIELD_U_VARIABLE_TYPE,3,QUADRATIC_MESH_COMPONENT_NUMBER,err) + CALL OC_Field_ComponentMeshComponentSet(dependentField,OC_FIELD_U_VARIABLE_TYPE,4,LINEAR_MESH_COMPONENT_NUMBER,err) + + CALL OC_Field_ComponentMeshComponentSet(dependentField,OC_FIELD_DELUDELN_VARIABLE_TYPE,1,QUADRATIC_MESH_COMPONENT_NUMBER, & + & err) + CALL OC_Field_ComponentMeshComponentSet(dependentField,OC_FIELD_DELUDELN_VARIABLE_TYPE,2,QUADRATIC_MESH_COMPONENT_NUMBER, & + & err) + CALL OC_Field_ComponentMeshComponentSet(dependentField,OC_FIELD_DELUDELN_VARIABLE_TYPE,3,QUADRATIC_MESH_COMPONENT_NUMBER, & + & err) + CALL OC_Field_ComponentMeshComponentSet(dependentField,OC_FIELD_DELUDELN_VARIABLE_TYPE,4,LINEAR_MESH_COMPONENT_NUMBER, & + & err) + + CALL OC_Field_ComponentMeshComponentSet(dependentField,OC_FIELD_U1_VARIABLE_TYPE,1,QUADRATIC_MESH_COMPONENT_NUMBER,err) + CALL OC_Field_ComponentMeshComponentSet(dependentField,OC_FIELD_U1_VARIABLE_TYPE,2,QUADRATIC_MESH_COMPONENT_NUMBER,err) + CALL OC_Field_ComponentMeshComponentSet(dependentField,OC_FIELD_U1_VARIABLE_TYPE,3,QUADRATIC_MESH_COMPONENT_NUMBER,err) + CALL OC_Field_ComponentMeshComponentSet(dependentField,OC_FIELD_U1_VARIABLE_TYPE,4,QUADRATIC_MESH_COMPONENT_NUMBER,err) + CALL OC_Field_ComponentMeshComponentSet(dependentField,OC_FIELD_U1_VARIABLE_TYPE,5,QUADRATIC_MESH_COMPONENT_NUMBER,err) + CALL OC_Field_ComponentMeshComponentSet(dependentField,OC_FIELD_U1_VARIABLE_TYPE,6,QUADRATIC_MESH_COMPONENT_NUMBER,err) + + CALL OC_Field_ComponentMeshComponentSet(dependentField,OC_FIELD_U2_VARIABLE_TYPE,1,QUADRATIC_MESH_COMPONENT_NUMBER,err) + CALL OC_Field_ComponentMeshComponentSet(dependentField,OC_FIELD_U2_VARIABLE_TYPE,2,QUADRATIC_MESH_COMPONENT_NUMBER,err) + CALL OC_Field_ComponentMeshComponentSet(dependentField,OC_FIELD_U2_VARIABLE_TYPE,3,QUADRATIC_MESH_COMPONENT_NUMBER,err) + CALL OC_Field_ComponentMeshComponentSet(dependentField,OC_FIELD_U2_VARIABLE_TYPE,4,QUADRATIC_MESH_COMPONENT_NUMBER,err) + CALL OC_Field_ComponentMeshComponentSet(dependentField,OC_FIELD_U2_VARIABLE_TYPE,5,QUADRATIC_MESH_COMPONENT_NUMBER,err) + CALL OC_Field_ComponentMeshComponentSet(dependentField,OC_FIELD_U2_VARIABLE_TYPE,6,QUADRATIC_MESH_COMPONENT_NUMBER,err) + + !CALL OC_Field_ScalingTypeSet(dependentField,OC_FIELD_UNIT_SCALING,err) + CALL OC_Field_CreateFinish(dependentField,err) + ENDIF !DEPENDENT_FIELD_AUTO_CREATE !Create the equations_set - CALL cmfe_Field_Initialise(EquationsSetField,Err) - CALL cmfe_EquationsSet_Initialise(EquationsSet,Err) - CALL cmfe_EquationsSet_CreateStart(EquationSetUserNumber,Region,FibreField,[CMFE_EQUATIONS_SET_ELASTICITY_CLASS, & - & CMFE_EQUATIONS_SET_FINITE_ELASTICITY_TYPE,CMFE_EQUATIONS_SET_CONSTITUTIVE_LAW_IN_CELLML_EVALUATE_SUBTYPE], & - & EquationsSetFieldUserNumber,EquationsSetField,EquationsSet,Err) - CALL cmfe_EquationsSet_CreateFinish(EquationsSet,Err) - - CALL cmfe_EquationsSet_DependentCreateStart(EquationsSet,FieldDependentUserNumber,DependentField,Err) - IF(DependentFieldAutoCreate == 1) THEN - CALL cmfe_Field_VariableLabelSet(DependentField,CMFE_FIELD_U_VARIABLE_TYPE,"Dependent",Err) + CALL OC_Field_Initialise(equationsSetField,err) + CALL OC_EquationsSet_Initialise(equationsSet,err) + CALL OC_EquationsSet_CreateStart(EQUATIONS_SET_USER_NUMBER,region,fibreField,[OC_EQUATIONS_SET_ELASTICITY_CLASS, & + & OC_EQUATIONS_SET_FINITE_ELASTICITY_TYPE,OC_EQUATIONS_SET_CONSTITUTIVE_LAW_IN_CELLML_EVALUATE_SUBTYPE], & + & EQUATIONS_SET_FIELD_USER_NUMBER,equationsSetField,equationsSet,err) + CALL OC_EquationsSet_CreateFinish(equationsSet,err) + + CALL OC_EquationsSet_DependentCreateStart(equationsSet,FIELD_DEPENDENT_USER_NUMBER,dependentField,err) + IF(DEPENDENT_FIELD_AUTO_CREATE == 1) THEN + CALL OC_Field_VariableLabelSet(dependentField,OC_FIELD_U_VARIABLE_TYPE,"Dependent",err) ENDIF - CALL cmfe_EquationsSet_DependentCreateFinish(EquationsSet,Err) + CALL OC_EquationsSet_DependentCreateFinish(equationsSet,err) !Create the CellML environment - CALL cmfe_CellML_Initialise(CellML,Err) - CALL cmfe_CellML_CreateStart(CellMLUserNumber,Region,CellML,Err) + CALL OC_CellML_Initialise(cellML,err) + CALL OC_CellML_CreateStart(CELLML_USER_NUMBER,region,cellML,err) !Import a Mooney-Rivlin material law from a file - CALL cmfe_CellML_ModelImport(CellML,"inputs/mooney_rivlin.xml",MooneyRivlinModelIndex,Err) -! CALL cmfe_CellML_ModelImport(CellML,"n98.xml",MooneyRivlinModelIndex,Err) - ! Now we have imported the model we are able to specify which variables from the model we want: + !CALL OC_CellML_ModelImport(cellML,"inputs/mooney_rivlin.xml",mooneyRivlinModelIndex,err) + CALL OC_CellML_ModelImport(cellML,"inputs/mooney_rivlin_new.cellml",mooneyRivlinModelIndex,err) + !Now we have imported the model we are able to specify which variables from the model we want: ! - to set from this side - CALL cmfe_CellML_VariableSetAsKnown(CellML,MooneyRivlinModelIndex,"equations/E11",Err) - CALL cmfe_CellML_VariableSetAsKnown(CellML,MooneyRivlinModelIndex,"equations/E12",Err) - CALL cmfe_CellML_VariableSetAsKnown(CellML,MooneyRivlinModelIndex,"equations/E13",Err) - CALL cmfe_CellML_VariableSetAsKnown(CellML,MooneyRivlinModelIndex,"equations/E22",Err) - CALL cmfe_CellML_VariableSetAsKnown(CellML,MooneyRivlinModelIndex,"equations/E23",Err) - CALL cmfe_CellML_VariableSetAsKnown(CellML,MooneyRivlinModelIndex,"equations/E33",Err) -! doesn't work yet, since gauss_point_based_interpolation is not implemented TODO -! CALL cmfe_CellML_VariableSetAsKnown(CellML,MooneyRivlinModelIndex,"equations/c1",Err) -! CALL cmfe_CellML_VariableSetAsKnown(CellML,MooneyRivlinModelIndex,"equations/c2",Err) + CALL OC_CellML_VariableSetAsKnown(cellML,mooneyRivlinModelIndex,"main/E11",err) + CALL OC_CellML_VariableSetAsKnown(cellML,mooneyRivlinModelIndex,"main/E12",err) + CALL OC_CellML_VariableSetAsKnown(cellML,mooneyRivlinModelIndex,"main/E13",err) + CALL OC_CellML_VariableSetAsKnown(cellML,mooneyRivlinModelIndex,"main/E22",err) + CALL OC_CellML_VariableSetAsKnown(cellML,mooneyRivlinModelIndex,"main/E23",err) + CALL OC_CellML_VariableSetAsKnown(cellML,mooneyRivlinModelIndex,"main/E33",err) + !CALL OC_CellML_VariableSetAsKnown(cellML,mooneyRivlinModelIndex,"main/c1",err) + !CALL OC_CellML_VariableSetAsKnown(cellML,mooneyRivlinModelIndex,"main/c2",err) ! - to get from the CellML side - CALL cmfe_CellML_VariableSetAsWanted(CellML,MooneyRivlinModelIndex,"equations/Tdev11",Err) - CALL cmfe_CellML_VariableSetAsWanted(CellML,MooneyRivlinModelIndex,"equations/Tdev12",Err) - CALL cmfe_CellML_VariableSetAsWanted(CellML,MooneyRivlinModelIndex,"equations/Tdev13",Err) - CALL cmfe_CellML_VariableSetAsWanted(CellML,MooneyRivlinModelIndex,"equations/Tdev22",Err) - CALL cmfe_CellML_VariableSetAsWanted(CellML,MooneyRivlinModelIndex,"equations/Tdev23",Err) - CALL cmfe_CellML_VariableSetAsWanted(CellML,MooneyRivlinModelIndex,"equations/Tdev33",Err) + CALL OC_CellML_VariableSetAsWanted(cellML,mooneyRivlinModelIndex,"main/Tdev11",err) + CALL OC_CellML_VariableSetAsWanted(cellML,mooneyRivlinModelIndex,"main/Tdev12",err) + CALL OC_CellML_VariableSetAsWanted(cellML,mooneyRivlinModelIndex,"main/Tdev13",err) + CALL OC_CellML_VariableSetAsWanted(cellML,mooneyRivlinModelIndex,"main/Tdev22",err) + CALL OC_CellML_VariableSetAsWanted(cellML,mooneyRivlinModelIndex,"main/Tdev23",err) + CALL OC_CellML_VariableSetAsWanted(cellML,mooneyRivlinModelIndex,"main/Tdev33",err) !Finish the CellML environment - CALL cmfe_CellML_CreateFinish(CellML,Err) + CALL OC_CellML_CreateFinish(cellML,err) !Start the creation of CellML <--> OpenCMISS field maps - CALL cmfe_CellML_FieldMapsCreateStart(CellML,Err) + CALL OC_CellML_FieldMapsCreateStart(cellML,err) !Now we can set up the field variable component <--> CellML model variable mappings. !Map the strain components - CALL cmfe_CellML_CreateFieldToCellMLMap(CellML,DependentField,CMFE_FIELD_U1_VARIABLE_TYPE,1,CMFE_FIELD_VALUES_SET_TYPE, & - & MooneyRivlinModelIndex,"equations/E11",CMFE_FIELD_VALUES_SET_TYPE,Err) - CALL cmfe_CellML_CreateFieldToCellMLMap(CellML,DependentField,CMFE_FIELD_U1_VARIABLE_TYPE,2,CMFE_FIELD_VALUES_SET_TYPE, & - & MooneyRivlinModelIndex,"equations/E12",CMFE_FIELD_VALUES_SET_TYPE,Err) - CALL cmfe_CellML_CreateFieldToCellMLMap(CellML,DependentField,CMFE_FIELD_U1_VARIABLE_TYPE,3,CMFE_FIELD_VALUES_SET_TYPE, & - & MooneyRivlinModelIndex,"equations/E13",CMFE_FIELD_VALUES_SET_TYPE,Err) - CALL cmfe_CellML_CreateFieldToCellMLMap(CellML,DependentField,CMFE_FIELD_U1_VARIABLE_TYPE,4,CMFE_FIELD_VALUES_SET_TYPE, & - & MooneyRivlinModelIndex,"equations/E22",CMFE_FIELD_VALUES_SET_TYPE,Err) - CALL cmfe_CellML_CreateFieldToCellMLMap(CellML,DependentField,CMFE_FIELD_U1_VARIABLE_TYPE,5,CMFE_FIELD_VALUES_SET_TYPE, & - & MooneyRivlinModelIndex,"equations/E23",CMFE_FIELD_VALUES_SET_TYPE,Err) - CALL cmfe_CellML_CreateFieldToCellMLMap(CellML,DependentField,CMFE_FIELD_U1_VARIABLE_TYPE,6,CMFE_FIELD_VALUES_SET_TYPE, & - & MooneyRivlinModelIndex,"equations/E33",CMFE_FIELD_VALUES_SET_TYPE,Err) + CALL OC_CellML_CreateFieldToCellMLMap(cellML,dependentField,OC_FIELD_U1_VARIABLE_TYPE,1,OC_FIELD_VALUES_SET_TYPE, & + & mooneyRivlinModelIndex,"main/E11",OC_FIELD_VALUES_SET_TYPE,err) + CALL OC_CellML_CreateFieldToCellMLMap(cellML,dependentField,OC_FIELD_U1_VARIABLE_TYPE,2,OC_FIELD_VALUES_SET_TYPE, & + & mooneyRivlinModelIndex,"main/E12",OC_FIELD_VALUES_SET_TYPE,err) + CALL OC_CellML_CreateFieldToCellMLMap(cellML,dependentField,OC_FIELD_U1_VARIABLE_TYPE,3,OC_FIELD_VALUES_SET_TYPE, & + & mooneyRivlinModelIndex,"main/E13",OC_FIELD_VALUES_SET_TYPE,err) + CALL OC_CellML_CreateFieldToCellMLMap(cellML,dependentField,OC_FIELD_U1_VARIABLE_TYPE,4,OC_FIELD_VALUES_SET_TYPE, & + & mooneyRivlinModelIndex,"main/E22",OC_FIELD_VALUES_SET_TYPE,err) + CALL OC_CellML_CreateFieldToCellMLMap(cellML,dependentField,OC_FIELD_U1_VARIABLE_TYPE,5,OC_FIELD_VALUES_SET_TYPE, & + & mooneyRivlinModelIndex,"main/E23",OC_FIELD_VALUES_SET_TYPE,err) + CALL OC_CellML_CreateFieldToCellMLMap(cellML,dependentField,OC_FIELD_U1_VARIABLE_TYPE,6,OC_FIELD_VALUES_SET_TYPE, & + & mooneyRivlinModelIndex,"main/E33",OC_FIELD_VALUES_SET_TYPE,err) !Map the material parameters -! doesn't work yet, since gauss_point_based_interpolation is not implemented TODO -! CALL cmfe_CellML_CreateFieldToCellMLMap(CellML,MaterialField,CMFE_FIELD_U_VARIABLE_TYPE,1,CMFE_FIELD_VALUES_SET_TYPE, & -! & MooneyRivlinModelIndex,"equations/c1",CMFE_FIELD_VALUES_SET_TYPE,Err) -! CALL cmfe_CellML_CreateFieldToCellMLMap(CellML,MaterialField,CMFE_FIELD_U_VARIABLE_TYPE,2,CMFE_FIELD_VALUES_SET_TYPE, & -! & MooneyRivlinModelIndex,"equations/c2",CMFE_FIELD_VALUES_SET_TYPE,Err) + !CALL OC_CellML_CreateFieldToCellMLMap(cellML,materialsField,OC_FIELD_U_VARIABLE_TYPE,1,OC_FIELD_VALUES_SET_TYPE, & + ! & mooneyRivlinModelIndex,"main/c1",OC_FIELD_VALUES_SET_TYPE,err) + !CALL OC_CellML_CreateFieldToCellMLMap(cellML,materialsField,OC_FIELD_U_VARIABLE_TYPE,2,OC_FIELD_VALUES_SET_TYPE, & + ! & mooneyRivlinModelIndex,"main/c2",OC_FIELD_VALUES_SET_TYPE,err) !Map the stress components - CALL cmfe_CellML_CreateCellMLToFieldMap(CellML,MooneyRivlinModelIndex,"equations/Tdev11",CMFE_FIELD_VALUES_SET_TYPE, & - & DependentField,CMFE_FIELD_U2_VARIABLE_TYPE,1,CMFE_FIELD_VALUES_SET_TYPE,Err) - CALL cmfe_CellML_CreateCellMLToFieldMap(CellML,MooneyRivlinModelIndex,"equations/Tdev12",CMFE_FIELD_VALUES_SET_TYPE, & - & DependentField,CMFE_FIELD_U2_VARIABLE_TYPE,2,CMFE_FIELD_VALUES_SET_TYPE,Err) - CALL cmfe_CellML_CreateCellMLToFieldMap(CellML,MooneyRivlinModelIndex,"equations/Tdev13",CMFE_FIELD_VALUES_SET_TYPE, & - & DependentField,CMFE_FIELD_U2_VARIABLE_TYPE,3,CMFE_FIELD_VALUES_SET_TYPE,Err) - CALL cmfe_CellML_CreateCellMLToFieldMap(CellML,MooneyRivlinModelIndex,"equations/Tdev22",CMFE_FIELD_VALUES_SET_TYPE, & - & DependentField,CMFE_FIELD_U2_VARIABLE_TYPE,4,CMFE_FIELD_VALUES_SET_TYPE,Err) - CALL cmfe_CellML_CreateCellMLToFieldMap(CellML,MooneyRivlinModelIndex,"equations/Tdev23",CMFE_FIELD_VALUES_SET_TYPE, & - & DependentField,CMFE_FIELD_U2_VARIABLE_TYPE,5,CMFE_FIELD_VALUES_SET_TYPE,Err) - CALL cmfe_CellML_CreateCellMLToFieldMap(CellML,MooneyRivlinModelIndex,"equations/Tdev33",CMFE_FIELD_VALUES_SET_TYPE, & - & DependentField,CMFE_FIELD_U2_VARIABLE_TYPE,6,CMFE_FIELD_VALUES_SET_TYPE,Err) + CALL OC_CellML_CreateCellMLToFieldMap(cellML,mooneyRivlinModelIndex,"main/Tdev11",OC_FIELD_VALUES_SET_TYPE, & + & dependentField,OC_FIELD_U2_VARIABLE_TYPE,1,OC_FIELD_VALUES_SET_TYPE,err) + CALL OC_CellML_CreateCellMLToFieldMap(cellML,mooneyRivlinModelIndex,"main/Tdev12",OC_FIELD_VALUES_SET_TYPE, & + & dependentField,OC_FIELD_U2_VARIABLE_TYPE,2,OC_FIELD_VALUES_SET_TYPE,err) + CALL OC_CellML_CreateCellMLToFieldMap(cellML,mooneyRivlinModelIndex,"main/Tdev13",OC_FIELD_VALUES_SET_TYPE, & + & dependentField,OC_FIELD_U2_VARIABLE_TYPE,3,OC_FIELD_VALUES_SET_TYPE,err) + CALL OC_CellML_CreateCellMLToFieldMap(cellML,mooneyRivlinModelIndex,"main/Tdev22",OC_FIELD_VALUES_SET_TYPE, & + & dependentField,OC_FIELD_U2_VARIABLE_TYPE,4,OC_FIELD_VALUES_SET_TYPE,err) + CALL OC_CellML_CreateCellMLToFieldMap(cellML,mooneyRivlinModelIndex,"main/Tdev23",OC_FIELD_VALUES_SET_TYPE, & + & dependentField,OC_FIELD_U2_VARIABLE_TYPE,5,OC_FIELD_VALUES_SET_TYPE,err) + CALL OC_CellML_CreateCellMLToFieldMap(cellML,mooneyRivlinModelIndex,"main/Tdev33",OC_FIELD_VALUES_SET_TYPE, & + & dependentField,OC_FIELD_U2_VARIABLE_TYPE,6,OC_FIELD_VALUES_SET_TYPE,err) !Finish the creation of CellML <--> OpenCMISS field maps - CALL cmfe_CellML_FieldMapsCreateFinish(CellML,Err) - -!Actually, don't need to create this at all - they're automatically created -! CALL cmfe_Field_ParameterSetCreate(DependentField,CMFE_FIELD_DELUDELN_VARIABLE_TYPE,CMFE_FIELD_PRESSURE_VALUES_SET_TYPE,Err) + CALL OC_CellML_FieldMapsCreateFinish(cellML,err) !Create the CellML models field - CALL cmfe_Field_Initialise(CellMLModelsField,Err) - CALL cmfe_CellML_ModelsFieldCreateStart(CellML,CellMLModelsFieldUserNumber,CellMLModelsField,Err) - CALL cmfe_CellML_ModelsFieldCreateFinish(CellML,Err) - -! no state field is required for a simple constitutive equation evaluation - !Create the CellML state field -! CALL cmfe_Field_Initialise(CellMLStateField,Err) -! CALL cmfe_CellML_StateFieldCreateStart(CellML,CellMLStateFieldUserNumber,CellMLStateField,Err) -! CALL cmfe_CellML_StateFieldCreateFinish(CellML,Err) + CALL OC_Field_Initialise(cellMLModelsField,err) + CALL OC_CellML_ModelsFieldCreateStart(cellML,CELLML_MODELS_FIELD_USER_NUMBER,cellMLModelsField,err) + CALL OC_CellML_ModelsFieldCreateFinish(cellML,err) !Create the CellML parameters field --- will be the strain field - CALL cmfe_Field_Initialise(CellMLParametersField,Err) - CALL cmfe_CellML_ParametersFieldCreateStart(CellML,CellMLParametersFieldUserNumber,CellMLParametersField,Err) - CALL cmfe_CellML_ParametersFieldCreateFinish(CellML,Err) + CALL OC_Field_Initialise(cellMLParametersField,err) + CALL OC_CellML_ParametersFieldCreateStart(cellML,CELLML_PARAMETERS_FIELD_USER_NUMBER,cellMLParametersField,err) + CALL OC_CellML_ParametersFieldCreateFinish(cellML,err) !Create the CellML intermediate field --- will be the stress field - CALL cmfe_Field_Initialise(CellMLIntermediateField,Err) - CALL cmfe_CellML_IntermediateFieldCreateStart(CellML,CellMLIntermediateFieldUserNumber,CellMLIntermediateField,Err) - CALL cmfe_CellML_IntermediateFieldCreateFinish(CellML,Err) + CALL OC_Field_Initialise(cellMLIntermediateField,err) + CALL OC_CellML_IntermediateFieldCreateStart(cellML,CELLML_INTERMEDIATE_FIELD_USER_NUMBER,cellMLIntermediateField,err) + CALL OC_CellML_IntermediateFieldCreateFinish(cellML,err) !Create the equations set equations - CALL cmfe_Equations_Initialise(Equations,Err) - CALL cmfe_EquationsSet_EquationsCreateStart(EquationsSet,Equations,Err) - CALL cmfe_Equations_SparsityTypeSet(Equations,CMFE_EQUATIONS_SPARSE_MATRICES,Err) - CALL cmfe_Equations_OutputTypeSet(Equations,CMFE_EQUATIONS_NO_OUTPUT,Err) - CALL cmfe_EquationsSet_EquationsCreateFinish(EquationsSet,Err) + CALL OC_Equations_Initialise(equations,err) + CALL OC_EquationsSet_EquationsCreateStart(equationsSet,equations,err) + CALL OC_Equations_SparsityTypeSet(equations,OC_EQUATIONS_SPARSE_MATRICES,err) + CALL OC_Equations_OutputTypeSet(equations,OC_EQUATIONS_NO_OUTPUT,err) + CALL OC_EquationsSet_EquationsCreateFinish(equationsSet,err) !Initialise dependent field from undeformed geometry and set hydrostatic pressure - CALL cmfe_Field_ParametersToFieldParametersComponentCopy(GeometricField,CMFE_FIELD_U_VARIABLE_TYPE,CMFE_FIELD_VALUES_SET_TYPE, & - & 1,DependentField,CMFE_FIELD_U_VARIABLE_TYPE,CMFE_FIELD_VALUES_SET_TYPE,1,Err) - CALL cmfe_Field_ParametersToFieldParametersComponentCopy(GeometricField,CMFE_FIELD_U_VARIABLE_TYPE,CMFE_FIELD_VALUES_SET_TYPE, & - & 2,DependentField,CMFE_FIELD_U_VARIABLE_TYPE,CMFE_FIELD_VALUES_SET_TYPE,2,Err) - CALL cmfe_Field_ParametersToFieldParametersComponentCopy(GeometricField,CMFE_FIELD_U_VARIABLE_TYPE,CMFE_FIELD_VALUES_SET_TYPE, & - & 3,DependentField,CMFE_FIELD_U_VARIABLE_TYPE,CMFE_FIELD_VALUES_SET_TYPE,3,Err) - CALL cmfe_Field_ComponentValuesInitialise(DependentField,CMFE_FIELD_U_VARIABLE_TYPE,CMFE_FIELD_VALUES_SET_TYPE,4,-8.0_CMISSRP, & - & Err) - - CALL cmfe_Field_ComponentValuesInitialise(DependentField,CMFE_FIELD_U1_VARIABLE_TYPE,CMFE_FIELD_VALUES_SET_TYPE,1,0.0_CMISSRP, & - & Err) - CALL cmfe_Field_ComponentValuesInitialise(DependentField,CMFE_FIELD_U1_VARIABLE_TYPE,CMFE_FIELD_VALUES_SET_TYPE,2,0.0_CMISSRP, & - & Err) - CALL cmfe_Field_ComponentValuesInitialise(DependentField,CMFE_FIELD_U1_VARIABLE_TYPE,CMFE_FIELD_VALUES_SET_TYPE,3,0.0_CMISSRP, & - & Err) - CALL cmfe_Field_ComponentValuesInitialise(DependentField,CMFE_FIELD_U1_VARIABLE_TYPE,CMFE_FIELD_VALUES_SET_TYPE,4,0.0_CMISSRP, & - & Err) - CALL cmfe_Field_ComponentValuesInitialise(DependentField,CMFE_FIELD_U1_VARIABLE_TYPE,CMFE_FIELD_VALUES_SET_TYPE,5,0.0_CMISSRP, & - & Err) - CALL cmfe_Field_ComponentValuesInitialise(DependentField,CMFE_FIELD_U1_VARIABLE_TYPE,CMFE_FIELD_VALUES_SET_TYPE,6,0.0_CMISSRP, & - & Err) - - CALL cmfe_Field_ComponentValuesInitialise(DependentField,CMFE_FIELD_U2_VARIABLE_TYPE,CMFE_FIELD_VALUES_SET_TYPE,1,0.0_CMISSRP, & - & Err) - CALL cmfe_Field_ComponentValuesInitialise(DependentField,CMFE_FIELD_U2_VARIABLE_TYPE,CMFE_FIELD_VALUES_SET_TYPE,2,0.0_CMISSRP, & - & Err) - CALL cmfe_Field_ComponentValuesInitialise(DependentField,CMFE_FIELD_U2_VARIABLE_TYPE,CMFE_FIELD_VALUES_SET_TYPE,3,0.0_CMISSRP, & - & Err) - CALL cmfe_Field_ComponentValuesInitialise(DependentField,CMFE_FIELD_U2_VARIABLE_TYPE,CMFE_FIELD_VALUES_SET_TYPE,4,0.0_CMISSRP, & - & Err) - CALL cmfe_Field_ComponentValuesInitialise(DependentField,CMFE_FIELD_U2_VARIABLE_TYPE,CMFE_FIELD_VALUES_SET_TYPE,5,0.0_CMISSRP, & - & Err) - CALL cmfe_Field_ComponentValuesInitialise(DependentField,CMFE_FIELD_U2_VARIABLE_TYPE,CMFE_FIELD_VALUES_SET_TYPE,6,0.0_CMISSRP, & - & Err) + CALL OC_Field_ParametersToFieldParametersComponentCopy(geometricField,OC_FIELD_U_VARIABLE_TYPE,OC_FIELD_VALUES_SET_TYPE, & + & 1,dependentField,OC_FIELD_U_VARIABLE_TYPE,OC_FIELD_VALUES_SET_TYPE,1,err) + CALL OC_Field_ParametersToFieldParametersComponentCopy(geometricField,OC_FIELD_U_VARIABLE_TYPE,OC_FIELD_VALUES_SET_TYPE, & + & 2,dependentField,OC_FIELD_U_VARIABLE_TYPE,OC_FIELD_VALUES_SET_TYPE,2,err) + CALL OC_Field_ParametersToFieldParametersComponentCopy(geometricField,OC_FIELD_U_VARIABLE_TYPE,OC_FIELD_VALUES_SET_TYPE, & + & 3,dependentField,OC_FIELD_U_VARIABLE_TYPE,OC_FIELD_VALUES_SET_TYPE,3,err) + CALL OC_Field_ComponentValuesInitialise(dependentField,OC_FIELD_U_VARIABLE_TYPE,OC_FIELD_VALUES_SET_TYPE,4,-8.0_OC_RP, & + & err) + + CALL OC_Field_ComponentValuesInitialise(dependentField,OC_FIELD_U1_VARIABLE_TYPE,OC_FIELD_VALUES_SET_TYPE,1,0.0_OC_RP, & + & err) + CALL OC_Field_ComponentValuesInitialise(dependentField,OC_FIELD_U1_VARIABLE_TYPE,OC_FIELD_VALUES_SET_TYPE,2,0.0_OC_RP, & + & err) + CALL OC_Field_ComponentValuesInitialise(dependentField,OC_FIELD_U1_VARIABLE_TYPE,OC_FIELD_VALUES_SET_TYPE,3,0.0_OC_RP, & + & err) + CALL OC_Field_ComponentValuesInitialise(dependentField,OC_FIELD_U1_VARIABLE_TYPE,OC_FIELD_VALUES_SET_TYPE,4,0.0_OC_RP, & + & err) + CALL OC_Field_ComponentValuesInitialise(dependentField,OC_FIELD_U1_VARIABLE_TYPE,OC_FIELD_VALUES_SET_TYPE,5,0.0_OC_RP, & + & err) + CALL OC_Field_ComponentValuesInitialise(dependentField,OC_FIELD_U1_VARIABLE_TYPE,OC_FIELD_VALUES_SET_TYPE,6,0.0_OC_RP, & + & err) + + CALL OC_Field_ComponentValuesInitialise(dependentField,OC_FIELD_U2_VARIABLE_TYPE,OC_FIELD_VALUES_SET_TYPE,1,0.0_OC_RP, & + & err) + CALL OC_Field_ComponentValuesInitialise(dependentField,OC_FIELD_U2_VARIABLE_TYPE,OC_FIELD_VALUES_SET_TYPE,2,0.0_OC_RP, & + & err) + CALL OC_Field_ComponentValuesInitialise(dependentField,OC_FIELD_U2_VARIABLE_TYPE,OC_FIELD_VALUES_SET_TYPE,3,0.0_OC_RP, & + & err) + CALL OC_Field_ComponentValuesInitialise(dependentField,OC_FIELD_U2_VARIABLE_TYPE,OC_FIELD_VALUES_SET_TYPE,4,0.0_OC_RP, & + & err) + CALL OC_Field_ComponentValuesInitialise(dependentField,OC_FIELD_U2_VARIABLE_TYPE,OC_FIELD_VALUES_SET_TYPE,5,0.0_OC_RP, & + & err) + CALL OC_Field_ComponentValuesInitialise(dependentField,OC_FIELD_U2_VARIABLE_TYPE,OC_FIELD_VALUES_SET_TYPE,6,0.0_OC_RP, & + & err) !Define the problem - CALL cmfe_Problem_Initialise(Problem,Err) - CALL cmfe_Problem_CreateStart(ProblemUserNumber,[CMFE_PROBLEM_ELASTICITY_CLASS,CMFE_PROBLEM_FINITE_ELASTICITY_TYPE, & - & CMFE_PROBLEM_FINITE_ELASTICITY_WITH_CELLML_SUBTYPE],Problem,Err) - CALL cmfe_Problem_CreateFinish(Problem,Err) + CALL OC_Problem_Initialise(problem,err) + CALL OC_Problem_CreateStart(PROBLEM_USER_NUMBER,context,[OC_PROBLEM_ELASTICITY_CLASS,OC_PROBLEM_FINITE_ELASTICITY_TYPE, & + & OC_PROBLEM_FINITE_ELASTICITY_WITH_CELLML_SUBTYPE],problem,err) + CALL OC_Problem_CreateFinish(problem,err) !Create the problem control loop - CALL cmfe_Problem_ControlLoopCreateStart(Problem,Err) - CALL cmfe_ControlLoop_Initialise(ControlLoop,Err) - CALL cmfe_Problem_ControlLoopGet(Problem,CMFE_CONTROL_LOOP_NODE,ControlLoop,Err) - CALL cmfe_ControlLoop_TypeSet(ControlLoop,CMFE_PROBLEM_CONTROL_SIMPLE_TYPE,Err) - CALL cmfe_Problem_ControlLoopCreateFinish(Problem,Err) + CALL OC_Problem_ControlLoopCreateStart(problem,err) + CALL OC_ControlLoop_Initialise(controlLoop,err) + CALL OC_Problem_ControlLoopGet(problem,OC_CONTROL_LOOP_NODE,controlLoop,err) + CALL OC_ControlLoop_TypeSet(controlLoop,OC_CONTROL_SIMPLE_TYPE,err) + CALL OC_Problem_ControlLoopCreateFinish(problem,err) !Create 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_PROGRESS_OUTPUT,Err) - CALL cmfe_Solver_NewtonJacobianCalculationTypeSet(Solver,CMFE_SOLVER_NEWTON_JACOBIAN_FD_CALCULATED,Err) - CALL cmfe_Solver_NewtonLinearSolverGet(Solver,LinearSolver,Err) - CALL cmfe_Solver_NewtonAbsoluteToleranceSet(Solver,1.0E-14_CMISSRP,Err) - CALL cmfe_Solver_NewtonSolutionToleranceSet(Solver,1.0E-14_CMISSRP,Err) - CALL cmfe_Solver_NewtonRelativeToleranceSet(Solver,1.0E-14_CMISSRP,Err) - CALL cmfe_Solver_LinearTypeSet(LinearSolver,CMFE_SOLVER_LINEAR_DIRECT_SOLVE_TYPE,Err) - CALL cmfe_Problem_SolversCreateFinish(Problem,Err) + CALL OC_Solver_Initialise(solver,err) + CALL OC_Solver_Initialise(linearSolver,err) + CALL OC_Problem_SolversCreateStart(problem,err) + CALL OC_Problem_SolverGet(problem,OC_CONTROL_LOOP_NODE,1,solver,err) + CALL OC_Solver_OutputTypeSet(solver,OC_SOLVER_PROGRESS_OUTPUT,err) + CALL OC_Solver_NewtonJacobianCalculationTypeSet(solver,OC_SOLVER_NEWTON_JACOBIAN_FD_CALCULATED,err) + CALL OC_Solver_NewtonLinearSolverGet(solver,linearSolver,err) + CALL OC_Solver_NewtonAbsoluteToleranceSet(solver,1.0E-14_OC_RP,err) + CALL OC_Solver_NewtonSolutionToleranceSet(solver,1.0E-14_OC_RP,err) + CALL OC_Solver_NewtonRelativeToleranceSet(solver,1.0E-14_OC_RP,err) + CALL OC_Solver_LinearTypeSet(linearSolver,OC_SOLVER_LINEAR_DIRECT_SOLVE_TYPE,err) + CALL OC_Problem_SolversCreateFinish(problem,err) !Create the problem solver CellML equations - CALL cmfe_Solver_Initialise(CellMLSolver,Err) - CALL cmfe_CellMLEquations_Initialise(CellMLEquations,Err) - CALL cmfe_Problem_CellMLEquationsCreateStart(Problem,Err) - CALL cmfe_Solver_NewtonCellMLSolverGet(Solver,CellMLSolver,Err) - CALL cmfe_Solver_CellMLEquationsGet(CellMLSolver,CellMLEquations,Err) - CALL cmfe_CellMLEquations_CellMLAdd(CellMLEquations,CellML,CellMLIndex,Err) - CALL cmfe_Problem_CellMLEquationsCreateFinish(Problem,Err) + CALL OC_Solver_Initialise(cellMLSolver,err) + CALL OC_CellMLEquations_Initialise(cellMLEquations,err) + CALL OC_Problem_CellMLEquationsCreateStart(problem,err) + CALL OC_Solver_NewtonCellMLSolverGet(solver,cellMLSolver,err) + CALL OC_Solver_CellMLEquationsGet(cellMLSolver,cellMLEquations,err) + CALL OC_CellMLEquations_CellMLAdd(cellMLEquations,cellML,cellMLIndex,err) + CALL OC_Problem_CellMLEquationsCreateFinish(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_Problem_SolverGet(Problem,CMFE_CONTROL_LOOP_NODE,1,Solver,Err) - CALL cmfe_Solver_SolverEquationsGet(Solver,SolverEquations,Err) - CALL cmfe_SolverEquations_SparsityTypeSet(SolverEquations,CMFE_SOLVER_SPARSE_MATRICES,Err) - CALL cmfe_SolverEquations_EquationsSetAdd(SolverEquations,EquationsSet,EquationsSetIndex,Err) - CALL cmfe_Problem_SolverEquationsCreateFinish(Problem,Err) + CALL OC_Solver_Initialise(solver,err) + CALL OC_SolverEquations_Initialise(solverEquations,err) + CALL OC_Problem_SolverEquationsCreateStart(problem,err) + CALL OC_Problem_SolverGet(problem,OC_CONTROL_LOOP_NODE,1,solver,err) + CALL OC_Solver_SolverEquationsGet(solver,solverEquations,err) + CALL OC_SolverEquations_SparsityTypeSet(solverEquations,OC_SOLVER_SPARSE_MATRICES,err) + CALL OC_SolverEquations_EquationsSetAdd(solverEquations,equationsSet,equationsSetIndex,err) + CALL OC_Problem_SolverEquationsCreateFinish(problem,err) !Prescribe boundary conditions (absolute nodal parameters) - CALL cmfe_BoundaryConditions_Initialise(BoundaryConditions,Err) - CALL cmfe_SolverEquations_BoundaryConditionsCreateStart(SolverEquations,BoundaryConditions,Err) - - CALL cmfe_GeneratedMesh_SurfaceGet(GeneratedMesh,CMFE_GENERATED_MESH_REGULAR_BOTTOM_SURFACE,BottomSurfaceNodes,BottomNormalXi, & - & Err) - CALL cmfe_GeneratedMesh_SurfaceGet(GeneratedMesh,CMFE_GENERATED_MESH_REGULAR_LEFT_SURFACE,LeftSurfaceNodes,LeftNormalXi,Err) - CALL cmfe_GeneratedMesh_SurfaceGet(GeneratedMesh,CMFE_GENERATED_MESH_REGULAR_RIGHT_SURFACE,RightSurfaceNodes,RightNormalXi,Err) - CALL cmfe_GeneratedMesh_SurfaceGet(GeneratedMesh,CMFE_GENERATED_MESH_REGULAR_FRONT_SURFACE,FrontSurfaceNodes,FrontNormalXi,Err) + CALL OC_BoundaryConditions_Initialise(boundaryConditions,err) + CALL OC_SolverEquations_BoundaryConditionsCreateStart(solverEquations,boundaryConditions,err) + + CALL OC_GeneratedMesh_SurfaceGet(generatedMesh,OC_GENERATED_MESH_REGULAR_BOTTOM_SURFACE,bottomSurfaceNodes,bottomNormalXi, & + & err) + CALL OC_GeneratedMesh_SurfaceGet(generatedMesh,OC_GENERATED_MESH_REGULAR_LEFT_SURFACE,leftSurfaceNodes,leftNormalXi, & + & err) + CALL OC_GeneratedMesh_SurfaceGet(generatedMesh,OC_GENERATED_MESH_REGULAR_RIGHT_SURFACE,rightSurfaceNodes,rightNormalXi, & + & err) + CALL OC_GeneratedMesh_SurfaceGet(generatedMesh,OC_GENERATED_MESH_REGULAR_FRONT_SURFACE,frontSurfaceNodes,frontNormalXi, & + & err) !Set x=0 nodes to no x displacment in x - DO node_idx=1,SIZE(LeftSurfaceNodes,1) - NodeNumber=LeftSurfaceNodes(node_idx) - CALL cmfe_Decomposition_NodeDomainGet(Decomposition,NodeNumber,1,NodeDomain,Err) - IF(NodeDomain==ComputationalNodeNumber) THEN - CALL cmfe_BoundaryConditions_SetNode(BoundaryConditions,DependentField,CMFE_FIELD_U_VARIABLE_TYPE,1,1,NodeNumber,1, & - & CMFE_BOUNDARY_CONDITION_FIXED,0.0_CMISSRP,Err) + DO nodeIdx=1,SIZE(leftSurfaceNodes,1) + nodeNumber=leftSurfaceNodes(nodeIdx) + CALL OC_Decomposition_NodeDomainGet(decomposition,1,nodeNumber,nodeDomain,err) + IF(nodeDomain==computationalNodeNumber) THEN + CALL OC_BoundaryConditions_SetNode(boundaryConditions,dependentField,OC_FIELD_U_VARIABLE_TYPE,1,1,nodeNumber,1, & + & OC_BOUNDARY_CONDITION_FIXED,0.0_OC_RP,err) ENDIF ENDDO !Set x=WIDTH nodes to 10% x displacement - DO node_idx=1,SIZE(RightSurfaceNodes,1) - NodeNumber=RightSurfaceNodes(node_idx) - CALL cmfe_Decomposition_NodeDomainGet(Decomposition,NodeNumber,1,NodeDomain,Err) - IF(NodeDomain==ComputationalNodeNumber) THEN - CALL cmfe_BoundaryConditions_SetNode(BoundaryConditions,DependentField,CMFE_FIELD_U_VARIABLE_TYPE,1,1,NodeNumber,1, & - & CMFE_BOUNDARY_CONDITION_FIXED,1.1_CMISSRP*WIDTH,Err) + DO nodeIdx=1,SIZE(rightSurfaceNodes,1) + nodeNumber=rightSurfaceNodes(nodeIdx) + CALL OC_Decomposition_NodeDomainGet(decomposition,1,nodeNumber,nodeDomain,err) + IF(nodeDomain==computationalNodeNumber) THEN + CALL OC_BoundaryConditions_SetNode(boundaryConditions,dependentField,OC_FIELD_U_VARIABLE_TYPE,1,1,nodeNumber,1, & + & OC_BOUNDARY_CONDITION_FIXED,1.1_OC_RP*WIDTH,err) ENDIF ENDDO !Set y=0 nodes to no y displacement - DO node_idx=1,SIZE(FrontSurfaceNodes,1) - NodeNumber=FrontSurfaceNodes(node_idx) - CALL cmfe_Decomposition_NodeDomainGet(Decomposition,NodeNumber,1,NodeDomain,Err) - IF(NodeDomain==ComputationalNodeNumber) THEN - CALL cmfe_BoundaryConditions_SetNode(BoundaryConditions,DependentField,CMFE_FIELD_U_VARIABLE_TYPE,1,1,NodeNumber,2, & - & CMFE_BOUNDARY_CONDITION_FIXED,0.0_CMISSRP,Err) + DO nodeIdx=1,SIZE(frontSurfaceNodes,1) + nodeNumber=frontSurfaceNodes(nodeIdx) + CALL OC_Decomposition_NodeDomainGet(decomposition,1,nodeNumber,nodeDomain,err) + IF(nodeDomain==computationalNodeNumber) THEN + CALL OC_BoundaryConditions_SetNode(boundaryConditions,dependentField,OC_FIELD_U_VARIABLE_TYPE,1,1,nodeNumber,2, & + & OC_BOUNDARY_CONDITION_FIXED,0.0_OC_RP,err) ENDIF ENDDO !Set z=0 nodes to no z displacement - DO node_idx=1,SIZE(BottomSurfaceNodes,1) - NodeNumber=BottomSurfaceNodes(node_idx) - CALL cmfe_Decomposition_NodeDomainGet(Decomposition,NodeNumber,1,NodeDomain,Err) - IF(NodeDomain==ComputationalNodeNumber) THEN - CALL cmfe_BoundaryConditions_SetNode(BoundaryConditions,DependentField,CMFE_FIELD_U_VARIABLE_TYPE,1,1,NodeNumber,3, & - & CMFE_BOUNDARY_CONDITION_FIXED,0.0_CMISSRP,Err) + DO nodeIdx=1,SIZE(bottomSurfaceNodes,1) + nodeNumber=bottomSurfaceNodes(nodeIdx) + CALL OC_Decomposition_NodeDomainGet(decomposition,1,nodeNumber,nodeDomain,err) + IF(nodeDomain==computationalNodeNumber) THEN + CALL OC_BoundaryConditions_SetNode(boundaryConditions,dependentField,OC_FIELD_U_VARIABLE_TYPE,1,1,nodeNumber,3, & + & OC_BOUNDARY_CONDITION_FIXED,0.0_OC_RP,err) ENDIF ENDDO - CALL cmfe_SolverEquations_BoundaryConditionsCreateFinish(SolverEquations,Err) + CALL OC_SolverEquations_BoundaryConditionsCreateFinish(solverEquations,err) !Solve problem - CALL cmfe_Problem_Solve(Problem,Err) + CALL OC_Problem_Solve(problem,err) - INQUIRE(file="./results", exist=directory_exists) - IF (.NOT.directory_exists) THEN - CALL execute_command_line ("mkdir ./results") - END IF + INQUIRE(FILE="./results",EXIST=directoryExists) + IF(.NOT.directoryExists) THEN + CALL EXECUTE_COMMAND_LINE("mkdir ./results") + ENDIF !Output solution - CALL cmfe_Fields_Initialise(Fields,Err) - CALL cmfe_Fields_Create(Region,Fields,Err) - CALL cmfe_Fields_NodesExport(Fields,"./results/MooneyRivlinInCellML","FORTRAN",Err) - CALL cmfe_Fields_ElementsExport(Fields,"./results/MooneyRivlinInCellML","FORTRAN",Err) - CALL cmfe_Fields_Finalise(Fields,Err) + CALL OC_Fields_Initialise(fields,err) + CALL OC_Fields_Create(region,fields,err) + CALL OC_Fields_NodesExport(fields,"./results/MooneyRivlinInCellML","FORTRAN",err) + CALL OC_Fields_ElementsExport(fields,"./results/MooneyRivlinInCellML","FORTRAN",err) + CALL OC_Fields_Finalise(fields,err) - CALL cmfe_Finalise(Err) + !Destroy the context + CALL OC_Context_Destroy(context,err) + !Finalise OpenCMISS + CALL OC_Finalise(err) WRITE(*,'(A)') "Program successfully completed." STOP -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - CONTAINS -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - SUBROUTINE HANDLE_ERROR(ERROR_STRING) + SUBROUTINE HandleError(errorString) - CHARACTER(LEN=*), INTENT(IN) :: ERROR_STRING + CHARACTER(LEN=*), INTENT(IN) :: errorString - WRITE(*,'(">>ERROR: ",A)') ERROR_STRING(1:LEN_TRIM(ERROR_STRING)) + WRITE(*,'(">>ERROR: ",A)') errorString(1:LEN_TRIM(errorString)) STOP - END SUBROUTINE HANDLE_ERROR -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - + END SUBROUTINE HandleError -END PROGRAM MOONEYRIVLININCELLMLEXAMPLE +END PROGRAM MooneyRivlinInCellMLExample