PageRenderTime 48ms CodeModel.GetById 15ms RepoModel.GetById 0ms app.codeStats 0ms

/MultiPhysics/Poroelasticity/FiniteElasticityDarcy/IncompElastDrivenDarcy_AnalyticDarcy/src/IncompElastDrivenDarcy_AnalyticDarcyExample.f90

http://github.com/xyan075/examples
FORTRAN Modern | 1379 lines | 566 code | 185 blank | 628 comment | 0 complexity | 11cc114a73868b9bf78a2c085958a0ff MD5 | raw file
  1. !> \file
  2. !> \author Christian Michler, Adam Reeve
  3. !> \brief This is an example program to solve a coupled Finite Elastiticity Darcy equation using openCMISS calls.
  4. !>
  5. !> \section LICENSE
  6. !>
  7. !> Version: MPL 1.1/GPL 2.0/LGPL 2.1
  8. !>
  9. !> The contents of this file are subject to the Mozilla Public License
  10. !> Version 1.1 (the "License"); you may not use this file except in
  11. !> compliance with the License. You may obtain a copy of the License at
  12. !> http://www.mozilla.org/MPL/
  13. !>
  14. !> Software distributed under the License is distributed on an "AS IS"
  15. !> basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
  16. !> License for the specific language governing rights and limitations
  17. !> under the License.
  18. !>
  19. !> The Original Code is OpenCMISS
  20. !>
  21. !> The Initial Developer of the Original Code is University of Auckland,
  22. !> Auckland, New Zealand and University of Oxford, Oxford, United
  23. !> Kingdom. Portions created by the University of Auckland and University
  24. !> of Oxford are Copyright (C) 2007 by the University of Auckland and
  25. !> the University of Oxford. All Rights Reserved.
  26. !>
  27. !> Contributor(s):
  28. !>
  29. !> Alternatively, the contents of this file may be used under the terms of
  30. !> either the GNU General Public License Version 2 or later (the "GPL"), or
  31. !> the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
  32. !> in which case the provisions of the GPL or the LGPL are applicable instead
  33. !> of those above. If you wish to allow use of your version of this file only
  34. !> under the terms of either the GPL or the LGPL, and not to allow others to
  35. !> use your version of this file under the terms of the MPL, indicate your
  36. !> decision by deleting the provisions above and replace them with the notice
  37. !> and other provisions required by the GPL or the LGPL. If you do not delete
  38. !> the provisions above, a recipient may use your version of this file under
  39. !> the terms of any one of the MPL, the GPL or the LGPL.
  40. !>
  41. !> \example MultiPhysics/Poroelasticity/FiniteElasticityDarcy/IncompressibleElasticityDrivenDarcy/src/IncompressibleElasticityDrivenDarcyExample.f90
  42. !! Example program to solve coupled FiniteElasticityDarcy equations using OpenCMISS calls.
  43. !! \par Latest Builds:
  44. !! \li <a href='http://autotest.bioeng.auckland.ac.nz/opencmiss-build/logs_x86_64-linux/MultiPhysics/Poroelasticity/FiniteElasticityDarcy/IncompressibleElasticityDrivenDarcy/build-intel'>Linux Intel Build</a>
  45. !! \li <a href='http://autotest.bioeng.auckland.ac.nz/opencmiss-build/logs_x86_64-linux/MultiPhysics/Poroelasticity/FiniteElasticityDarcy/IncompressibleElasticityDrivenDarcy/build-intel'>Linux GNU Build</a>
  46. !!
  47. !<
  48. ! !
  49. ! ! This example considers a coupled Finite Elasticity Darcy problem
  50. ! !
  51. !> Main program
  52. PROGRAM INCOMPELASTDRIVENDARCYANALYTICDARCYEXAMPLE
  53. !
  54. !================================================================================================================================
  55. !
  56. !PROGRAM LIBRARIES
  57. USE OPENCMISS
  58. USE FLUID_MECHANICS_IO_ROUTINES
  59. USE MPI
  60. #ifdef WIN32
  61. USE IFQWINCMISS
  62. #endif
  63. !
  64. !================================================================================================================================
  65. !
  66. !PROGRAM VARIABLES AND TYPES
  67. IMPLICIT NONE
  68. !Test program parameters
  69. REAL(CMISSDP), PARAMETER :: HEIGHT=1.0_CMISSDP
  70. REAL(CMISSDP), PARAMETER :: WIDTH=1.0_CMISSDP
  71. REAL(CMISSDP), PARAMETER :: LENGTH=1.0_CMISSDP
  72. INTEGER(CMISSIntg), PARAMETER :: LinearBasisUserNumber=1
  73. INTEGER(CMISSIntg), PARAMETER :: QuadraticBasisUserNumber=2
  74. INTEGER(CMISSIntg), PARAMETER :: CubicBasisUserNumber=3
  75. INTEGER(CMISSIntg), PARAMETER :: CoordinateSystemUserNumber=1
  76. INTEGER(CMISSIntg), PARAMETER :: RegionUserNumber=2
  77. INTEGER(CMISSIntg), PARAMETER :: MeshUserNumber=3
  78. INTEGER(CMISSIntg), PARAMETER :: DecompositionUserNumber=4
  79. INTEGER(CMISSIntg), PARAMETER :: GeometricFieldUserNumber=5
  80. INTEGER(CMISSIntg), PARAMETER :: DependentFieldUserNumberDarcy=6
  81. INTEGER(CMISSIntg), PARAMETER :: DependentFieldUserNumberMatProperties=42
  82. INTEGER(CMISSIntg), PARAMETER :: MaterialsFieldUserNumberDarcy=8
  83. INTEGER(CMISSIntg), PARAMETER :: MaterialsFieldUserNumberMatProperties=9
  84. INTEGER(CMISSIntg), PARAMETER :: EquationsSetUserNumberDarcy=12
  85. INTEGER(CMISSIntg), PARAMETER :: EquationsSetUserNumberMatProperties=13
  86. INTEGER(CMISSIntg), PARAMETER :: ProblemUserNumber=14
  87. INTEGER(CMISSIntg), PARAMETER :: IndependentFieldUserNumberSolid=15
  88. INTEGER(CMISSIntg), PARAMETER :: EquationsSetFieldUserNumberDarcy=22
  89. INTEGER(CMISSIntg), PARAMETER :: EquationsSetFieldUserNumberMatProperties=23
  90. INTEGER(CMISSIntg), PARAMETER :: AnalyticFieldUserNumberDarcy=27
  91. INTEGER(CMISSIntg), PARAMETER :: NumberOfDomains=1
  92. INTEGER(CMISSIntg), PARAMETER :: ControlLoopSolidNumber=1
  93. INTEGER(CMISSIntg), PARAMETER :: ControlLoopFluidNumber=2
  94. INTEGER(CMISSIntg), PARAMETER :: ControlLoopSubiterationNumber=1
  95. INTEGER(CMISSIntg), PARAMETER :: SolverSolidIndex=1
  96. INTEGER(CMISSIntg), PARAMETER :: SolverMatPropertiesIndex=1
  97. INTEGER(CMISSIntg), PARAMETER :: SolverDarcyIndex=2
  98. INTEGER(CMISSIntg), PARAMETER :: MaterialsFieldUserNumberDarcyPorosity=1
  99. INTEGER(CMISSIntg), PARAMETER :: MaterialsFieldUserNumberDarcyPermOverVis=2
  100. INTEGER(CMISSIntg), PARAMETER :: MaterialsFieldUserNumberMatPropertiesPorosity=1
  101. INTEGER(CMISSIntg), PARAMETER :: MaterialsFieldUserNumberMatPropertiesPermOverVis=2
  102. INTEGER(CMISSIntg), PARAMETER :: FieldGeometryNumberOfVariables=1
  103. INTEGER(CMISSIntg), PARAMETER :: FieldGeometryNumberOfComponents=3
  104. !Program types
  105. TYPE(EXPORT_CONTAINER):: CM
  106. !Program variables
  107. INTEGER(CMISSIntg) :: NUMBER_GLOBAL_X_ELEMENTS,NUMBER_GLOBAL_Y_ELEMENTS,NUMBER_GLOBAL_Z_ELEMENTS
  108. INTEGER(CMISSIntg) :: NUMBER_OF_DOMAINS
  109. INTEGER(CMISSIntg) :: MPI_IERROR
  110. INTEGER(CMISSIntg) :: NUMBER_OF_DIMENSIONS
  111. INTEGER(CMISSIntg) :: MAXIMUM_ITERATIONS
  112. INTEGER(CMISSIntg) :: RESTART_VALUE
  113. INTEGER(CMISSIntg) :: EQUATIONS_DARCY_OUTPUT
  114. INTEGER(CMISSIntg) :: EQUATIONS_MAT_PROPERTIES_OUTPUT
  115. INTEGER(CMISSIntg) :: COMPONENT_NUMBER
  116. INTEGER(CMISSIntg) :: NODE_NUMBER
  117. INTEGER(CMISSIntg) :: ELEMENT_NUMBER
  118. INTEGER(CMISSIntg) :: CONDITION
  119. INTEGER(CMISSIntg) :: DYNAMIC_SOLVER_DARCY_OUTPUT_FREQUENCY
  120. INTEGER(CMISSIntg) :: DYNAMIC_SOLVER_DARCY_OUTPUT_TYPE
  121. INTEGER(CMISSIntg) :: LINEAR_SOLVER_DARCY_OUTPUT_TYPE
  122. INTEGER(CMISSIntg) :: LINEAR_SOLVER_MAT_PROPERTIES_OUTPUT_TYPE
  123. REAL(CMISSDP) :: COORD_X, COORD_Y, COORD_Z
  124. REAL(CMISSDP) :: DOMAIN_X1, DOMAIN_X2, DOMAIN_Y1, DOMAIN_Y2, DOMAIN_Z1, DOMAIN_Z2
  125. REAL(CMISSDP) :: GEOMETRY_TOLERANCE
  126. INTEGER(CMISSIntg) :: EDGE_COUNT
  127. INTEGER(CMISSIntg) :: NUMBER_OF_COMPONENTS_DEPENDENT_FIELD_MAT_PROPERTIES
  128. INTEGER(CMISSIntg) :: BASIS_XI_INTERPOLATION_SOLID
  129. REAL(CMISSDP) :: INITIAL_FIELD_DARCY(4)
  130. REAL(CMISSDP) :: INITIAL_FIELD_MAT_PROPERTIES(3)
  131. REAL(CMISSDP) :: INITIAL_FIELD_SOLID(4)
  132. REAL(CMISSDP) :: DIVERGENCE_TOLERANCE
  133. REAL(CMISSDP) :: RELATIVE_TOLERANCE
  134. REAL(CMISSDP) :: ABSOLUTE_TOLERANCE
  135. REAL(CMISSDP) :: LINESEARCH_ALPHA
  136. REAL(CMISSDP) :: VALUE
  137. REAL(CMISSDP) :: POROSITY_PARAM_MAT_PROPERTIES, PERM_OVER_VIS_PARAM_MAT_PROPERTIES
  138. REAL(CMISSDP) :: POROSITY_PARAM_DARCY, PERM_OVER_VIS_PARAM_DARCY
  139. LOGICAL :: EXPORT_FIELD_IO
  140. LOGICAL :: LINEAR_SOLVER_DARCY_DIRECT_FLAG
  141. LOGICAL :: LINEAR_SOLVER_MAT_PROPERTIES_DIRECT_FLAG
  142. !CMISS variables
  143. !Regions
  144. TYPE(CMISSRegionType) :: Region
  145. TYPE(CMISSRegionType) :: WorldRegion
  146. !Coordinate systems
  147. TYPE(CMISSCoordinateSystemType) :: CoordinateSystem
  148. TYPE(CMISSCoordinateSystemType) :: WorldCoordinateSystem
  149. !Basis
  150. TYPE(CMISSBasisType) :: BasisGeometry
  151. TYPE(CMISSBasisType) :: BasisVelocity
  152. TYPE(CMISSBasisType) :: BasisPressure
  153. TYPE(CMISSBasisType) :: CubicBasis, QuadraticBasis, LinearBasis, Bases(2)
  154. !Nodes
  155. TYPE(CMISSNodesType) :: Nodes
  156. !Elements
  157. TYPE(CMISSMeshElementsType) :: MeshElementsGeometry
  158. TYPE(CMISSMeshElementsType) :: MeshElementsVelocity
  159. TYPE(CMISSMeshElementsType) :: MeshElementsPressure
  160. !Meshes
  161. TYPE(CMISSMeshType) :: Mesh
  162. TYPE(CMISSGeneratedMeshType) :: GeneratedMesh
  163. !Decompositions
  164. TYPE(CMISSDecompositionType) :: Decomposition
  165. !Fields
  166. TYPE(CMISSFieldsType) :: Fields
  167. !Field types
  168. TYPE(CMISSFieldType) :: GeometricField
  169. TYPE(CMISSFieldType) :: DependentFieldMatProperties
  170. TYPE(CMISSFieldType) :: MaterialsFieldDarcy
  171. TYPE(CMISSFieldType) :: MaterialsFieldMatProperties
  172. TYPE(CMISSFieldType) :: EquationsSetFieldDarcy
  173. TYPE(CMISSFieldType) :: EquationsSetFieldMatProperties
  174. TYPE(CMISSFieldType) :: IndependentFieldSolid
  175. TYPE(CMISSFieldType) :: AnalyticFieldDarcy
  176. !Boundary conditions
  177. TYPE(CMISSBoundaryConditionsType) :: BoundaryConditionsDarcy
  178. TYPE(CMISSBoundaryConditionsType) :: BoundaryConditionsMatProperties
  179. !Equations sets
  180. TYPE(CMISSEquationsSetType) :: EquationsSetDarcy
  181. TYPE(CMISSEquationsSetType) :: EquationsSetMatProperties
  182. !Equations
  183. TYPE(CMISSEquationsType) :: EquationsDarcy
  184. TYPE(CMISSEquationsType) :: EquationsMatProperties
  185. !Problems
  186. TYPE(CMISSProblemType) :: Problem
  187. !Control loops
  188. TYPE(CMISSControlLoopType) :: ControlLoop
  189. !Solvers
  190. TYPE(CMISSSolverType) :: DynamicSolverDarcy
  191. TYPE(CMISSSolverType) :: LinearSolverDarcy
  192. TYPE(CMISSSolverType) :: LinearSolverMatProperties
  193. TYPE(CMISSSolverType) :: LinearSolverSolid
  194. !Solver equations
  195. TYPE(CMISSSolverEquationsType) :: SolverEquationsDarcy
  196. TYPE(CMISSSolverEquationsType) :: SolverEquationsMatProperties
  197. #ifdef WIN32
  198. !Quickwin type
  199. LOGICAL :: QUICKWIN_STATUS=.FALSE.
  200. TYPE(WINDOWCONFIG) :: QUICKWIN_WINDOW_CONFIG
  201. #endif
  202. !Generic CMISS variables
  203. INTEGER(CMISSIntg) :: EquationsSetIndex
  204. INTEGER(CMISSIntg) :: Err
  205. INTEGER(CMISSIntg) :: DIAG_LEVEL_LIST(5)
  206. ! CHARACTER(LEN=255) :: DIAG_ROUTINE_LIST(8) !,TIMING_ROUTINE_LIST(1)
  207. CHARACTER(LEN=255) :: DIAG_ROUTINE_LIST(1) !,TIMING_ROUTINE_LIST(1)
  208. !
  209. !--------------------------------------------------------------------------------------------------------------------------------
  210. !
  211. !Program variables and types (finite elasticity part)
  212. !Test program parameters
  213. INTEGER(CMISSIntg) :: BASIS_NUMBER_SOLID
  214. INTEGER(CMISSIntg) :: TotalNumberOfSolidNodes
  215. INTEGER(CMISSIntg) :: SolidMeshComponenetNumber
  216. INTEGER(CMISSIntg) :: SolidPressureMeshComponenetNumber
  217. INTEGER(CMISSIntg), PARAMETER :: FieldGeometrySolidUserNumber=1
  218. INTEGER(CMISSIntg), PARAMETER :: FieldGeometrySolidNumberOfVariables=1
  219. INTEGER(CMISSIntg), PARAMETER :: FieldGeometrySolidNumberOfComponents=3
  220. INTEGER(CMISSIntg), PARAMETER :: FieldFibreSolidUserNumber=2
  221. INTEGER(CMISSIntg), PARAMETER :: FieldFibreSolidNumberOfVariables=1
  222. INTEGER(CMISSIntg), PARAMETER :: FieldFibreSolidNumberOfComponents=3
  223. INTEGER(CMISSIntg), PARAMETER :: FieldMaterialSolidUserNumber=3
  224. INTEGER(CMISSIntg), PARAMETER :: FieldMaterialSolidNumberOfVariables=1
  225. INTEGER(CMISSIntg), PARAMETER :: FieldMaterialSolidNumberOfComponents=3
  226. INTEGER(CMISSIntg), PARAMETER :: FieldDependentSolidUserNumber=4
  227. INTEGER(CMISSIntg), PARAMETER :: FieldDependentSolidNumberOfVariables=4
  228. INTEGER(CMISSIntg), PARAMETER :: FieldDependentSolidNumberOfComponents=4
  229. INTEGER(CMISSIntg), PARAMETER :: FieldDependentFluidNumberOfComponents=4 !(u,v,w,m)
  230. INTEGER(CMISSIntg), PARAMETER :: EquationSetSolidUserNumber=1
  231. INTEGER(CMISSIntg), PARAMETER :: EquationsSetFieldSolidUserNumber=25
  232. INTEGER(CMISSIntg), PARAMETER :: DisplacementMeshComponentNumber=1
  233. INTEGER(CMISSIntg), PARAMETER :: PressureMeshComponentNumber=2
  234. INTEGER(CMISSIntg), PARAMETER :: GeneratedMeshUserNumber=32
  235. !Program types
  236. !Program variables
  237. REAL(CMISSDP) :: DYNAMIC_SOLVER_DARCY_START_TIME
  238. REAL(CMISSDP) :: DYNAMIC_SOLVER_DARCY_STOP_TIME
  239. REAL(CMISSDP) :: DYNAMIC_SOLVER_DARCY_THETA
  240. REAL(CMISSDP) :: DYNAMIC_SOLVER_DARCY_TIME_INCREMENT
  241. !CMISS variables
  242. TYPE(CMISSBasisType) :: BasisSolid
  243. TYPE(CMISSBoundaryConditionsType) :: BoundaryConditionsSolid
  244. TYPE(CMISSEquationsType) :: EquationsSolid
  245. TYPE(CMISSEquationsSetType) :: EquationsSetSolid
  246. TYPE(CMISSFieldType) :: GeometricFieldSolid,FibreFieldSolid,MaterialFieldSolid
  247. TYPE(CMISSFieldType) :: DependentFieldSolid,EquationsSetFieldSolid
  248. TYPE(CMISSSolverType) :: SolverSolid
  249. TYPE(CMISSSolverEquationsType) :: SolverEquationsSolid
  250. TYPE(CMISSMeshElementsType) :: MeshElementsSolid
  251. !End - Program variables and types (finite elasticity part)
  252. !
  253. !--------------------------------------------------------------------------------------------------------------------------------
  254. !
  255. #ifdef WIN32
  256. !Initialise QuickWin
  257. QUICKWIN_WINDOW_CONFIG%TITLE="General Output" !Window title
  258. QUICKWIN_WINDOW_CONFIG%NUMTEXTROWS=-1 !Max possible number of rows
  259. QUICKWIN_WINDOW_CONFIG%MODE=QWIN$SCROLLDOWN
  260. !Set the window parameters
  261. QUICKWIN_STATUS=SETWINDOWCONFIG(QUICKWIN_WINDOW_CONFIG)
  262. !If attempt fails set with system estimated values
  263. IF(.NOT.QUICKWIN_STATUS) QUICKWIN_STATUS=SETWINDOWCONFIG(QUICKWIN_WINDOW_CONFIG)
  264. #endif
  265. !
  266. !================================================================================================================================
  267. !
  268. NUMBER_GLOBAL_X_ELEMENTS=2
  269. NUMBER_GLOBAL_Y_ELEMENTS=2
  270. NUMBER_GLOBAL_Z_ELEMENTS=2
  271. IF(NUMBER_GLOBAL_Z_ELEMENTS==0)THEN
  272. NUMBER_OF_DIMENSIONS=2
  273. ELSE
  274. NUMBER_OF_DIMENSIONS=3
  275. ENDIF
  276. !PROBLEM CONTROL PANEL
  277. !Import cmHeart mesh information
  278. !CALL FLUID_MECHANICS_IO_READ_CMHEART(CM,Err)
  279. BASIS_XI_INTERPOLATION_SOLID=CMISS_BASIS_LINEAR_LAGRANGE_INTERPOLATION
  280. !Set geometric tolerance
  281. GEOMETRY_TOLERANCE = 1.0E-12_CMISSDP
  282. !Set initial values
  283. INITIAL_FIELD_DARCY(1)=0.0_CMISSDP
  284. INITIAL_FIELD_DARCY(2)=0.0_CMISSDP
  285. INITIAL_FIELD_DARCY(3)=0.0_CMISSDP
  286. INITIAL_FIELD_DARCY(4)=0.0_CMISSDP
  287. INITIAL_FIELD_MAT_PROPERTIES(1)=0.0_CMISSDP
  288. INITIAL_FIELD_MAT_PROPERTIES(2)=0.0_CMISSDP
  289. INITIAL_FIELD_MAT_PROPERTIES(3)=0.0_CMISSDP
  290. ! INITIAL_FIELD_SOLID(1)=1.0_CMISSDP
  291. ! INITIAL_FIELD_SOLID(2)=1.0_CMISSDP
  292. ! INITIAL_FIELD_SOLID(3)=1.0_CMISSDP
  293. ! INITIAL_FIELD_SOLID(4)=1.0_CMISSDP
  294. !Set material parameters
  295. POROSITY_PARAM_DARCY=0.1_CMISSDP
  296. PERM_OVER_VIS_PARAM_DARCY=1.0e-1_CMISSDP
  297. ! PERM_OVER_VIS_PARAM_DARCY=0.1_CMISSDP
  298. POROSITY_PARAM_MAT_PROPERTIES=POROSITY_PARAM_DARCY
  299. PERM_OVER_VIS_PARAM_MAT_PROPERTIES=PERM_OVER_VIS_PARAM_DARCY
  300. !Set output parameter
  301. !(NoOutput/ProgressOutput/TimingOutput/SolverOutput/SolverMatrixOutput)
  302. LINEAR_SOLVER_MAT_PROPERTIES_OUTPUT_TYPE=CMISS_SOLVER_PROGRESS_OUTPUT
  303. DYNAMIC_SOLVER_DARCY_OUTPUT_TYPE=CMISS_SOLVER_PROGRESS_OUTPUT
  304. LINEAR_SOLVER_DARCY_OUTPUT_TYPE=CMISS_SOLVER_SOLVER_OUTPUT
  305. !(NoOutput/TimingOutput/MatrixOutput/ElementOutput)
  306. EQUATIONS_DARCY_OUTPUT=CMISS_EQUATIONS_NO_OUTPUT
  307. EQUATIONS_MAT_PROPERTIES_OUTPUT=CMISS_EQUATIONS_NO_OUTPUT
  308. !Set time parameter
  309. DYNAMIC_SOLVER_DARCY_START_TIME=0.0_CMISSDP
  310. ! DYNAMIC_SOLVER_DARCY_STOP_TIME=0.03_CMISSDP
  311. DYNAMIC_SOLVER_DARCY_TIME_INCREMENT=1.0e-2_CMISSDP
  312. DYNAMIC_SOLVER_DARCY_STOP_TIME=2_CMISSIntg * DYNAMIC_SOLVER_DARCY_TIME_INCREMENT
  313. DYNAMIC_SOLVER_DARCY_THETA=1.0_CMISSDP !2.0_CMISSDP/3.0_CMISSDP
  314. !Set result output parameter
  315. DYNAMIC_SOLVER_DARCY_OUTPUT_FREQUENCY=1
  316. !Set solver parameters
  317. LINEAR_SOLVER_MAT_PROPERTIES_DIRECT_FLAG=.TRUE.
  318. LINEAR_SOLVER_DARCY_DIRECT_FLAG=.TRUE.
  319. RELATIVE_TOLERANCE=1.0E-10_CMISSDP !default: 1.0E-05_CMISSDP
  320. ABSOLUTE_TOLERANCE=1.0E-10_CMISSDP !default: 1.0E-10_CMISSDP
  321. DIVERGENCE_TOLERANCE=1.0E5_CMISSDP !default: 1.0E5
  322. MAXIMUM_ITERATIONS=10000_CMISSIntg !default: 100000
  323. RESTART_VALUE=30_CMISSIntg !default: 30
  324. LINESEARCH_ALPHA=1.0_CMISSDP
  325. !
  326. !================================================================================================================================
  327. !
  328. !INITIALISE OPENCMISS
  329. CALL CMISSInitialise(WorldCoordinateSystem,WorldRegion,Err)
  330. !CALL CMISSErrorHandlingModeSet(CMISS_ERRORS_TRAP_ERROR,Err)
  331. !
  332. !================================================================================================================================
  333. !
  334. !Set diagnostics
  335. DIAG_LEVEL_LIST(1)=1
  336. DIAG_LEVEL_LIST(2)=2
  337. DIAG_LEVEL_LIST(3)=3
  338. DIAG_LEVEL_LIST(4)=4
  339. DIAG_LEVEL_LIST(5)=5
  340. ! DIAG_ROUTINE_LIST(1)="DARCY_EQUATION_FINITE_ELEMENT_CALCULATE"
  341. ! DIAG_ROUTINE_LIST(2)="DARCY_EQUATION_PRE_SOLVE_STORE_REFERENCE_DATA"
  342. ! DIAG_ROUTINE_LIST(1)="DARCY_EQUATION_PRE_SOLVE_GET_SOLID_DISPLACEMENT"
  343. ! DIAG_ROUTINE_LIST(2)="DARCY_EQUATION_PRE_SOLVE_ALE_UPDATE_MESH"
  344. ! DIAG_ROUTINE_LIST(1)="DARCY_EQUATION_PRE_SOLVE_GET_SOLID_DISPLACEMENT"
  345. ! DIAG_ROUTINE_LIST(1)="DARCY_EQUATION_PRE_SOLVE_UPDATE_BOUNDARY_CONDITIONS"
  346. ! DIAG_ROUTINE_LIST(1)="FINITE_ELASTICITY_FINITE_ELEMENT_RESIDUAL_EVALUATE"
  347. ! DIAG_ROUTINE_LIST(1)="DARCY_EQUATION_POST_SOLVE_ADD_MASS_CORRECTION"
  348. DIAG_ROUTINE_LIST(1)="WRITE_IP_INFO"
  349. ! DIAG_ROUTINE_LIST(2)="FINITE_ELASTICITY_GAUSS_CAUCHY_TENSOR"
  350. ! DIAG_ROUTINE_LIST(3)="EVALUATE_CHAPELLE_PIOLA_TENSOR_ADDITION"
  351. ! DIAG_ROUTINE_LIST(5)="DARCY_EQUATION_PRE_SOLVE_MAT_PROPERTIES"
  352. ! DIAG_ROUTINE_LIST(6)="FITTING_FINITE_ELEMENT_CALCULATE"
  353. ! DIAG_ROUTINE_LIST(7)="FINITE_ELASTICITY_FINITE_ELEMENT_JACOBIAN_EVALUATE"
  354. ! DIAG_ROUTINE_LIST(8)="FINITE_ELASTICITY_FINITE_ELEMENT_RESIDUAL_EVALUATE"
  355. ! DIAG_ROUTINE_LIST(1)="PROBLEM_SOLVER_EQUATIONS_SOLVE"
  356. ! DIAG_ROUTINE_LIST(1)="SOLVER_NEWTON_SOLVE"
  357. ! DIAG_ROUTINE_LIST(2)="SOLVER_NEWTON_LINESEARCH_SOLVE"
  358. ! DIAG_ROUTINE_LIST(1)="SOLVER_SOLUTION_UPDATE"
  359. ! DIAG_ROUTINE_LIST(1)="FINITE_ELASTICITY_FINITE_ELEMENT_RESIDUAL_EVALUATE"
  360. !CMISS_ALL_DIAG_TYPE/CMISS_IN_DIAG_TYPE/CMISS_FROM_DIAG_TYPE
  361. CALL CMISSDiagnosticsSetOn(CMISS_IN_DIAG_TYPE,DIAG_LEVEL_LIST,"Diagnostics",DIAG_ROUTINE_LIST,Err)
  362. !CMISS_ALL_TIMING_TYPE/CMISS_IN_TIMING_TYPE/CMISS_FROM_TIMING_TYPE
  363. !TIMING_ROUTINE_LIST(1)="PROBLEM_FINITE_ELEMENT_CALCULATE"
  364. !CALL TIMING_SET_ON(IN_TIMING_TYPE,.TRUE.,"",TIMING_ROUTINE_LIST,ERR,ERROR,*999)
  365. !
  366. !================================================================================================================================
  367. !
  368. !COORDINATE SYSTEM
  369. !Start the creation of a new RC coordinate system
  370. CALL CMISSCoordinateSystem_Initialise(CoordinateSystem,Err)
  371. CALL CMISSCoordinateSystem_CreateStart(CoordinateSystemUserNumber,CoordinateSystem,Err)
  372. !Set the coordinate system dimension
  373. CALL CMISSCoordinateSystem_DimensionSet(CoordinateSystem,NUMBER_OF_DIMENSIONS,Err)
  374. !Finish the creation of the coordinate system
  375. CALL CMISSCoordinateSystem_CreateFinish(CoordinateSystem,Err)
  376. !
  377. !================================================================================================================================
  378. !
  379. !REGION
  380. !For a volume-coupled problem, solid and fluid are based in the same region
  381. !Start the creation of a new region
  382. CALL CMISSRegion_Initialise(Region,Err)
  383. CALL CMISSRegion_CreateStart(RegionUserNumber,WorldRegion,Region,Err)
  384. !Set the regions coordinate system as defined above
  385. CALL CMISSRegion_CoordinateSystemSet(Region,CoordinateSystem,Err)
  386. !Finish the creation of the region
  387. CALL CMISSRegion_CreateFinish(Region,Err)
  388. !
  389. !================================================================================================================================
  390. !
  391. !BASES
  392. !Define basis functions
  393. CALL CMISSBasis_Initialise(LinearBasis,Err)
  394. CALL CMISSBasis_CreateStart(LinearBasisUserNumber,LinearBasis,Err)
  395. CALL CMISSBasis_QuadratureNumberOfGaussXiSet(LinearBasis, &
  396. & (/CMISS_BASIS_HIGH_QUADRATURE_SCHEME,CMISS_BASIS_HIGH_QUADRATURE_SCHEME,CMISS_BASIS_HIGH_QUADRATURE_SCHEME/),Err)
  397. !CALL CMISSBasis_QuadratureLocalFaceGaussEvaluateSet(LinearBasis,.true.,Err)
  398. CALL CMISSBasis_CreateFinish(LinearBasis,Err)
  399. CALL CMISSBasis_Initialise(QuadraticBasis,Err)
  400. CALL CMISSBasis_CreateStart(QuadraticBasisUserNumber,QuadraticBasis,Err)
  401. CALL CMISSBasis_InterpolationXiSet(QuadraticBasis,(/CMISS_BASIS_QUADRATIC_LAGRANGE_INTERPOLATION, &
  402. & CMISS_BASIS_QUADRATIC_LAGRANGE_INTERPOLATION,CMISS_BASIS_QUADRATIC_LAGRANGE_INTERPOLATION/),Err)
  403. CALL CMISSBasis_QuadratureNumberOfGaussXiSet(QuadraticBasis, &
  404. & (/CMISS_BASIS_HIGH_QUADRATURE_SCHEME,CMISS_BASIS_HIGH_QUADRATURE_SCHEME,CMISS_BASIS_HIGH_QUADRATURE_SCHEME/),Err)
  405. !CALL CMISSBasis_QuadratureLocalFaceGaussEvaluateSet(QuadraticBasis,.true.,Err)
  406. CALL CMISSBasis_CreateFinish(QuadraticBasis,Err)
  407. CALL CMISSBasis_Initialise(CubicBasis,Err)
  408. CALL CMISSBasis_CreateStart(CubicBasisUserNumber,CubicBasis,Err)
  409. CALL CMISSBasis_InterpolationXiSet(CubicBasis,(/CMISS_BASIS_CUBIC_LAGRANGE_INTERPOLATION, &
  410. & CMISS_BASIS_CUBIC_LAGRANGE_INTERPOLATION,CMISS_BASIS_CUBIC_LAGRANGE_INTERPOLATION/),Err)
  411. CALL CMISSBasis_QuadratureNumberOfGaussXiSet(CubicBasis, &
  412. & (/CMISS_BASIS_HIGH_QUADRATURE_SCHEME,CMISS_BASIS_HIGH_QUADRATURE_SCHEME,CMISS_BASIS_HIGH_QUADRATURE_SCHEME/),Err)
  413. !CALL CMISSBasis_QuadratureLocalFaceGaussEvaluateSet(CubicBasis,.true.,Err) !Enable 3D interpolation on faces
  414. CALL CMISSBasis_CreateFinish(CubicBasis,Err)
  415. Bases(1)=CubicBasis
  416. Bases(2)=QuadraticBasis
  417. !Start the creation of a generated mesh in the region
  418. CALL CMISSGeneratedMesh_Initialise(GeneratedMesh,Err)
  419. CALL CMISSGeneratedMesh_CreateStart(GeneratedMeshUserNumber,Region,GeneratedMesh,Err)
  420. !Set up a regular x*y*z mesh
  421. CALL CMISSGeneratedMesh_TypeSet(GeneratedMesh,CMISS_GENERATED_MESH_REGULAR_MESH_TYPE,Err)
  422. !Set the default basis
  423. !CALL CMISSGeneratedMesh_BasisSet(GeneratedMesh,BasisGeometry,Err)
  424. CALL CMISSGeneratedMesh_BasisSet(GeneratedMesh,Bases,Err)
  425. !Define the mesh on the region
  426. IF(NUMBER_GLOBAL_Z_ELEMENTS==0) THEN
  427. CALL CMISSGeneratedMesh_ExtentSet(GeneratedMesh,(/WIDTH,HEIGHT/),Err)
  428. CALL CMISSGeneratedMesh_NumberOfElementsSet(GeneratedMesh,(/NUMBER_GLOBAL_X_ELEMENTS,NUMBER_GLOBAL_Y_ELEMENTS/),Err)
  429. ELSE
  430. CALL CMISSGeneratedMesh_ExtentSet(GeneratedMesh,(/WIDTH,HEIGHT,LENGTH/),Err)
  431. CALL CMISSGeneratedMesh_NumberOfElementsSet(GeneratedMesh,(/NUMBER_GLOBAL_X_ELEMENTS,NUMBER_GLOBAL_Y_ELEMENTS, &
  432. & NUMBER_GLOBAL_Z_ELEMENTS/),Err)
  433. ENDIF
  434. !Finish the creation of a generated mesh in the region
  435. CALL CMISSMesh_Initialise(Mesh,Err)
  436. CALL CMISSGeneratedMesh_CreateFinish(GeneratedMesh,MeshUserNumber,Mesh,Err)
  437. !GEOMETRIC FIELD
  438. !Create a decomposition:
  439. !All mesh components (associated with G.Projection / Darcy / solid) share the same decomposition
  440. CALL CMISSDecomposition_Initialise(Decomposition,Err)
  441. CALL CMISSDecomposition_CreateStart(DecompositionUserNumber,Mesh,Decomposition,Err)
  442. !Set the decomposition to be a general decomposition with the specified number of domains
  443. CALL CMISSDecomposition_TypeSet(Decomposition,CMISS_DECOMPOSITION_CALCULATED_TYPE,Err)
  444. CALL CMISSDecomposition_NumberOfDomainsSet(Decomposition,NumberOfDomains,Err)
  445. !Finish the decomposition
  446. CALL CMISSDecomposition_CreateFinish(Decomposition,Err)
  447. !Start to create a default (geometric) field on the region
  448. CALL CMISSField_Initialise(GeometricField,Err)
  449. CALL CMISSField_CreateStart(GeometricFieldUserNumber,Region,GeometricField,Err)
  450. CALL CMISSField_MeshDecompositionSet(GeometricField,Decomposition,Err)
  451. !Set the field type
  452. CALL CMISSField_TypeSet(GeometricField,CMISS_FIELD_GEOMETRIC_TYPE,Err)
  453. !Set the decomposition to use
  454. CALL CMISSField_NumberOfVariablesSet(GeometricField,FieldGeometryNumberOfVariables,Err)
  455. CALL CMISSField_NumberOfComponentsSet(GeometricField,CMISS_FIELD_U_VARIABLE_TYPE,3,Err)
  456. CALL CMISSField_ComponentMeshComponentSet(GeometricField,CMISS_FIELD_U_VARIABLE_TYPE,1,DisplacementMeshComponentNumber,Err)
  457. CALL CMISSField_ComponentMeshComponentSet(GeometricField,CMISS_FIELD_U_VARIABLE_TYPE,2,DisplacementMeshComponentNumber,Err)
  458. CALL CMISSField_ComponentMeshComponentSet(GeometricField,CMISS_FIELD_U_VARIABLE_TYPE,3,DisplacementMeshComponentNumber,Err)
  459. CALL CMISSField_CreateFinish(GeometricField,Err)
  460. !Set the mesh component to be used by the field components.
  461. CALL CMISSGeneratedMesh_GeometricParametersCalculate(GeneratedMesh,GeometricField,Err)
  462. ! !Update the geometric field parameters
  463. ! DO NODE_NUMBER=1,NUMBER_OF_NODES_GEOMETRY
  464. ! DO COMPONENT_NUMBER=1,NUMBER_OF_DIMENSIONS
  465. ! VALUE=CM%N(NODE_NUMBER,COMPONENT_NUMBER)
  466. ! CALL CMISSField_ParameterSetUpdateNode(GeometricField,CMISS_FIELD_U_VARIABLE_TYPE,CMISS_FIELD_VALUES_SET_TYPE, &
  467. ! & CMISS_NO_GLOBAL_DERIV,NODE_NUMBER,COMPONENT_NUMBER,VALUE,Err)
  468. ! ENDDO
  469. ! ENDDO
  470. ! CALL CMISSField_ParameterSetUpdateStart(GeometricField,CMISS_FIELD_U_VARIABLE_TYPE,CMISS_FIELD_VALUES_SET_TYPE,Err)
  471. ! CALL CMISSField_ParameterSetUpdateFinish(GeometricField,CMISS_FIELD_U_VARIABLE_TYPE,CMISS_FIELD_VALUES_SET_TYPE,Err)
  472. !--------------------------------------------------------------------------------------------------------------------------------
  473. ! Solid
  474. !Create a decomposition
  475. ! !Create a field to put the geometry (defualt is geometry)
  476. ! CALL CMISSField_Initialise(GeometricFieldSolid,Err)
  477. ! CALL CMISSField_CreateStart(FieldGeometrySolidUserNumber,Region,GeometricFieldSolid,Err)
  478. ! CALL CMISSField_MeshDecompositionSet(GeometricFieldSolid,Decomposition,Err)
  479. ! CALL CMISSField_TypeSet(GeometricFieldSolid,CMISS_FIELD_GEOMETRIC_TYPE,Err)
  480. ! CALL CMISSField_NumberOfVariablesSet(GeometricFieldSolid,FieldGeometrySolidNumberOfVariables,Err)
  481. ! CALL CMISSField_NumberOfComponentsSet(GeometricFieldSolid,CMISS_FIELD_U_VARIABLE_TYPE,FieldGeometrySolidNumberOfComponents,Err)
  482. ! CALL CMISSField_ComponentMeshComponentSet(GeometricFieldSolid,CMISS_FIELD_U_VARIABLE_TYPE,1,SolidMeshComponenetNumber,Err)
  483. ! CALL CMISSField_ComponentMeshComponentSet(GeometricFieldSolid,CMISS_FIELD_U_VARIABLE_TYPE,2,SolidMeshComponenetNumber,Err)
  484. ! CALL CMISSField_ComponentMeshComponentSet(GeometricFieldSolid,CMISS_FIELD_U_VARIABLE_TYPE,3,SolidMeshComponenetNumber,Err)
  485. ! CALL CMISSField_CreateFinish(GeometricFieldSolid,Err)
  486. !
  487. ! !---
  488. ! !Update the geometric field parameters
  489. ! DO NODE_NUMBER=1,NUMBER_OF_NODES_GEOMETRY
  490. ! DO COMPONENT_NUMBER=1,NUMBER_OF_DIMENSIONS
  491. ! VALUE=CM%N(NODE_NUMBER,COMPONENT_NUMBER)
  492. ! CALL CMISSField_ParameterSetUpdateNode(GeometricFieldSolid,CMISS_FIELD_U_VARIABLE_TYPE,CMISS_FIELD_VALUES_SET_TYPE, &
  493. ! & CMISS_NO_GLOBAL_DERIV,NODE_NUMBER,COMPONENT_NUMBER,VALUE,Err)
  494. ! ENDDO
  495. ! ENDDO
  496. ! CALL CMISSField_ParameterSetUpdateStart(GeometricFieldSolid,CMISS_FIELD_U_VARIABLE_TYPE,CMISS_FIELD_VALUES_SET_TYPE,Err)
  497. ! CALL CMISSField_ParameterSetUpdateFinish(GeometricFieldSolid,CMISS_FIELD_U_VARIABLE_TYPE,CMISS_FIELD_VALUES_SET_TYPE,Err)
  498. !---
  499. !Create a fibre field and attach it to the geometric field
  500. CALL CMISSField_Initialise(FibreFieldSolid,Err)
  501. CALL CMISSField_CreateStart(FieldFibreSolidUserNumber,Region,FibreFieldSolid,Err)
  502. CALL CMISSField_TypeSet(FibreFieldSolid,CMISS_FIELD_FIBRE_TYPE,Err)
  503. CALL CMISSField_MeshDecompositionSet(FibreFieldSolid,Decomposition,Err)
  504. CALL CMISSField_GeometricFieldSet(FibreFieldSolid,GeometricField,Err)
  505. CALL CMISSField_NumberOfVariablesSet(FibreFieldSolid,FieldFibreSolidNumberOfVariables,Err)
  506. CALL CMISSField_NumberOfComponentsSet(FibreFieldSolid,CMISS_FIELD_U_VARIABLE_TYPE,FieldFibreSolidNumberOfComponents,Err)
  507. CALL CMISSField_ComponentMeshComponentSet(FibreFieldSolid,CMISS_FIELD_U_VARIABLE_TYPE,1,DisplacementMeshComponentNumber,Err)
  508. CALL CMISSField_ComponentMeshComponentSet(FibreFieldSolid,CMISS_FIELD_U_VARIABLE_TYPE,2,DisplacementMeshComponentNumber,Err)
  509. CALL CMISSField_ComponentMeshComponentSet(FibreFieldSolid,CMISS_FIELD_U_VARIABLE_TYPE,3,DisplacementMeshComponentNumber,Err)
  510. CALL CMISSField_CreateFinish(FibreFieldSolid,Err)
  511. ! end Solid
  512. !--------------------------------------------------------------------------------------------------------------------------------
  513. !
  514. !================================================================================================================================
  515. !
  516. !EQUATIONS SETS
  517. !Create the equations set for ALE Darcy
  518. CALL CMISSField_Initialise(EquationsSetFieldDarcy,Err)
  519. CALL CMISSEquationsSet_Initialise(EquationsSetDarcy,Err)
  520. CALL CMISSEquationsSet_CreateStart(EquationsSetUserNumberDarcy,Region,GeometricField,CMISS_EQUATIONS_SET_FLUID_MECHANICS_CLASS, &
  521. & CMISS_EQUATIONS_SET_DARCY_EQUATION_TYPE,CMISS_EQUATIONS_SET_INCOMPRESS_ELASTICITY_DRIVEN_DARCY_SUBTYPE,&
  522. & EquationsSetFieldUserNumberDarcy,EquationsSetFieldDarcy,EquationsSetDarcy,Err)
  523. !Set the equations set to be a ALE Darcy problem
  524. ! CALL CMISSEquationsSet_SpecificationSet(EquationsSetDarcy,CMISS_EQUATIONS_SET_FLUID_MECHANICS_CLASS, &
  525. ! & CMISS_EQUATIONS_SET_DARCY_EQUATION_TYPE,CMISS_EQUATIONS_SET_INCOMPRESS_ELASTICITY_DRIVEN_DARCY_SUBTYPE,Err)
  526. !Finish creating the equations set
  527. CALL CMISSEquationsSet_CreateFinish(EquationsSetDarcy,Err)
  528. !Create the equations set for deformation-dependent material properties
  529. CALL CMISSField_Initialise(EquationsSetFieldMatProperties,Err)
  530. CALL CMISSEquationsSet_Initialise(EquationsSetMatProperties,Err)
  531. ! CALL CMISSEquationsSet_CreateStart(EquationsSetUserNumberMatProperties,Region,GeometricField,CMISS_EQUATIONS_SET_FITTING_CLASS,&
  532. CALL CMISSEquationsSet_CreateStart(EquationsSetUserNumberMatProperties,Region,GeometricField,CMISS_EQUATIONS_SET_FITTING_CLASS,&
  533. & CMISS_EQUATIONS_SET_DATA_FITTING_EQUATION_TYPE,CMISS_EQUATIONS_SET_MAT_PROP_INRIA_MODEL_DATA_FITTING_SUBTYPE,&
  534. & EquationsSetFieldUserNumberMatProperties,EquationsSetFieldMatProperties,EquationsSetMatProperties,Err)
  535. !Set the equations set to be a deformation-dependent material properties problem
  536. ! CALL CMISSEquationsSet_SpecificationSet(EquationsSetMatProperties,CMISS_EQUATIONS_SET_FITTING_CLASS, &
  537. ! & CMISS_EQUATIONS_SET_DATA_FITTING_EQUATION_TYPE,CMISS_EQUATIONS_SET_MAT_PROP_INRIA_MODEL_DATA_FITTING_SUBTYPE,Err)
  538. !Finish creating the equations set
  539. CALL CMISSEquationsSet_CreateFinish(EquationsSetMatProperties,Err)
  540. !--------------------------------------------------------------------------------------------------------------------------------
  541. ! Solid
  542. !Create the equations_set
  543. CALL CMISSField_Initialise(EquationsSetFieldSolid,Err)
  544. CALL CMISSEquationsSet_Initialise(EquationsSetSolid,Err)
  545. CALL CMISSEquationsSet_CreateStart(EquationSetSolidUserNumber,Region,FibreFieldSolid,CMISS_EQUATIONS_SET_ELASTICITY_CLASS, &
  546. & CMISS_EQUATIONS_SET_FINITE_ELASTICITY_TYPE,CMISS_EQUATIONS_SET_INCOMPRESS_ELASTICITY_DRIVEN_DARCY_SUBTYPE,&
  547. & EquationsSetFieldSolidUserNumber,EquationsSetFieldSolid,EquationsSetSolid,Err)
  548. ! CALL CMISSEquationsSet_SpecificationSet(EquationsSetSolid,CMISS_EQUATIONS_SET_ELASTICITY_CLASS, &
  549. ! & CMISS_EQUATIONS_SET_FINITE_ELASTICITY_TYPE,CMISS_EQUATIONS_SET_INCOMPRESS_ELASTICITY_DRIVEN_DARCY_SUBTYPE,Err)
  550. CALL CMISSEquationsSet_CreateFinish(EquationsSetSolid,Err)
  551. ! end Solid
  552. !--------------------------------------------------------------------------------------------------------------------------------
  553. !--------------------------------------------------------------------------------------------------------------------------------
  554. ! Solid Materials Field
  555. !Create a material field and attach it to the geometric field
  556. CALL CMISSField_Initialise(MaterialFieldSolid,Err)
  557. !
  558. CALL CMISSField_CreateStart(FieldMaterialSolidUserNumber,Region,MaterialFieldSolid,Err)
  559. !
  560. CALL CMISSField_TypeSet(MaterialFieldSolid,CMISS_FIELD_MATERIAL_TYPE,Err)
  561. CALL CMISSField_MeshDecompositionSet(MaterialFieldSolid,Decomposition,Err)
  562. CALL CMISSField_GeometricFieldSet(MaterialFieldSolid,GeometricField,Err)
  563. CALL CMISSField_NumberOfVariablesSet(MaterialFieldSolid,FieldMaterialSolidNumberOfVariables,Err)
  564. CALL CMISSField_NumberOfComponentsSet(MaterialFieldSolid,CMISS_FIELD_U_VARIABLE_TYPE,FieldMaterialSolidNumberOfComponents,Err)
  565. CALL CMISSField_ComponentMeshComponentSet(MaterialFieldSolid,CMISS_FIELD_U_VARIABLE_TYPE,1,DisplacementMeshComponentNumber,Err)
  566. CALL CMISSField_ComponentMeshComponentSet(MaterialFieldSolid,CMISS_FIELD_U_VARIABLE_TYPE,2,DisplacementMeshComponentNumber,Err)
  567. CALL CMISSField_ComponentMeshComponentSet(MaterialFieldSolid,CMISS_FIELD_U_VARIABLE_TYPE,3,DisplacementMeshComponentNumber,Err)
  568. !
  569. CALL CMISSField_CreateFinish(MaterialFieldSolid,Err)
  570. !Set material parameters
  571. CALL CMISSField_ComponentValuesInitialise(MaterialFieldSolid,CMISS_FIELD_U_VARIABLE_TYPE,CMISS_FIELD_VALUES_SET_TYPE,1, &
  572. & 1.0_CMISSDP,Err)
  573. ! CALL CMISSField_ComponentValuesInitialise(MaterialFieldSolid,CMISS_FIELD_U_VARIABLE_TYPE,CMISS_FIELD_VALUES_SET_TYPE,1,2.0e3_CMISSDP,Err)
  574. CALL CMISSField_ComponentValuesInitialise(MaterialFieldSolid,CMISS_FIELD_U_VARIABLE_TYPE,CMISS_FIELD_VALUES_SET_TYPE,2, &
  575. & 1.0_CMISSDP,Err)
  576. ! CALL CMISSField_ComponentValuesInitialise(MaterialFieldSolid,CMISS_FIELD_U_VARIABLE_TYPE,CMISS_FIELD_VALUES_SET_TYPE,2,33.0_CMISSDP,Err)
  577. CALL CMISSField_ComponentValuesInitialise(MaterialFieldSolid,CMISS_FIELD_U_VARIABLE_TYPE,CMISS_FIELD_VALUES_SET_TYPE,3, &
  578. & 10.0_CMISSDP,Err)
  579. CALL CMISSEquationsSet_MaterialsCreateStart(EquationsSetSolid,FieldMaterialSolidUserNumber,MaterialFieldSolid,Err)
  580. CALL CMISSEquationsSet_MaterialsCreateFinish(EquationsSetSolid,Err)
  581. ! end Solid
  582. !--------------------------------------------------------------------------------------------------------------------------------
  583. !
  584. !================================================================================================================================
  585. !
  586. !DEPENDENT FIELDS
  587. !Create the equations set dependent field variables for deformation-dependent material properties
  588. CALL CMISSField_Initialise(DependentFieldMatProperties,Err)
  589. CALL CMISSEquationsSet_DependentCreateStart(EquationsSetMatProperties,DependentFieldUserNumberMatProperties, &
  590. & DependentFieldMatProperties,Err)
  591. !Set the mesh component to be used by the field components.
  592. NUMBER_OF_COMPONENTS_DEPENDENT_FIELD_MAT_PROPERTIES = 2
  593. DO COMPONENT_NUMBER=1,NUMBER_OF_COMPONENTS_DEPENDENT_FIELD_MAT_PROPERTIES
  594. CALL CMISSField_ComponentMeshComponentSet(DependentFieldMatProperties,CMISS_FIELD_U_VARIABLE_TYPE,COMPONENT_NUMBER, &
  595. & DisplacementMeshComponentNumber,Err)
  596. CALL CMISSField_ComponentMeshComponentSet(DependentFieldMatProperties,CMISS_FIELD_DELUDELN_VARIABLE_TYPE,COMPONENT_NUMBER, &
  597. & DisplacementMeshComponentNumber,Err)
  598. ENDDO
  599. !Finish the equations set dependent field variables
  600. CALL CMISSEquationsSet_DependentCreateFinish(EquationsSetMatProperties,Err)
  601. !Initialise dependent field
  602. DO COMPONENT_NUMBER=1,NUMBER_OF_COMPONENTS_DEPENDENT_FIELD_MAT_PROPERTIES
  603. CALL CMISSField_ComponentValuesInitialise(DependentFieldMatProperties,CMISS_FIELD_U_VARIABLE_TYPE,CMISS_FIELD_VALUES_SET_TYPE, &
  604. & COMPONENT_NUMBER,INITIAL_FIELD_MAT_PROPERTIES(COMPONENT_NUMBER),Err)
  605. ENDDO
  606. !--------------------------------------------------------------------------------------------------------------------------------
  607. ! Solid
  608. !Create a dependent field with two variables and four components
  609. CALL CMISSField_Initialise(DependentFieldSolid,Err)
  610. !
  611. CALL CMISSField_CreateStart(FieldDependentSolidUserNumber,Region,DependentFieldSolid,Err)
  612. !
  613. CALL CMISSField_TypeSet(DependentFieldSolid,CMISS_FIELD_GENERAL_TYPE,Err)
  614. CALL CMISSField_MeshDecompositionSet(DependentFieldSolid,Decomposition,Err)
  615. CALL CMISSField_GeometricFieldSet(DependentFieldSolid,GeometricField,Err)
  616. CALL CMISSField_DependentTypeSet(DependentFieldSolid,CMISS_FIELD_DEPENDENT_TYPE,Err)
  617. CALL CMISSField_NumberOfVariablesSet(DependentFieldSolid,FieldDependentSolidNumberOfVariables,Err)
  618. CALL CMISSField_VariableTypesSet(DependentFieldSolid,(/CMISS_FIELD_U_VARIABLE_TYPE, &
  619. & CMISS_FIELD_DELUDELN_VARIABLE_TYPE,CMISS_FIELD_V_VARIABLE_TYPE,CMISS_FIELD_DELVDELN_VARIABLE_TYPE/),Err)
  620. CALL CMISSField_NumberOfComponentsSet(DependentFieldSolid,CMISS_FIELD_U_VARIABLE_TYPE,FieldDependentSolidNumberOfComponents,Err)
  621. CALL CMISSField_NumberOfComponentsSet(DependentFieldSolid,CMISS_FIELD_DELUDELN_VARIABLE_TYPE, &
  622. & FieldDependentSolidNumberOfComponents,Err)
  623. CALL CMISSField_NumberOfComponentsSet(DependentFieldSolid,CMISS_FIELD_V_VARIABLE_TYPE,FieldDependentFluidNumberOfComponents,Err)
  624. CALL CMISSField_NumberOfComponentsSet(DependentFieldSolid,CMISS_FIELD_DELVDELN_VARIABLE_TYPE, &
  625. & FieldDependentFluidNumberOfComponents,Err)
  626. !
  627. CALL CMISSField_ComponentMeshComponentSet(DependentFieldSolid,CMISS_FIELD_U_VARIABLE_TYPE,1,DisplacementMeshComponentNumber,Err)
  628. CALL CMISSField_ComponentMeshComponentSet(DependentFieldSolid,CMISS_FIELD_U_VARIABLE_TYPE,2,DisplacementMeshComponentNumber,Err)
  629. CALL CMISSField_ComponentMeshComponentSet(DependentFieldSolid,CMISS_FIELD_U_VARIABLE_TYPE,3,DisplacementMeshComponentNumber,Err)
  630. CALL CMISSField_ComponentInterpolationSet(DependentFieldSolid,CMISS_FIELD_U_VARIABLE_TYPE,4, &
  631. & CMISS_FIELD_NODE_BASED_INTERPOLATION, &
  632. & Err)
  633. ! CALL CMISSField_ComponentInterpolationSet(DependentFieldSolid,CMISS_FIELD_U_VARIABLE_TYPE,4,CMISS_FIELD_ELEMENT_BASED_INTERPOLATION,Err)
  634. ! CALL CMISSField_ComponentMeshComponentSet(DependentFieldSolid,CMISS_FIELD_U_VARIABLE_TYPE,4,SolidMeshComponenetNumber,Err)
  635. CALL CMISSField_ComponentMeshComponentSet(DependentFieldSolid,CMISS_FIELD_U_VARIABLE_TYPE,4,PressureMeshComponentNumber,Err)
  636. !
  637. CALL CMISSField_ComponentMeshComponentSet(DependentFieldSolid,CMISS_FIELD_DELUDELN_VARIABLE_TYPE,1, &
  638. & DisplacementMeshComponentNumber,Err)
  639. CALL CMISSField_ComponentMeshComponentSet(DependentFieldSolid,CMISS_FIELD_DELUDELN_VARIABLE_TYPE,2, &
  640. & DisplacementMeshComponentNumber,Err)
  641. CALL CMISSField_ComponentMeshComponentSet(DependentFieldSolid,CMISS_FIELD_DELUDELN_VARIABLE_TYPE,3, &
  642. & DisplacementMeshComponentNumber,Err)
  643. CALL CMISSField_ComponentInterpolationSet(DependentFieldSolid,CMISS_FIELD_DELUDELN_VARIABLE_TYPE,4, &
  644. & CMISS_FIELD_NODE_BASED_INTERPOLATION,Err)
  645. ! CALL CMISSField_ComponentInterpolationSet(DependentFieldSolid,CMISS_FIELD_DELUDELN_VARIABLE_TYPE,4, &
  646. ! & CMISS_FIELD_ELEMENT_BASED_INTERPOLATION,Err)
  647. ! CALL CMISSField_ComponentMeshComponentSet(DependentFieldSolid,CMISS_FIELD_DELUDELN_VARIABLE_TYPE,4,SolidMeshComponenetNumber,Err)
  648. CALL CMISSField_ComponentMeshComponentSet(DependentFieldSolid,CMISS_FIELD_DELUDELN_VARIABLE_TYPE,4,PressureMeshComponentNumber, &
  649. & Err)
  650. !For this equation type, MESH_COMPONENT_NUMBER_PRESSURE is actually the mass increase component as the pressure is taken from the solid equations
  651. CALL CMISSField_ComponentMeshComponentSet(DependentFieldSolid,CMISS_FIELD_V_VARIABLE_TYPE,1,DisplacementMeshComponentNumber,Err)
  652. CALL CMISSField_ComponentMeshComponentSet(DependentFieldSolid,CMISS_FIELD_V_VARIABLE_TYPE,2,DisplacementMeshComponentNumber,Err)
  653. CALL CMISSField_ComponentMeshComponentSet(DependentFieldSolid,CMISS_FIELD_V_VARIABLE_TYPE,3,DisplacementMeshComponentNumber,Err)
  654. ! CALL CMISSField_ComponentMeshComponentSet(DependentFieldSolid,CMISS_FIELD_V_VARIABLE_TYPE,4,MESH_COMPONENT_NUMBER_PRESSURE,Err)
  655. CALL CMISSField_ComponentMeshComponentSet(DependentFieldSolid,CMISS_FIELD_V_VARIABLE_TYPE,4,PressureMeshComponentNumber,Err)
  656. CALL CMISSField_ComponentMeshComponentSet(DependentFieldSolid,CMISS_FIELD_DELVDELN_VARIABLE_TYPE,1, &
  657. & DisplacementMeshComponentNumber,Err)
  658. CALL CMISSField_ComponentMeshComponentSet(DependentFieldSolid,CMISS_FIELD_DELVDELN_VARIABLE_TYPE,2, &
  659. & DisplacementMeshComponentNumber,Err)
  660. CALL CMISSField_ComponentMeshComponentSet(DependentFieldSolid,CMISS_FIELD_DELVDELN_VARIABLE_TYPE,3, &
  661. & DisplacementMeshComponentNumber,Err)
  662. ! CALL CMISSField_ComponentMeshComponentSet(DependentFieldSolid,CMISS_FIELD_DELVDELN_VARIABLE_TYPE,4,MESH_COMPONENT_NUMBER_PRESSURE,Err)
  663. CALL CMISSField_ComponentMeshComponentSet(DependentFieldSolid,CMISS_FIELD_DELVDELN_VARIABLE_TYPE,4,PressureMeshComponentNumber, &
  664. & Err)
  665. !
  666. CALL CMISSField_CreateFinish(DependentFieldSolid,Err)
  667. !
  668. CALL CMISSEquationsSet_DependentCreateStart(EquationsSetSolid,FieldDependentSolidUserNumber,DependentFieldSolid,Err)
  669. CALL CMISSEquationsSet_DependentCreateFinish(EquationsSetSolid,Err)
  670. ! !Initialise dependent field (solid displacement and pressure)
  671. ! DO COMPONENT_NUMBER=1,NUMBER_OF_DIMENSIONS !+1
  672. ! CALL CMISSField_ComponentValuesInitialise(DependentFieldSolid,CMISS_FIELD_U_VARIABLE_TYPE,CMISS_FIELD_VALUES_SET_TYPE, &
  673. ! & COMPONENT_NUMBER,INITIAL_FIELD_SOLID(COMPONENT_NUMBER),Err)
  674. ! ENDDO
  675. ! end Solid
  676. !--------------------------------------------------------------------------------------------------------------------------------
  677. !Create the equations set dependent field variables for ALE Darcy
  678. ! CALL CMISSField_Initialise(DependentFieldDarcy,Err)
  679. ! CALL CMISSEquationsSet_DependentCreateStart(EquationsSetDarcy,DependentFieldUserNumberDarcy, & ! ??? UserNumber ???
  680. CALL CMISSEquationsSet_DependentCreateStart(EquationsSetDarcy,FieldDependentSolidUserNumber, & ! ??? UserNumber ???
  681. & DependentFieldSolid,Err)
  682. ! !Set the mesh component to be used by the field components.
  683. ! DO COMPONENT_NUMBER=1,NUMBER_OF_DIMENSIONS
  684. ! CALL CMISSField_ComponentMeshComponentSet(DependentFieldDarcy,CMISS_FIELD_U_VARIABLE_TYPE,COMPONENT_NUMBER, &
  685. ! & MESH_COMPONENT_NUMBER_VELOCITY,Err)
  686. ! CALL CMISSField_ComponentMeshComponentSet(DependentFieldDarcy,CMISS_FIELD_DELUDELN_VARIABLE_TYPE,COMPONENT_NUMBER, &
  687. ! & MESH_COMPONENT_NUMBER_VELOCITY,Err)
  688. ! ENDDO
  689. ! COMPONENT_NUMBER=NUMBER_OF_DIMENSIONS+1
  690. ! CALL CMISSField_ComponentMeshComponentSet(DependentFieldDarcy,CMISS_FIELD_U_VARIABLE_TYPE,COMPONENT_NUMBER, &
  691. ! & MESH_COMPONENT_NUMBER_PRESSURE,Err)
  692. ! CALL CMISSField_ComponentMeshComponentSet(DependentFieldDarcy,CMISS_FIELD_DELUDELN_VARIABLE_TYPE,COMPONENT_NUMBER, &
  693. ! & MESH_COMPONENT_NUMBER_PRESSURE,Err)
  694. !Finish the equations set dependent field variables
  695. CALL CMISSEquationsSet_DependentCreateFinish(EquationsSetDarcy,Err)
  696. !Initialise dependent field (velocity components,pressure,mass increase)
  697. DO COMPONENT_NUMBER=1,NUMBER_OF_DIMENSIONS+1
  698. CALL CMISSField_ComponentValuesInitialise(DependentFieldSolid,CMISS_FIELD_V_VARIABLE_TYPE,CMISS_FIELD_VALUES_SET_TYPE, &
  699. & COMPONENT_NUMBER,INITIAL_FIELD_DARCY(COMPONENT_NUMBER),Err)
  700. ENDDO
  701. !
  702. !================================================================================================================================
  703. !
  704. !MATERIALS FIELDS
  705. !Create the equations set materials field variables for ALE Darcy
  706. CALL CMISSField_Initialise(MaterialsFieldDarcy,Err)
  707. CALL CMISSEquationsSet_MaterialsCreateStart(EquationsSetDarcy,MaterialsFieldUserNumberDarcy, &
  708. & MaterialsFieldDarcy,Err)
  709. !Finish the equations set materials field variables
  710. CALL CMISSEquationsSet_MaterialsCreateFinish(EquationsSetDarcy,Err)
  711. CALL CMISSField_ComponentValuesInitialise(MaterialsFieldDarcy,CMISS_FIELD_U_VARIABLE_TYPE,CMISS_FIELD_VALUES_SET_TYPE, &
  712. & MaterialsFieldUserNumberDarcyPorosity,POROSITY_PARAM_DARCY,Err)
  713. CALL CMISSField_ComponentValuesInitialise(MaterialsFieldDarcy,CMISS_FIELD_U_VARIABLE_TYPE,CMISS_FIELD_VALUES_SET_TYPE, &
  714. & MaterialsFieldUserNumberDarcyPermOverVis,PERM_OVER_VIS_PARAM_DARCY,Err)
  715. !Create the equations set materials field variables for deformation-dependent material properties
  716. CALL CMISSField_Initialise(MaterialsFieldMatProperties,Err)
  717. CALL CMISSEquationsSet_MaterialsCreateStart(EquationsSetMatProperties,MaterialsFieldUserNumberMatProperties, &
  718. & MaterialsFieldMatProperties,Err)
  719. !Finish the equations set materials field variables
  720. CALL CMISSEquationsSet_MaterialsCreateFinish(EquationsSetMatProperties,Err)
  721. CALL CMISSField_ComponentValuesInitialise(MaterialsFieldMatProperties,CMISS_FIELD_U_VARIABLE_TYPE,CMISS_FIELD_VALUES_SET_TYPE, &
  722. & MaterialsFieldUserNumberMatPropertiesPorosity,POROSITY_PARAM_MAT_PROPERTIES,Err)
  723. CALL CMISSField_ComponentValuesInitialise(MaterialsFieldMatProperties,CMISS_FIELD_U_VARIABLE_TYPE,CMISS_FIELD_VALUES_SET_TYPE, &
  724. & MaterialsFieldUserNumberMatPropertiesPermOverVis,PERM_OVER_VIS_PARAM_MAT_PROPERTIES,Err)
  725. !
  726. !================================================================================================================================
  727. !
  728. !INDEPENDENT FIELDS
  729. !Create the equations set independent field variables for the solid
  730. CALL CMISSField_Initialise(IndependentFieldSolid,Err)
  731. CALL CMISSEquationsSet_IndependentCreateStart(EquationsSetSolid,IndependentFieldUserNumberSolid, &
  732. & IndependentFieldSolid,Err)
  733. !Set the mesh component to be used by the field components.
  734. DO COMPONENT_NUMBER=1,NUMBER_OF_DIMENSIONS
  735. CALL CMISSField_ComponentMeshComponentSet(IndependentFieldSolid,CMISS_FIELD_U_VARIABLE_TYPE,COMPONENT_NUMBER, &
  736. & DisplacementMeshComponentNumber,Err)
  737. ENDDO
  738. !Finish the equations set independent field variables
  739. CALL CMISSEquationsSet_IndependentCreateFinish(EquationsSetSolid,Err)
  740. !
  741. !================================================================================================================================
  742. !
  743. !EQUATIONS
  744. !Create the equations set equations
  745. CALL CMISSEquations_Initialise(EquationsDarcy,Err)
  746. CALL CMISSEquationsSet_EquationsCreateStart(EquationsSetDarcy,EquationsDarcy,Err)
  747. !Set the equations matrices sparsity type
  748. CALL CMISSEquations_SparsityTypeSet(EquationsDarcy,CMISS_EQUATIONS_SPARSE_MATRICES,Err)
  749. ! !Set the equations lumping type
  750. ! CALL CMISSEquations_LumpingTypeSet(EquationsDarcy,CMISS_EQUATIONS_UNLUMPED_MATRICES,Err)
  751. !Set the equations set output
  752. CALL CMISSEquations_OutputTypeSet(EquationsDarcy,EQUATIONS_DARCY_OUTPUT,Err)
  753. !Finish the equations set equations
  754. CALL CMISSEquationsSet_EquationsCreateFinish(EquationsSetDarcy,Err)
  755. !Create the equations set equations
  756. CALL CMISSEquations_Initialise(EquationsMatProperties,Err)
  757. CALL CMISSEquationsSet_EquationsCreateStart(EquationsSetMatProperties,EquationsMatProperties,Err)
  758. !Set the equations matrices sparsity type
  759. CALL CMISSEquations_SparsityTypeSet(EquationsMatProperties,CMISS_EQUATIONS_SPARSE_MATRICES,Err)
  760. !Set the equations set output
  761. CALL CMISSEquations_OutputTypeSet(EquationsMatProperties,EQUATIONS_MAT_PROPERTIES_OUTPUT,Err)
  762. !Finish the equations set equations
  763. CALL CMISSEquationsSet_EquationsCreateFinish(EquationsSetMatProperties,Err)
  764. !--------------------------------------------------------------------------------------------------------------------------------
  765. ! Solid
  766. !Create the equations set equations
  767. CALL CMISSEquations_Initialise(EquationsSolid,Err)
  768. CALL CMISSEquationsSet_EquationsCreateStart(EquationsSetSolid,EquationsSolid,Err)
  769. CALL CMISSEquations_SparsityTypeSet(EquationsSolid,CMISS_EQUATIONS_SPARSE_MATRICES,Err)
  770. CALL CMISSEquations_OutputTypeSet(EquationsSolid,CMISS_EQUATIONS_NO_OUTPUT,Err)
  771. CALL CMISSEquationsSet_EquationsCreateFinish(EquationsSetSolid,Err)
  772. ! end Solid
  773. !--------------------------------------------------------------------------------------------------------------------------------
  774. !
  775. !================================================================================================================================
  776. !
  777. CALL CMISSField_Initialise(AnalyticFieldDarcy,Err)
  778. CALL CMISSEquationsSet_AnalyticCreateStart(EquationsSetDarcy,&
  779. & CMISS_EQUATIONS_SET_INCOMP_ELAST_DARCY_ANALYTIC_DARCY,&
  780. & AnalyticFieldUserNumberDarcy,AnalyticFieldDarcy,Err)
  781. !Finish the equations set analytic field variables
  782. CALL CMISSEquationsSet_AnalyticCreateFinish(EquationsSetDarcy,Err)
  783. !--------------------------------------------------------------------------------------------------------------------------------
  784. ! Solid
  785. !Initialise dependent field from undeformed geometry and displacement bcs and set hydrostatic pressure
  786. CALL CMISSField_ParametersToFieldParametersComponentCopy(GeometricField,CMISS_FIELD_U_VARIABLE_TYPE,CMISS_FIELD_VALUES_SET_TYPE, &
  787. & 1,DependentFieldSolid,CMISS_FIELD_U_VARIABLE_TYPE,CMISS_FIELD_VALUES_SET_TYPE,1,Err)
  788. CALL CMISSField_ParametersToFieldParametersComponentCopy(GeometricField,CMISS_FIELD_U_VARIABLE_TYPE,CMISS_FIELD_VALUES_SET_TYPE, &
  789. & 2,DependentFieldSolid,CMISS_FIELD_U_VARIABLE_TYPE,CMISS_FIELD_VALUES_SET_TYPE,2,Err)
  790. CALL CMISSField_ParametersToFieldParametersComponentCopy(GeometricField,CMISS_FIELD_U_VARIABLE_TYPE,CMISS_FIELD_VALUES_SET_TYPE, &
  791. & 3,DependentFieldSolid,CMISS_FIELD_U_VARIABLE_TYPE,CMISS_FIELD_VALUES_SET_TYPE,3,Err)
  792. CALL CMISSField_ComponentValuesInitialise(DependentFieldSolid,CMISS_FIELD_U_VARIABLE_TYPE,CMISS_FIELD_VALUES_SET_TYPE,4, &
  793. & 0.0_CMISSDP, &
  794. & Err)
  795. ! end Solid
  796. !--------------------------------------------------------------------------------------------------------------------------------
  797. !
  798. !================================================================================================================================
  799. !
  800. !PROBLEMS
  801. !Start the creation of a problem.
  802. CALL CMISSProblem_Initialise(Problem,Err)
  803. CALL CMISSControlLoop_Initialise(ControlLoop,Err)
  804. CALL CMISSProblem_CreateStart(ProblemUserNumber,Problem,Err)
  805. !Set the problem to be a ALE Darcy problem
  806. CALL CMISSProblem_SpecificationSet(Problem,CMISS_PROBLEM_MULTI_PHYSICS_CLASS,CMISS_PROBLEM_FINITE_ELASTICITY_DARCY_TYPE, &
  807. & CMISS_PROBLEM_QUASISTATIC_ELASTICITY_TRANSIENT_DARCY_SUBTYPE,Err)
  808. !Finish the creation of a problem.
  809. CALL CMISSProblem_CreateFinish(Problem,Err)
  810. !Start the creation of the problem control loop
  811. CALL CMISSProblem_ControlLoopCreateStart(Problem,Err)
  812. !Get the control loop
  813. CALL CMISSProblem_ControlLoopGet(Problem,CMISS_CONTROL_LOOP_NODE,ControlLoop,Err)
  814. ! CALL CMISSControlLoop_MaximumIterationsSet(ControlLoop,2,Err)
  815. !Set the times
  816. CALL CMISSControlLoop_TimesSet(ControlLoop,DYNAMIC_SOLVER_DARCY_START_TIME,DYNAMIC_SOLVER_DARCY_STOP_TIME, &
  817. & DYNAMIC_SOLVER_DARCY_TIME_INCREMENT,Err)
  818. !Set the output timing
  819. CALL CMISSControlLoop_TimeOutputSet(ControlLoop,DYNAMIC_SOLVER_DARCY_OUTPUT_FREQUENCY,Err)
  820. ! !Set the output type
  821. ! CALL CMISSControlLoop_OutputTypeSet(ControlLoop,CMISS_CONTROL_LOOP_PROGRESS_OUTPUT,Err)
  822. !Finish creating the problem control loop
  823. CALL CMISSProblem_ControlLoopCreateFinish(Problem,Err)
  824. !
  825. !================================================================================================================================
  826. !
  827. !SOLVERS
  828. !Start the creation of the problem solvers
  829. CALL CMISSSolver_Initialise(SolverSolid,Err)
  830. CALL CMISSSolver_Initialise(LinearSolverMatProperties,Err)
  831. CALL CMISSSolver_Initialise(DynamicSolverDarcy,Err)
  832. CALL CMISSSolver_Initialise(LinearSolverDarcy,Err)
  833. CALL CMISSProblem_SolversCreateStart(Problem,Err)
  834. !--------------------------------------------------------------------------------------------------------------------------------
  835. ! Solid
  836. !Get the finite elasticity solver
  837. CALL CMISSProblem_SolverGet(Problem,(/ControlLoopSubiterationNumber,ControlLoopSolidNumber,CMISS_CONTROL_LOOP_NODE/), &
  838. & SolverSolidIndex,SolverSolid,Err)
  839. CALL CMISSSolver_OutputTypeSet(SolverSolid,CMISS_SOLVER_PROGRESS_OUTPUT,Err)
  840. ! CALL CMISSSolver_NewtonJacobianCalculationTypeSet(SolverSolid,CMISS_SOLVER_NEWTON_JACOBIAN_FD_CALCULATED,Err)
  841. CALL CMISSSolver_NewtonJacobianCalculationTypeSet(SolverSolid,CMISS_SOLVER_NEWTON_JACOBIAN_EQUATIONS_CALCULATED,Err)
  842. CALL CMISSSolver_NewtonAbsoluteToleranceSet(SolverSolid,ABSOLUTE_TOLERANCE,Err)
  843. CALL CMISSSolver_NewtonRelativeToleranceSet(SolverSolid,RELATIVE_TOLERANCE,Err)
  844. CALL CMISSSolver_NewtonMaximumIterationsSet(SolverSolid,MAXIMUM_ITERATIONS,Err)
  845. ! CALL CMISSSolverNonLinearTypeSet(SolverSolid,CMISS_SOLVER_NONLINEAR_NEWTON,Err)
  846. ! CALL CMISSSolver_LibraryTypeSet(SolverSolid,CMISS_SOLVER_PETSC_LIBRARY,Err)
  847. ! CALL CMISSSolver_NewtonLinearSolverGet(SolverSolid,LinearSolverSolid,Err)
  848. ! CALL CMISSSolver_LinearTypeSet(LinearSolverSolid,CMISS_SOLVER_LINEAR_DIRECT_SOLVE_TYPE,Err)
  849. ! end Solid
  850. !--------------------------------------------------------------------------------------------------------------------------------
  851. !Get the deformation-dependent material properties solver
  852. CALL CMISSProblem_SolverGet(Problem,(/ControlLoopSubiterationNumber,ControlLoopFluidNumber,CMISS_CONTROL_LOOP_NODE/), &
  853. & SolverMatPropertiesIndex,LinearSolverMatProperties,Err)
  854. !Set the output type
  855. CALL CMISSSolver_OutputTypeSet(LinearSolverMatProperties,LINEAR_SOLVER_MAT_PROPERTIES_OUTPUT_TYPE,Err)
  856. !Set the solver settings
  857. IF(LINEAR_SOLVER_MAT_PROPERTIES_DIRECT_FLAG) THEN
  858. CALL CMISSSolver_LinearTypeSet(LinearSolverMatProperties,CMISS_SOLVER_LINEAR_DIRECT_SOLVE_TYPE,Err)
  859. CALL CMISSSolver_LibraryTypeSet(LinearSolverMatProperties,CMISS_SOLVER_MUMPS_LIBRARY,Err)
  860. ELSE
  861. CALL CMISSSolver_LinearTypeSet(LinearSolverMatProperties,CMISS_SOLVER_LINEAR_ITERATIVE_SOLVE_TYPE,Err)
  862. CALL CMISSSolver_LinearIterativeMaximumIterationsSet(LinearSolverMatProperties,MAXIMUM_ITERATIONS,Err)
  863. CALL CMISSSolver_LinearIterativeDivergenceToleranceSet(LinearSolverMatProperties,DIVERGENCE_TOLERANCE,Err)
  864. CALL CMISSSolver_LinearIterativeRelativeToleranceSet(LinearSolverMatProperties,RELATIVE_TOLERANCE,Err)
  865. CALL CMISSSolver_LinearIterativeAbsoluteToleranceSet(LinearSolverMatProperties,ABSOLUTE_TOLERANCE,Err)
  866. CALL CMISSSolver_LinearIterativeGMRESRestartSet(LinearSolverMatProperties,RESTART_VALUE,Err)
  867. ENDIF
  868. !Get the Darcy solver
  869. CALL CMISSProblem_SolverGet(Problem,(/ControlLoopSubiterationNumber,ControlLoopFluidNumber,CMISS_CONTROL_LOOP_NODE/), &
  870. & SolverDarcyIndex,DynamicSolverDarcy,Err)
  871. !Set the output type
  872. CALL CMISSSolver_OutputTypeSet(DynamicSolverDarcy,DYNAMIC_SOLVER_DARCY_OUTPUT_TYPE,Err)
  873. !Set theta
  874. CALL CMISSSolver_DynamicThetaSet(DynamicSolverDarcy,DYNAMIC_SOLVER_DARCY_THETA,Err)
  875. ! CALL CMISSSolverDynamicDynamicSet(DynamicSolverDarcy,.TRUE.,Err)
  876. !Get the dynamic linear solver
  877. CALL CMISSSolver_DynamicLinearSolverGet(DynamicSolverDarcy,LinearSolverDarcy,Err)
  878. !Set the solver settings
  879. IF(LINEAR_SOLVER_DARCY_DIRECT_FLAG) THEN
  880. CALL CMISSSolver_LinearTypeSet(LinearSolverDarcy,CMISS_SOLVER_LINEAR_DIRECT_SOLVE_TYPE,Err)
  881. CALL CMISSSolver_LibraryTypeSet(LinearSolverDarcy,CMISS_SOLVER_MUMPS_LIBRARY,Err)
  882. ELSE
  883. CALL CMISSSolver_LinearTypeSet(LinearSolverDarcy,CMISS_SOLVER_LINEAR_ITERATIVE_SOLVE_TYPE,Err)
  884. CALL CMISSSolver_LinearIterativeMaximumIterationsSet(LinearSolverDarcy,MAXIMUM_ITERATIONS,Err)
  885. CALL CMISSSolver_LinearIterativeDivergenceToleranceSet(LinearSolverDarcy,DIVERGENCE_TOLERANCE,Err)
  886. CALL CMISSSolver_LinearIterativeRelativeToleranceSet(LinearSolverDarcy,RELATIVE_TOLERANCE,Err)
  887. CALL CMISSSolver_LinearIterativeAbsoluteToleranceSet(LinearSolverDarcy,ABSOLUTE_TOLERANCE,Err)
  888. CALL CMISSSolver_LinearIterativeGMRESRestartSet(LinearSolverDarcy,RESTART_VALUE,Err)
  889. ENDIF
  890. !Finish the creation of the problem solver
  891. CALL CMISSProblem_SolversCreateFinish(Problem,Err)
  892. !
  893. !================================================================================================================================
  894. !
  895. !SOLVER EQUATIONS
  896. !Start the creation of the problem solver equations
  897. CALL CMISSSolver_Initialise(SolverSolid,Err)
  898. CALL CMISSSolver_Initialise(LinearSolverMatProperties,Err)
  899. CALL CMISSSolver_Initialise(LinearSolverDarcy,Err)
  900. CALL CMISSSolverEquations_Initialise(SolverEquationsSolid,Err)
  901. CALL CMISSSolverEquations_Initialise(SolverEquationsMatProperties,Err)
  902. CALL CMISSSolverEquations_Initialise(SolverEquationsDarcy,Err)
  903. CALL CMISSProblem_SolverEquationsCreateStart(Problem,Err)
  904. !
  905. !Get the finite elasticity solver equations
  906. CALL CMISSProblem_SolverGet(Problem,(/ControlLoopSubiterationNumber,ControlLoopSolidNumber,CMISS_CONTROL_LOOP_NODE/), &
  907. & SolverSolidIndex,SolverSolid,Err)
  908. CALL CMISSSolver_SolverEquationsGet(SolverSolid,SolverEquationsSolid,Err)
  909. CALL CMISSSolverEquations_SparsityTypeSet(SolverEquationsSolid,CMISS_SOLVER_SPARSE_MATRICES,Err)
  910. CALL CMISSSolverEquations_EquationsSetAdd(SolverEquationsSolid,EquationsSetSolid,EquationsSetIndex,Err)
  911. !
  912. !Get the deformation-dependent material properties solver equations
  913. CALL CMISSProblem_SolverGet(Problem,(/ControlLoopSubiterationNumber,ControlLoopFluidNumber,CMISS_CONTROL_LOOP_NODE/), &
  914. & SolverMatPropertiesIndex,LinearSolverMatProperties,Err)
  915. CALL CMISSSolver_SolverEquationsGet(LinearSolverMatProperties,SolverEquationsMatProperties,Err)
  916. CALL CMISSSolverEquations_SparsityTypeSet(SolverEquationsMatProperties,CMISS_SOLVER_SPARSE_MATRICES,Err)
  917. CALL CMISSSolverEquations_EquationsSetAdd(SolverEquationsMatProperties,EquationsSetMatProperties,EquationsSetIndex,Err)
  918. !
  919. !Get the Darcy solver equations
  920. CALL CMISSProblem_SolverGet(Problem,(/ControlLoopSubiterationNumber,ControlLoopFluidNumber,CMISS_CONTROL_LOOP_NODE/), &
  921. & SolverDarcyIndex,LinearSolverDarcy,Err)
  922. CALL CMISSSolver_SolverEquationsGet(LinearSolverDarcy,SolverEquationsDarcy,Err)
  923. CALL CMISSSolverEquations_SparsityTypeSet(SolverEquationsDarcy,CMISS_SOLVER_SPARSE_MATRICES,Err)
  924. CALL CMISSSolverEquations_EquationsSetAdd(SolverEquationsDarcy,EquationsSetDarcy,EquationsSetIndex,Err)
  925. !
  926. !Finish the creation of the problem solver equations
  927. CALL CMISSProblem_SolverEquationsCreateFinish(Problem,Err)
  928. !
  929. !================================================================================================================================
  930. !
  931. !BOUNDARY CONDITIONS
  932. !Start the creation of the equations set boundary conditions for Darcy
  933. CALL CMISSBoundaryConditions_Initialise(BoundaryConditionsDarcy,Err)
  934. CALL CMISSSolverEquations_BoundaryConditionsCreateStart(SolverEquationsDarcy,BoundaryConditionsDarcy,Err)
  935. CALL CMISSSolverEquations_BoundaryConditionsAnalytic(SolverEquationsDarcy,Err)
  936. !Prescribe boundary conditions (absolute nodal parameters)
  937. !Solid is computed in absolute position, rather than displacement. Thus BCs for absolute position
  938. CALL CMISSBoundaryConditions_Initialise(BoundaryConditionsSolid,Err)
  939. CALL CMISSSolverEquations_BoundaryConditionsCreateStart(SolverEquationsSolid,BoundaryConditionsSolid,Err)
  940. ! !--- BCs on normal velocity only
  941. ! CONDITION = CMISS_BOUNDARY_CONDITION_MOVED_WALL
  942. !
  943. ! IF( CM%D==2_CMISSIntg ) THEN !CM%D = number of dimensions, ie 2D
  944. ! DO NODE_NUMBER=1_CMISSIntg,NUMBER_OF_NODES_GEOMETRY
  945. ! COORD_X = CM%N(NODE_NUMBER,1_CMISSIntg)
  946. ! COORD_Y = CM%N(NODE_NUMBER,2_CMISSIntg)
  947. !
  948. ! IF( (ABS(COORD_X-DOMAIN_X1) < GEOMETRY_TOLERANCE) ) THEN
  949. ! !x-velocity
  950. ! VALUE = 1.0_CMISSDP
  951. ! CALL CMISSBoundaryConditions_SetNode(BoundaryConditionsDarcy,DependentField,CMISS_FIELD_V_VARIABLE_TYPE,CMISS_NO_GLOBAL_DERIV, &
  952. ! & NODE_NUMBER,1_CMISSIntg,CONDITION,VALUE,Err)
  953. ! END IF
  954. ! !
  955. ! IF( (ABS(COORD_X-DOMAIN_X2) < GEOMETRY_TOLERANCE) ) THEN
  956. ! !x-velocity
  957. ! VALUE = 1.0_CMISSDP
  958. ! CALL CMISSBoundaryConditions_SetNode(BoundaryConditionsDarcy,DependentField,CMISS_FIELD_V_VARIABLE_TYPE,CMISS_NO_GLOBAL_DERIV, &
  959. ! & NODE_NUMBER,1_CMISSIntg,CONDITION,VALUE,Err)
  960. ! END IF
  961. ! !
  962. ! IF( (ABS(COORD_Y-DOMAIN_Y1) < GEOMETRY_TOLERANCE) ) THEN
  963. ! !y-velocity
  964. ! VALUE = 2.0_CMISSDP
  965. ! CALL CMISSBoundaryConditions_SetNode(BoundaryConditionsDarcy,DependentField,CMISS_FIELD_V_VARIABLE_TYPE,CMISS_NO_GLOBAL_DERIV, &
  966. ! & NODE_NUMBER,2_CMISSIntg,CONDITION,VALUE,Err)
  967. ! END IF
  968. ! !
  969. ! IF( (ABS(COORD_Y-DOMAIN_Y2) < GEOMETRY_TOLERANCE) ) THEN
  970. ! !y-velocity
  971. ! VALUE = 2.0_CMISSDP
  972. ! CALL CMISSBoundaryConditions_SetNode(BoundaryConditionsDarcy,DependentField,CMISS_FIELD_V_VARIABLE_TYPE,CMISS_NO_GLOBAL_DERIV, &
  973. ! & NODE_NUMBER,2_CMISSIntg,CONDITION,VALUE,Err)
  974. ! END IF
  975. ! END DO
  976. ! ELSE IF( CM%D==3_CMISSIntg ) THEN ! 3D geometry
  977. ! DO NODE_NUMBER=1_CMISSIntg,NUMBER_OF_NODES_GEOMETRY !What if different number of nodes geometry and velocity ?
  978. ! COORD_X = CM%N(NODE_NUMBER,1_CMISSIntg)
  979. ! COORD_Y = CM%N(NODE_NUMBER,2_CMISSIntg)
  980. ! COORD_Z = CM%N(NODE_NUMBER,3_CMISSIntg)
  981. !
  982. ! IF( (ABS(COORD_X-DOMAIN_X1) < GEOMETRY_TOLERANCE) ) THEN
  983. ! ! !x-velocity: F L U I D ( V Variable type )
  984. ! ! VALUE = 10.0_CMISSDP
  985. ! ! CALL CMISSBoundaryConditions_SetNode(BoundaryConditionsDarcy,,DependentFieldCMISSFieldVVariableType,CMISS_NO_GLOBAL_DERIV, &
  986. ! ! ! & NODE_NUMBER,4_CMISSIntg,CMISS_BOUNDARY_CONDITION_FIXED,VALUE,Err) !BC on pressure component
  987. ! ! ! & NODE_NUMBER,1_CMISSIntg,CMISS_BOUNDARY_CONDITION_MOVED_WALL,VALUE,Err) !inflow
  988. ! ! & NODE_NUMBER,1_CMISSIntg,CMISS_BOUNDARY_CONDITION_FIXED,VALUE,Err) !time-dependent inflow
  989. !
  990. ! ! !x-position: S O L I D ( U Variable Type)
  991. ! ! ! VALUE = 1.0_CMISSDP * DOMAIN_X1
  992. ! ! VALUE = COORD_X
  993. ! ! CALL CMISSBoundaryConditions_SetNode(BoundaryConditionsSolid,DependentField,CMISS_FIELD_U_VARIABLE_TYPE,CMISS_NO_GLOBAL_DERIV, &
  994. ! ! & NODE_NUMBER,1_CMISSIntg,CMISS_BOUNDARY_CONDITION_FIXED,VALUE,Err)
  995. !
  996. ! ! EDGE_COUNT = 0_CMISSIntg
  997. ! ! IF( (ABS(COORD_Y-DOMAIN_Y1) < GEOMETRY_TOLERANCE) ) EDGE_COUNT = EDGE_COUNT + 1_CMISSIntg
  998. ! ! IF( (ABS(COORD_Y-DOMAIN_Y2) < GEOMETRY_TOLERANCE) ) EDGE_COUNT = EDGE_COUNT + 1_CMISSIntg
  999. ! ! IF( (ABS(COORD_Z-DOMAIN_Z1) < GEOMETRY_TOLERANCE) ) EDGE_COUNT = EDGE_COUNT + 1_CMISSIntg
  1000. ! ! IF( (ABS(COORD_Z-DOMAIN_Z2) < GEOMETRY_TOLERANCE) ) EDGE_COUNT = EDGE_COUNT + 1_CMISSIntg
  1001. ! !
  1002. ! ! IF(EDGE_COUNT == 2_CMISSIntg) THEN !it is a corner node
  1003. ! ! VALUE = COORD_Y
  1004. ! ! CALL CMISSBoundaryConditions_SetNode(BoundaryConditionsSolid,DependentField,CMISS_FIELD_U_VARIABLE_TYPE,CMISS_NO_GLOBAL_DERIV, &
  1005. ! ! & NODE_NUMBER,2_CMISSIntg,CMISS_BOUNDARY_CONDITION_FIXED,VALUE,Err)
  1006. ! !
  1007. ! ! VALUE = COORD_Z
  1008. ! ! CALL CMISSBoundaryConditions_SetNode(BoundaryConditionsSolid,DependentField,CMISS_FIELD_U_VARIABLE_TYPE,CMISS_NO_GLOBAL_DERIV, &
  1009. ! ! & NODE_NUMBER,3_CMISSIntg,CMISS_BOUNDARY_CONDITION_FIXED,VALUE,Err)
  1010. ! ! END IF
  1011. ! END IF
  1012. ! !
  1013. ! IF( (ABS(COORD_X-DOMAIN_X2) < GEOMETRY_TOLERANCE) ) THEN
  1014. ! ! !x-velocity: F L U I D
  1015. ! ! VALUE = 10.0_CMISSDP
  1016. ! ! CALL CMISSBoundaryConditions_SetNode(BoundaryConditionsDarcy,DependentField,CMISS_FIELD_V_VARIABLE_TYPE,CMISS_NO_GLOBAL_DERIV, &
  1017. ! ! ! & NODE_NUMBER,4_CMISSIntg,CMISS_BOUNDARY_CONDITION_FIXED,VALUE,Err) !BC on pressure component
  1018. ! ! ! & NODE_NUMBER,1_CMISSIntg,CMISS_BOUNDARY_CONDITION_MOVED_WALL,VALUE,Err) !impermeable wall, zero flux
  1019. ! ! & NODE_NUMBER,1_CMISSIntg,CMISS_BOUNDARY_CONDITION_FIXED,VALUE,Err) !impermeable wall, zero flux
  1020. !
  1021. ! ! !x-position: S O L I D
  1022. ! ! VALUE = COORD_X
  1023. ! ! CALL CMISSBoundaryConditions_SetNode(BoundaryConditionsSolid,DependentField,CMISS_FIELD_U_VARIABLE_TYPE,1, &
  1024. ! ! & NODE_NUMBER,1_CMISSIntg,CMISS_BOUNDARY_CONDITION_FIXED,VALUE,Err)
  1025. ! !
  1026. ! ! !Fix point 1
  1027. ! ! IF( (ABS(COORD_Y-DOMAIN_Y2) < GEOMETRY_TOLERANCE) ) THEN
  1028. ! ! IF( (ABS(COORD_Z-DOMAIN_Z2) < GEOMETRY_TOLERANCE) ) THEN
  1029. ! ! VALUE = COORD_Y
  1030. ! ! CALL CMISSBoundaryConditions_SetNode(BoundaryConditionsSolid,DependentField,CMISS_FIELD_U_VARIABLE_TYPE,CMISS_NO_GLOBAL_DERIV, &
  1031. ! ! & NODE_NUMBER,2_CMISSIntg,CMISS_BOUNDARY_CONDITION_FIXED,VALUE,Err)
  1032. ! !
  1033. ! ! VALUE = COORD_Z
  1034. ! ! CALL CMISSBoundaryConditions_SetNode(BoundaryConditionsSolid,DependentField,CMISS_FIELD_U_VARIABLE_TYPE,CMISS_NO_GLOBAL_DERIV, &
  1035. ! ! & NODE_NUMBER,3_CMISSIntg,CMISS_BOUNDARY_CONDITION_FIXED,VALUE,Err)
  1036. ! ! END IF
  1037. ! ! END IF
  1038. ! ! !(Fix) point 2
  1039. ! ! IF( (ABS(COORD_Y-DOMAIN_Y1) < GEOMETRY_TOLERANCE) ) THEN
  1040. ! ! IF( (ABS(COORD_Z-DOMAIN_Z2) < GEOMETRY_TOLERANCE) ) THEN
  1041. ! ! VALUE = COORD_Z
  1042. ! ! CALL CMISSBoundaryConditions_SetNode(BoundaryConditionsSolid,DependentField,CMISS_FIELD_U_VARIABLE_TYPE,CMISS_NO_GLOBAL_DERIV, &
  1043. ! ! & NODE_NUMBER,3_CMISSIntg,CMISS_BOUNDARY_CONDITION_FIXED,VALUE,Err)
  1044. ! ! END IF
  1045. ! ! END IF
  1046. ! ! !(Fix) point 3
  1047. ! ! IF( (ABS(COORD_Y-DOMAIN_Y2) < GEOMETRY_TOLERANCE) ) THEN
  1048. ! ! IF( (ABS(COORD_Z-DOMAIN_Z1) < GEOMETRY_TOLERANCE) ) THEN
  1049. ! ! VALUE = COORD_Y
  1050. ! ! CALL CMISSBoundaryConditions_SetNode(BoundaryConditionsSolid,DependentField,CMISS_FIELD_U_VARIABLE_TYPE,CMISS_NO_GLOBAL_DERIV, &
  1051. ! ! & NODE_NUMBER,2_CMISSIntg,CMISS_BOUNDARY_CONDITION_FIXED,VALUE,Err)
  1052. ! ! END IF
  1053. ! ! END IF
  1054. !
  1055. !
  1056. ! END IF
  1057. ! !
  1058. ! IF( (ABS(COORD_Y-DOMAIN_Y1) < GEOMETRY_TOLERANCE) ) THEN
  1059. ! ! !y-velocity: F L U I D
  1060. ! ! VALUE = 0.0_CMISSDP
  1061. ! ! CALL CMISSBoundaryConditions_SetNode(BoundaryConditionsDarcy,DependentField,CMISS_FIELD_V_VARIABLE_TYPE,CMISS_NO_GLOBAL_DERIV, &
  1062. ! ! & NODE_NUMBER,2_CMISSIntg,CMISS_BOUNDARY_CONDITION_MOVED_WALL,VALUE,Err)
  1063. ! !
  1064. ! ! !y-position: S O L I D
  1065. ! ! VALUE = 1.0_CMISSDP * DOMAIN_Y1
  1066. ! ! CALL CMISSBoundaryConditions_SetNode(BoundaryConditionsSolid,DependentField,CMISS_FIELD_U_VARIABLE_TYPE,CMISS_NO_GLOBAL_DERIV, &
  1067. ! ! ! & NODE_NUMBER,2_CMISSIntg,CMISS_BOUNDARY_CONDITION_MOVED_WALL_INCREMENTED,VALUE,Err)
  1068. ! ! & NODE_NUMBER,2_CMISSIntg,CMISS_BOUNDARY_CONDITION_FIXED,VALUE,Err)
  1069. ! END IF
  1070. ! !
  1071. ! IF( (ABS(COORD_Y-DOMAIN_Y2) < GEOMETRY_TOLERANCE) ) THEN
  1072. ! ! !y-velocity: F L U I D
  1073. ! ! VALUE = 0.0_CMISSDP
  1074. ! ! CALL CMISSBoundaryConditions_SetNode(BoundaryConditionsDarcy,DependentField,CMISS_FIELD_V_VARIABLE_TYPE,CMISS_NO_GLOBAL_DERIV, &
  1075. ! ! & NODE_NUMBER,2_CMISSIntg,CMISS_BOUNDARY_CONDITION_MOVED_WALL,VALUE,Err)
  1076. ! !
  1077. ! ! ! !y-position: S O L I D
  1078. ! ! ! VALUE = 1.1_CMISSDP * DOMAIN_Y2
  1079. ! ! ! CALL CMISSBoundaryConditions_SetNode(BoundaryConditionsSolid,DependentField,CMISS_FIELD_U_VARIABLE_TYPE,1, &
  1080. ! ! ! & NODE_NUMBER,2_CMISSIntg,CMISS_BOUNDARY_CONDITION_FIXED,VALUE,Err)
  1081. ! END IF
  1082. ! !
  1083. ! IF( (ABS(COORD_Z-DOMAIN_Z1) < GEOMETRY_TOLERANCE) ) THEN
  1084. ! !z-velocity: F L U I D
  1085. ! !mass-correction: F L U I D
  1086. ! VALUE = 0.1_CMISSDP
  1087. ! CALL CMISSBoundaryConditions_SetNode(BoundaryConditionsDarcy,DependentField,CMISS_FIELD_V_VARIABLE_TYPE,CMISS_NO_GLOBAL_DERIV, &
  1088. ! ! & NODE_NUMBER,3_CMISSIntg,CMISS_BOUNDARY_CONDITION_FIXED,VALUE,Err)
  1089. ! ! & NODE_NUMBER,3_CMISSIntg,CMISS_BOUNDARY_CONDITION_CORRECTION_MASS_INCREASE,VALUE,Err)
  1090. ! ! & NODE_NUMBER,4_CMISSIntg,CMISS_BOUNDARY_CONDITION_CORRECTION_MASS_INCREASE,VALUE,Err)
  1091. ! & NODE_NUMBER,4_CMISSIntg,CMISS_BOUNDARY_CONDITION_FREE,VALUE,Err)
  1092. !
  1093. ! ! !z-position: S O L I D
  1094. ! ! VALUE = 1.0_CMISSDP * DOMAIN_Z1
  1095. ! ! CALL CMISSBoundaryConditions_SetNode(BoundaryConditionsSolid,DependentField,CMISS_FIELD_U_VARIABLE_TYPE,CMISS_NO_GLOBAL_DERIV, &
  1096. ! ! & NODE_NUMBER,3_CMISSIntg,CMISS_BOUNDARY_CONDITION_FIXED,VALUE,Err)
  1097. ! END IF
  1098. ! !
  1099. ! IF( (ABS(COORD_Z-DOMAIN_Z2) < GEOMETRY_TOLERANCE) ) THEN
  1100. ! ! !z-velocity: F L U I D
  1101. ! ! VALUE = 0.0_CMISSDP
  1102. ! ! CALL CMISSBoundaryConditions_SetNode(BoundaryConditionsDarcy,DependentField,CMISS_FIELD_V_VARIABLE_TYPE,CMISS_NO_GLOBAL_DERIV, &
  1103. ! ! & NODE_NUMBER,3_CMISSIntg,CMISS_BOUNDARY_CONDITION_FIXED,VALUE,Err)
  1104. !
  1105. ! ! VALUE = COORD_X
  1106. ! ! CALL CMISSBoundaryConditions_SetNode(BoundaryConditionsSolid,DependentField,CMISS_FIELD_U_VARIABLE_TYPE,1, &
  1107. ! ! & NODE_NUMBER,1_CMISSIntg,CMISS_BOUNDARY_CONDITION_FIXED,VALUE,Err)
  1108. ! !
  1109. ! ! VALUE = COORD_Y
  1110. ! ! CALL CMISSBoundaryConditions_SetNode(BoundaryConditionsSolid,DependentField,CMISS_FIELD_U_VARIABLE_TYPE,CMISS_NO_GLOBAL_DERIV, &
  1111. ! ! & NODE_NUMBER,2_CMISSIntg,CMISS_BOUNDARY_CONDITION_FIXED,VALUE,Err)
  1112. ! !
  1113. ! ! VALUE = COORD_Z
  1114. ! ! CALL CMISSBoundaryConditions_SetNode(BoundaryConditionsSolid,DependentField,CMISS_FIELD_U_VARIABLE_TYPE,CMISS_NO_GLOBAL_DERIV, &
  1115. ! ! & NODE_NUMBER,3_CMISSIntg,CMISS_BOUNDARY_CONDITION_FIXED,VALUE,Err)
  1116. !
  1117. ! !x-position: S O L I D
  1118. ! VALUE = COORD_Z
  1119. ! CALL CMISSBoundaryConditions_SetNode(BoundaryConditionsSolid,DependentField,CMISS_FIELD_U_VARIABLE_TYPE,1, &
  1120. ! & NODE_NUMBER,3_CMISSIntg,CMISS_BOUNDARY_CONDITION_FIXED,VALUE,Err)
  1121. !
  1122. ! !Fix point 1
  1123. ! IF( (ABS(COORD_Y-DOMAIN_Y2) < GEOMETRY_TOLERANCE) ) THEN
  1124. ! IF( (ABS(COORD_X-DOMAIN_X2) < GEOMETRY_TOLERANCE) ) THEN
  1125. ! VALUE = COORD_Y
  1126. ! CALL CMISSBoundaryConditions_SetNode(BoundaryConditionsSolid,DependentField,CMISS_FIELD_U_VARIABLE_TYPE,CMISS_NO_GLOBAL_DERIV, &
  1127. ! & NODE_NUMBER,2_CMISSIntg,CMISS_BOUNDARY_CONDITION_FIXED,VALUE,Err)
  1128. !
  1129. ! VALUE = COORD_X
  1130. ! CALL CMISSBoundaryConditions_SetNode(BoundaryConditionsSolid,DependentField,CMISS_FIELD_U_VARIABLE_TYPE,CMISS_NO_GLOBAL_DERIV, &
  1131. ! & NODE_NUMBER,1_CMISSIntg,CMISS_BOUNDARY_CONDITION_FIXED,VALUE,Err)
  1132. ! END IF
  1133. ! END IF
  1134. ! !(Fix) point 2
  1135. ! IF( (ABS(COORD_Y-DOMAIN_Y1) < GEOMETRY_TOLERANCE) ) THEN
  1136. ! IF( (ABS(COORD_X-DOMAIN_X2) < GEOMETRY_TOLERANCE) ) THEN
  1137. ! VALUE = COORD_X
  1138. ! CALL CMISSBoundaryConditions_SetNode(BoundaryConditionsSolid,DependentField,CMISS_FIELD_U_VARIABLE_TYPE,CMISS_NO_GLOBAL_DERIV, &
  1139. ! & NODE_NUMBER,1_CMISSIntg,CMISS_BOUNDARY_CONDITION_FIXED,VALUE,Err)
  1140. ! END IF
  1141. ! END IF
  1142. ! !(Fix) point 3
  1143. ! IF( (ABS(COORD_Y-DOMAIN_Y2) < GEOMETRY_TOLERANCE) ) THEN
  1144. ! IF( (ABS(COORD_X-DOMAIN_X1) < GEOMETRY_TOLERANCE) ) THEN
  1145. ! VALUE = COORD_Y
  1146. ! CALL CMISSBoundaryConditions_SetNode(BoundaryConditionsSolid,DependentField,CMISS_FIELD_U_VARIABLE_TYPE,CMISS_NO_GLOBAL_DERIV, &
  1147. ! & NODE_NUMBER,2_CMISSIntg,CMISS_BOUNDARY_CONDITION_FIXED,VALUE,Err)
  1148. ! END IF
  1149. ! END IF
  1150. !
  1151. !
  1152. ! END IF
  1153. ! END DO
  1154. ! END IF
  1155. !Finish the creation of the equations set boundary conditions for Darcy
  1156. !CALL CMISSSolverEquations_BoundaryConditionsCreateFinish(SolverEquationsDarcy,Err)
  1157. !Finish the creation of the equations set boundary conditions for the solid
  1158. CALL CMISSSolverEquations_BoundaryConditionsCreateFinish(SolverEquationsSolid,Err)
  1159. !
  1160. !Start the creation of the equations set boundary conditions for deformation-dependent material properties
  1161. CALL CMISSBoundaryConditions_Initialise(BoundaryConditionsMatProperties,Err)
  1162. CALL CMISSSolverEquations_BoundaryConditionsCreateStart(SolverEquationsMatProperties,BoundaryConditionsMatProperties,Err)
  1163. !(No boundary conditions requrired for deformation-dependent material properties)
  1164. !Finish the creation of the equations set boundary conditions for deformation-dependent material properties
  1165. CALL CMISSSolverEquations_BoundaryConditionsCreateFinish(SolverEquationsMatProperties,Err)
  1166. !
  1167. !================================================================================================================================
  1168. !
  1169. !RUN SOLVERS
  1170. !Turn of PETSc error handling
  1171. !CALL PETSC_ERRORHANDLING_SET_ON(ERR,ERROR,*999)
  1172. !Solve the problem
  1173. WRITE(*,'(A)') "Solving problem..."
  1174. CALL CMISSProblem_Solve(Problem,Err)
  1175. WRITE(*,'(A)') "Problem solved!"
  1176. !
  1177. !================================================================================================================================
  1178. !
  1179. !OUTPUT
  1180. EXPORT_FIELD_IO=.FALSE.
  1181. IF(EXPORT_FIELD_IO) THEN
  1182. WRITE(*,'(A)') "Exporting fields..."
  1183. CALL CMISSFields_Initialise(Fields,Err)
  1184. CALL CMISSFields_Create(Region,Fields,Err)
  1185. CALL CMISSFields_NodesExport(Fields,"FiniteElasticityDarcy","FORTRAN",Err)
  1186. CALL CMISSFields_ElementsExport(Fields,"FiniteElasticityDarcy","FORTRAN",Err)
  1187. CALL CMISSFields_Finalise(Fields,Err)
  1188. WRITE(*,'(A)') "Field exported!"
  1189. ENDIF
  1190. !Finialise CMISS
  1191. ! CALL CMISSFinalise(Err)
  1192. WRITE(*,'(A)') "Program successfully completed."
  1193. STOP
  1194. END PROGRAM INCOMPELASTDRIVENDARCYANALYTICDARCYEXAMPLE